Azure DevOps to GitHub, Zero Data Loss
Moving every repository, every pipeline and every LFS artifact of an FDA-regulated medical-device codebase onto GitHub, with full history preserved, builds revalidated, and not one byte left behind.
The Capsule division at Philips Healthcare builds software that lives inside FDA-regulated medical devices, where the provenance of every commit is part of the regulatory record. The mandate was to move the whole team off Azure DevOps and onto GitHub: repositories, Git LFS artifacts, build, test and release pipelines, without losing history, without downtime, and without giving the auditors a single gap to question.
A migration like this is not a one-click import. Classic and YAML pipelines had to become GitHub Actions workflows, gigabytes of LFS binaries had to land in Artifactory, build scripts had to be modernised for GitHub's runners, and the Azure platform underneath had to be re-laid against the Well-Architected Framework. The constraint that shaped every decision was simple: active development teams could not stop, and zero bytes of history could go missing.
The brief: move everything, lose nothing
The scope spanned the team's entire Git estate plus the CI/CD that depended on it. Every move was treated as reversible until validated, and every artifact was checksummed on both sides.
- Repositories with full history, every branch, tag and commit author preserved so the regulatory audit trail stayed intact.
- Git LFS to Artifactory, large binary artifacts relocated to a managed Artifactory repository rather than left in Git, with integrity verified by checksum.
- Pipelines reborn as Actions, Azure DevOps Classic and YAML pipelines rebuilt as GitHub Actions across build, test and release.
- Zero downtime for developers, teams kept committing throughout; cutover was staged repo by repo, never big-bang.
Watch a repository cross the bridge
Press Migrate to send each repository and pipeline across the bridge from Azure DevOps to GitHub. Every chip passes four labelled gates in turn: history preserved, LFS moved to Artifactory, pipeline converted to Actions, and validated. The data-loss readout holds at zero bytes the whole way, the progress bar fills to 100%, and the console logs each repo as it lands green on the GitHub side.
Pipelines, scripts and the platform underneath
Repositories are the visible half of a migration; the CI/CD and the cloud platform are where the real work hides. Each pipeline was rebuilt rather than blindly translated, so the team ended up with workflows that fit GitHub's model instead of a literal port of Azure DevOps habits.
- Actions across build, test, release, Classic and YAML pipelines reimplemented as GitHub Actions on both GitHub-hosted and self-hosted runners, the latter where hardware-in-the-loop tests demanded it.
- Modernised build scripts, PowerShell and Bash scripts plus their dependency configs refactored for GitHub's runner images, removing Azure-DevOps-specific assumptions.
- Azure PaaS deployed and configured, Azure Databricks and Azure Data Factory stood up and wired into the new workflows for the data-processing side of the platform.
- Network and identity hardened, networking and identity configuration applied on Azure following the Well-Architected Framework and Landing Zones for a clean cloud-adoption baseline.
Convert, do not transliterate. A pipeline that works on GitHub Actions is not the Azure DevOps YAML with the keywords swapped. Rebuilding around Actions' triggers, runners and secrets model produced workflows the team could maintain, instead of a fragile mirror of the old system.
Validation when the auditor is watching
In FDA-regulated medical-device software, a migration is only done when every build, test and release has been proven equivalent on the new platform. End-to-end validation ran across the migrated workflows, and it earned its keep: several critical compatibility issues surfaced and were resolved before they could reach production.
Proactive risk management is what kept this on the rails. Issues were caught in validation rather than in production, the cutover stayed staged so any single repo could be rolled back, and active development teams never lost a working day. The result was a migration that delivered on schedule with zero downtime and zero data loss.
# History and LFS integrity check, run on both sides of the bridge
git -C ./gh/core-firmware rev-list --count --all # commit count matches source
git -C ./gh/core-firmware lfs ls-files | wc -l # every LFS pointer accounted for
jf rt download "capsule-lfs/*" --validate-symlinks # Artifactory checksums verified
# diff source vs target: 0 commits missing, 0 bytes lost
Takeaways
- Migrate repositories with full history so the regulatory audit trail survives the move intact.
- Relocate Git LFS artifacts to managed Artifactory storage and verify every one by checksum.
- Rebuild pipelines as native GitHub Actions instead of transliterating Azure DevOps YAML.
- Validate builds, tests and releases end-to-end, and stage the cutover so developers never stop shipping.
Facing a platform migration of your own?
We move regulated codebases off Azure DevOps and onto GitHub with full history, LFS to Artifactory, and pipelines rebuilt as Actions, validated end-to-end and delivered with zero data loss.
Plan a zero-loss migration