Build Pipelines
Pipelines
CI/CD
The CI/CD pipeline builds and tests all ARK components, services, and documentation on every push. It includes library builds, single-platform container builds (AMD64) for testing, E2E testing, and release preparation.
Deploy
The Deploy pipeline is run on demand to deploy:
- Documentation to GitHub Pages
- Multi-arch Containers to the configured container registry
- Helm chart to the configured container registry (under
/charts
path) - ARK CLI to NPM registry
- Ark to the configured distribution environment
- Ark to the configured AWS test environment
- Ark to the configured GKE test environment
The artifacts that are deployed can be selected when the pipeline is run, as well as the specific version tag to use.
Release Management
ARK uses Release Please for automated release management based on conventional commits. The entire release process is automated and follows semantic versioning.
Release please will create pull requests, update the changelog, and the CI/CD pipeline wil deploy the docs and modules and create versioning tags and labels.
Release Flow
-
Continuous Commit Analysis (On every push to main)
- Release Please runs after all CI checks pass (configured in
.github/workflows/cicd.yaml:716
) - Analyzes all commits since the last release using conventional commit format
- Determines version bump based on commit types and current version:
- For versions < 1.0.0 (current: 0.1.30):
feat:
→ Patch version bump (0.1.30 → 0.1.31) due tobump-patch-for-minor-pre-major: true
fix:
→ Patch version bump (0.1.30 → 0.1.31)feat!:
orBREAKING CHANGE:
→ Minor version bump (0.1.30 → 0.2.0)
- For versions ≥ 1.0.0:
feat:
→ Minor version bump (1.0.0 → 1.1.0)fix:
→ Patch version bump (1.0.0 → 1.0.1)feat!:
orBREAKING CHANGE:
→ Major version bump (1.0.0 → 2.0.0)
- Other types (
docs:
,chore:
,refactor:
, etc.) → No version bump but included in changelog
- For versions < 1.0.0 (current: 0.1.30):
- Release Please runs after all CI checks pass (configured in
-
Automatic Release PR Management
- If unreleased changes exist, Release Please creates or updates a PR titled “chore(main): release X.X.X”
- The PR contains:
- Updated
.github/CHANGELOG.md
with aggregated changes since last release - Version updates in version files across the monorepo (defined in
.github/release-please-config.json
) - Consistent version synchronization across all packages, charts, and services
- Updated
-
Release Activation (When Release PR is merged)
- The CI/CD pipeline re-runs fully and creates a GitHub release with the new version tag
- Changelog is automatically attached to the GitHub release
- Sets
release_created
output to trigger downstream jobs:- release-docs: Deploys documentation to GitHub Pages
- release-libs: Attaches Python wheel files to GitHub release
- release-chart: Attaches Helm chart package to GitHub release
- release-ark-cli: Attaches ARK CLI npm package to GitHub release
- run-deploy-workflow: Triggers the Deploy workflow for production deployment
Version Synchronization
Release Please updates versions in the following locations:
- Root
version.txt
- Python packages (
pyproject.toml
files) - Helm charts (
Chart.yaml
files) - Node.js packages (
package.json
files) - Kubernetes manifests (
manager.yaml
) - All service and library versions
Validate PR Title
Ensures pull request titles follow conventional commit format described in the repository CONTRIBUTING.md
for consistent squash merge messages.
SonarQube Code Analysis (SCAS)
Automated code quality and security analysis. Expected to fail in open source repositories as it requires McKinsey-specific infrastructure.
Recommended GitHub Configuration
Configure repository settings to enforce conventional commits for automated release management:
- General → Pull Requests: Enable only squash merging
- Branches → Branch Protection: Require
validate-title
status check and linear history
Configuration
GitHub variables and secrets for ARK build and deployment workflows. All configuration is optional - if not provided, workflows will default to using GitHub Container Registry (GHCR).
Name | Type | Purpose | Default Value |
---|---|---|---|
Docker Registry (Production) | |||
DOCKER_REGISTRY | Variable (Optional) | Main registry URL for version-tagged production/release images | ghcr.io/{repository_owner}/{repository_name} |
DOCKER_REGISTRY_USERNAME | Secret (Optional) | Username for main registry authentication | ${{ github.actor }} |
DOCKER_REGISTRY_PASSWORD | Secret (Optional) | Password/token for main registry authentication | ${{ secrets.GITHUB_TOKEN }} |
CI Cache Registry (Build Artifacts) | |||
DOCKER_CICD_CACHE_REGISTRY | Variable (Optional) | Registry URL for SHA-tagged intermediate images and CI/CD build cache | ghcr.io/{repository_owner}/{repository_name} |
DOCKER_CICD_CACHE_REGISTRY_USERNAME | Secret (Optional) | Username for CI cache registry authentication | ${{ github.actor }} |
DOCKER_CICD_CACHE_REGISTRY_PASSWORD | Secret (Optional) | Password/token for CI cache registry authentication | ${{ secrets.GITHUB_TOKEN }} |
Azure OpenAI (Testing) | |||
CICD_AZURE_OPENAI_KEY | Secret | Azure OpenAI API key for E2E quickstart tests and evaluator | |
CICD_AZURE_OPENAI_BASE_URL | Secret | Azure OpenAI base URL for E2E quickstart tests and evaluator | |
Distribution Environment Deployment | |||
DEPLOY_CLUSTER_LOGIN_URL | Secret | Kubernetes cluster login URL for centralized deployment environment | |
DEPLOY_CLUSTER_IDP_ISSUER_URL | Secret | Identity provider issuer URL for cluster authentication | |
Documentation Site | |||
DOCS_SITE_BASE_PATH | Variable (Optional) | Base path for documentation site when serving from non-root URL (e.g., GitHub Pages) | |
NPM Registry (CLI Deployment) | |||
NPM_TOKEN | Secret (Optional) | NPM authentication token with publish permissions for CLI deployment | |
Code Quality and Analysis | |||
SONAR_TOKEN | Secret | SonarQube authentication token | |
SONAR_HOST_URL | Secret | SonarQube server URL | |
ARTIFACTORY_USER | Secret | Artifactory username for dependency resolution | |
ARTIFACTORY_PASS | Secret | Artifactory password for dependency resolution |
Troubleshooting
Uppercase Organization Names
Unless otherwise specified, GHCR is used as the default Docker container registry, with the value ghcr.io/<org_name>
. Docker registry names must be lowercase. If your GitHub organization name contains uppercase characters, you must explicitly set the Docker registry secrets with lowercase values. For example, for the organization My-Org
, set:
DOCKER_REGISTRY: "ghcr.io/my-org"
DOCKER_CICD_CACHE_REGISTRY: "ghcr.io/my-org"
GitHub Pages Documentation Deployment
When deploying documentation to GitHub Pages, the site is served from a subpath (e.g., mckinsey.github.io/agents-at-scale-ark
). To ensure assets load correctly, set the DOCS_SITE_BASE_PATH
repository variable to match your repository name:
DOCS_SITE_BASE_PATH: "/agents-at-scale-ark"
This configures the Next.js build to serve all assets from the correct subpath. Without this setting, CSS, JavaScript, and images will fail to load when deployed to GitHub Pages.