Skip to content
Latchkey

How to Migrate CI Incrementally by Running Both in Parallel

A safe cutover runs the old CI and GitHub Actions side by side, keeps the old one authoritative, and only makes Actions a required check once results match.

Do not flip everything at once. Add the Actions workflow alongside the existing pipeline, leave the old system as the required check, compare outcomes for a while, then swap the required status to Actions and retire the old config.

Phases

PhaseAction
1. Shadowadd Actions workflow, keep old CI required
2. Comparewatch both on the same PRs for divergence
3. Promotemake the Actions check required
4. Retireremove old config once Actions is trusted

Shadow workflow

.github/workflows/ci.yml
# Runs in parallel with the old CI but does not block merges yet.
on: [push, pull_request]
jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

What does not map cleanly

  • Running two systems doubles minutes during the overlap; keep the shadow window short, or use cheaper managed runners such as Latchkey while you compare.
  • Only one system should be a required check at a time to avoid confusing merge gates.
  • Remove the old config in the same PR that promotes Actions so history stays clear.

Related guides

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