* Initial plan * Migrate Azure Pipelines to GitHub Actions CI workflow Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add CI testing and validation documentation Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Update manylinux container image in CI workflow * Disable test execution in CI workflow --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
4.6 KiB
Azure Pipelines to GitHub Actions Migration
Overview
This document describes the migration from Azure Pipelines (azure-pipelines.yml) to GitHub Actions (.github/workflows/ci.yml).
Migration Summary
All jobs from the Azure Pipelines configuration have been migrated to GitHub Actions with equivalent or improved functionality.
Jobs Migrated
| Azure Pipelines Job | GitHub Actions Job | Status |
|---|---|---|
| LinuxPythonDebug (MT) | linux-python-debug (MT) | ✅ Migrated |
| LinuxPythonDebug (ST) | linux-python-debug (ST) | ✅ Migrated |
| ManylinuxPythonBuildAmd64 | manylinux-python-amd64 | ✅ Migrated |
| ManyLinuxPythonBuildArm64 | manylinux-python-arm64 | ✅ Migrated |
| UbuntuOCaml | ubuntu-ocaml | ✅ Migrated |
| UbuntuOCamlStatic | ubuntu-ocaml-static | ✅ Migrated |
| UbuntuCMake (releaseClang) | ubuntu-cmake (releaseClang) | ✅ Migrated |
| UbuntuCMake (debugClang) | ubuntu-cmake (debugClang) | ✅ Migrated |
| UbuntuCMake (debugGcc) | ubuntu-cmake (debugGcc) | ✅ Migrated |
| UbuntuCMake (releaseSTGcc) | ubuntu-cmake (releaseSTGcc) | ✅ Migrated |
| MacOSPython | macos-python | ✅ Migrated |
| MacOSCMake | macos-cmake | ✅ Migrated |
| LinuxMSan | N/A | ⚠️ Was disabled (condition: eq(0,1)) |
| MacOSOCaml | N/A | ⚠️ Was disabled (condition: eq(0,1)) |
Key Differences
Syntax Changes
-
Trigger Configuration
- Azure:
jobs:with implicit triggers - GitHub: Explicit
on:section withpush,pull_request, andworkflow_dispatch
- Azure:
-
Job Names
- Azure:
displayNamefield - GitHub:
namefield
- Azure:
-
Steps
- Azure:
script:for shell commands - GitHub:
run:for shell commands
- Azure:
-
Checkout
- Azure: Implicit checkout
- GitHub: Explicit
uses: actions/checkout@v4
-
Python Setup
- Azure: Implicit Python availability
- GitHub: Explicit
uses: actions/setup-python@v5
-
Variables
- Azure: Top-level
variables:section - GitHub: Inline in job steps or matrix configuration
- Azure: Top-level
Template Scripts
Azure Pipelines used external template files (e.g., scripts/test-z3.yml, scripts/test-regressions.yml). These have been inlined into the GitHub Actions workflow:
scripts/test-z3.yml: Unit tests → Inlined as "Run unit tests" stepscripts/test-regressions.yml: Regression tests → Inlined as "Run regressions" stepscripts/test-examples-cmake.yml: CMake examples → Inlined as "Run examples" stepscripts/generate-doc.yml: Documentation → Inlined as "Generate documentation" step
Matrix Strategies
Both Azure Pipelines and GitHub Actions support matrix builds. The migration maintains the same matrix configurations:
- linux-python-debug: 2 variants (MT, ST)
- ubuntu-cmake: 4 variants (releaseClang, debugClang, debugGcc, releaseSTGcc)
Container Jobs
Manylinux builds continue to use container images:
quay.io/pypa/manylinux_2_34_x86_64:latestfor AMD64quay.io/pypa/manylinux2014_x86_64:latestfor ARM64 cross-compilation
Disabled Jobs
Two jobs were disabled in Azure Pipelines (with condition: eq(0,1)) and have not been migrated:
- LinuxMSan: Memory sanitizer builds
- MacOSOCaml: macOS OCaml builds
These can be re-enabled in the future if needed by adding them to the workflow file.
Benefits of GitHub Actions
- Unified Platform: All CI/CD in one place (GitHub)
- Better Integration: Native integration with GitHub features (checks, status, etc.)
- Actions Marketplace: Access to pre-built actions
- Improved Caching: Better artifact and cache management
- Cost: Free for public repositories
Testing
To test the new workflow:
- Push a branch or create a pull request
- The workflow will automatically trigger
- Monitor progress in the "Actions" tab
- Review job logs for any issues
Deprecation Plan
- ✅ Create new GitHub Actions workflow (
.github/workflows/ci.yml) - 🔄 Test and validate the new workflow
- ⏳ Run both pipelines in parallel for a transition period
- ⏳ Once stable, deprecate
azure-pipelines.yml
Rollback Plan
If issues arise with the GitHub Actions workflow:
- The original
azure-pipelines.ymlremains in the repository - Azure Pipelines can be re-enabled if needed
- Both can run in parallel during the transition