backend
database
frontend
integrations
Multi-repo changelogs: add project_repos join table
- Projects can now track commits from multiple GitHub repositories — A new project_repos join table was added so one changelog can include commits from many repositories. The migration back-filled existing repo links and removed single-repo columns from projects. The web UI and API now let you link and manage multiple repos per project.
New Features
- Added a project_repos join table so a single project changelog can aggregate commits from multiple repositories.database
- Added API endpoints to manage repo links: POST/GET /v1/projects/:id/repos and DELETE /v1/projects/:id/repos/:repoId.backend
- Added a Repositories section in Project Settings (ProjectReposSection) to add, list, and remove linked repositories from the web UI.frontend
- Created a project_repos row automatically when a project is created and queued a sync for that repo.backend
- Webhooks were updated to fan out one github/push.received event per linked repo so the same repository can feed multiple projects.integrations
Improvements
- Moved per-repo sync state and branch metadata off projects and onto project_repos (sync_status, tracked_branch, available_branches, last_synced_at, last_sync_error).database
- Updated background sync and webhook flows to use projectRepoId and per-repo branch filtering, improving correctness for multi-repo projects.backend
- Refactored database layer: added ProjectRepoRepository and removed single-repo methods from ProjectRepository.database
- Updated web components (ProjectCard, ProjectGrid, ProjectSwitcher, project settings and proxy routes) to display and manage repo links and a project's primary repo.frontend
- Expanded tests to cover project-repos behaviour and updated webhook and project-create tests for the new fan-out and projectRepoId contract.backend
API
- repo/sync.requested, github/push.received, and commit/received events now include projectRepoId (and github/push.received also includes trackedBranch).backend
- repo/sync.requested added a new trigger value triggeredBy = repo_added when a repo is linked.backend
- POST /v1/projects now creates the project row and a corresponding project_repos row; the initial sync event includes projectRepoId.backend
- POST /v1/projects/:id/resync now queues a repo/sync.requested event for each linked repository instead of a single project-level sync.backend
Breaking Changes
- The projects table no longer contains github_installation_id, repo_owner, repo_name, tracked_branch, available_branches, sync_status, last_synced_at, or last_sync_error; those columns were moved to project_repos.database
- A database migration (supabase/schema/011_project_repos.sql) was included that back-filled existing repo data into project_repos before dropping the old project columns; you must run this migration when upgrading.devops
- Integrations and background functions that relied on project-level repo fields or project-level sync_status must be updated to use projectRepoId and project_repos.integrations
Database
- Added migration and schema for project_repos, indexes, constraints, RLS policies, and triggers; back-filled existing project repo data.database
- Dropped single-repo constraints and indexes on projects and added a uniqueness constraint per (project_id, installation, owner, name) in project_repos.database