All updates
backend
database
frontend
integrations

Multi-repo changelogs: add project_repos join table

  • Projects can now track commits from multiple GitHub repositoriesA 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