Skip to content
Latchkey

How to Use a Manifest Repo to Track Versions Across Repos

A manifest repo holds one file listing each service pinned version, turning a release into a single reviewable change that CI acts on.

Store a versions.yaml (or JSON) mapping each service to a version. A change to that file is the release trigger: the manifest CI diffs it and dispatches deploys for the services that moved.

Steps

  • Keep a versions.yaml mapping service to pinned version.
  • On push, diff which services changed version.
  • Dispatch deploys only for the changed services.

Manifest file

versions.yaml
services:
  api: 2.4.1
  web: 5.0.0
  worker: 1.9.3

Manifest-driven deploy job

.github/workflows/rollout.yml
on:
  push:
    paths: ['versions.yaml']
jobs:
  rollout:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 2
      - env:
          GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
        run: ./scripts/deploy-changed-services.sh

Gotchas

  • Fetch at least two commits so the job can diff the manifest against the previous version.
  • Keep the manifest the single source of truth; drift appears the moment a service deploys outside it.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →