database
backend
frontend
integrations
Add multi-repo changelog support (link multiple GitHub repos per project)
- Link multiple GitHub repositories to a single project changelog — Projects can now track one or more GitHub repositories. Users can add and remove repos from project settings, see per-repo sync status and last-synced times, and the background pipeline and webhooks now identify work by the specific project→repo link so a single repository can feed multiple projects.
New Features
- Added a persistent project_repos join table to map one or more GitHub repositories to a single project changelog.database
- Added a ProjectRepoRepository to manage repo links (create, list, update sync status, update branches, delete).backend
- Added a Project Repositories settings UI so teams can add/remove repos, choose a tracked branch, and view per-repo sync status.frontend
- Added API endpoints to list, add, and remove repo links for a project (GET/POST /v1/projects/:projectId/repos and DELETE /v1/projects/:projectId/repos/:repoId).backend
API
- Validated installation ownership when linking a repo, emitted a repo/sync.requested event after adding a repo, and recorded repo.connected and repo.disconnected audit entries.backend
- Prevented removing the last linked repo for a project (DELETE returns 422 if it would leave zero linked repos) and preserved all commits and changelog history when a repo link was removed.backend
- Updated project creation to create a seed project_repos row in the same transaction and to include projectRepoId in the repo/sync.requested event.backend
- Changed webhook handling to fan out one event per matching project_repo so a single push can trigger work for multiple projects that track the same repository.integrations
Improvements
- Carried projectRepoId through Inngest events (github/push.received, repo/sync.requested, commit/received) so pipeline stages identify the exact project→repo link that triggered work.backend
- Moved repo-related methods off the ProjectRepository and into the new ProjectRepoRepository, and removed repo fields from the projects row and types.database
- Updated web components (ProjectCard, ProjectGrid, ProjectSwitcher, project header and dashboard) to use ProjectRepoRow data and to gracefully handle projects with no linked repos.frontend
- Added web proxy API routes and TanStack Query hooks (useProjectRepos, useAddProjectRepo, useRemoveProjectRepo) to support the new UI flows.frontend
- Updated sync and push-processing workers to write sync status to project_repos and to use the trackedBranch stored on the project_repo row for branch filtering.backend
- Adjusted github-sync-all-commits and resync flows to fan out sync requests per linked repo instead of per project.backend
- Removed repo_owner/repo_name and repo-specific fields from project API responses and client-side project types.backend
- Added a migration that back-filled a project_repos row for each existing project before dropping the old single-repo columns.database
- Added comprehensive tests across database, API, and Inngest packages to cover the new repository linking behavior and worker changes.backend
Bug Fixes
- Fixed a projectRepo variable scope bug in project creation so the repo create result is now assigned and projectRepoId can be included in events.backend
Documentation
- Documented the multi-repo changelog release and the new project_repos schema migration in the project changelog.