Migrate CI from Buildkite to GitHub Actions
| Decided | 2026-02-10 |
| Decided by | Paolo Veronelli |
| Executed by | Paolo Veronelli |
Why
The Cardano Wallet project is entering maintenance-only mode and the Cardano Foundation is preparing for potential handover of maintenance to the community. The CI setup should be as accessible and self-contained as possible for any future maintainer.
Buildkite requires self-hosted infrastructure, agent token management, and familiarity with a separate CI system. GitHub Actions is natively integrated with the repository, visible to all contributors, and does not require additional accounts or permissions beyond GitHub itself.
Decision
We migrate all CI workflows from Buildkite to GitHub Actions.
This supersedes the 2023-01-27 Continuous Integration decision which chose Buildkite as the primary CI system.
Goals
- Visibility — CI status, logs, and configuration are visible directly in the repository. No separate Buildkite account or dashboard is needed.
- Standardisation — All workflows use the same system (GitHub Actions), eliminating the split between Buildkite and GitHub Actions that existed before.
- Handover readiness — A future maintainer only needs GitHub access to operate, debug, and modify CI. No Buildkite organisation membership, agent tokens, or pipeline configuration is required.
- Reduced operational burden — Agent token rotation, Buildkite webhook configuration, and Buildkite-specific hook scripts are no longer needed.
What changed
| Before (Buildkite) | After (GitHub Actions) |
|---|---|
Main build pipeline (pipeline.yml) | ci.yml |
Release pipeline (release.yml) | release.yml |
Restoration benchmarks (restoration-benchmarks.yml) | linux-benchmarks.yml |
| Windows unit tests (already GHA) | windows.yml |
| — | linux-e2e.yml, windows-e2e.yml |
| — | macos-unit-tests.yml, macos-integration.yml |
| — | linux-mithril-sync.yml |
Self-hosted runners (Windows, macOS) remain necessary for platform-specific tests. Runner setup documentation has moved from .buildkite/README.md to the Continuous Integration docs page.
What stays the same
- Self-hosted machines for Windows and macOS builds
- Nix-based build environment
- Attic binary cache for macOS
- Granularity model (post-commit, pre-merge, post-merge, dispatch)
Rationale
The 2023 decision chose Buildkite primarily because of its good nix cache support and artifact handling. Since then:
- GitHub Actions runners gained better nix support via community actions
- The Attic cache replaced the Buildkite-specific nix cache
- The split between Buildkite (Linux/macOS) and GitHub Actions (Windows) created maintenance overhead with two different CI configurations to maintain
- Buildkite required separate account access and agent token management, creating a bus-factor risk for maintenance handover
GitHub Actions eliminates these issues while retaining the self-hosted runner capability needed for platform-specific builds.