This repository builds and validates virtual machine images for Mozilla Taskcluster worker pools. It uses Packer for image creation, YAML files for per-image configuration, GitHub Actions for dispatch and publishing, and Taskcluster jobs for integration validation.
The repository started as a Windows Azure image builder. It now covers Firefox CI Windows images in Azure Compute Gallery, Ubuntu 24.04 images in GCP, and a separate set of Taskcluster Engineering image builds.
| Area | Images | Cloud |
|---|---|---|
| Firefox CI Windows | Windows 10, Windows 11 24H2/25H2, Windows Server 2022, x64 and arm64 tester/builder variants | Azure |
| Firefox CI Linux | Ubuntu 24.04 headless, arm64 headless, and GUI/Wayland images, including trusted level-3 variants | GCP |
| Taskcluster Engineering | Generic worker images for Azure, GCP, and AWS experiments and migrations | Azure, GCP, AWS |
Production Firefox CI rollouts do not finish in this repository. This repo
publishes images and release notes. The worker-pool references that actually
make CI boot a new image are managed in mozilla-releng/fxci-config.
config/*.yamldescribes an image: base OS, cloud project or gallery, machine type, image name, tags, and image-specific tests.bin/WorkerImages/reads that config, applies defaults where relevant, sets Packer variables, and starts Packer.azure.pkr.hcl,gcp.pkr.hcl, andpacker/tceng-*.pkr.hcldefine the VM build steps.scripts/provisions the guest OS. Windows images use a PowerShell Bootstrap module; Linux images use shell scripts grouped by distro and image family.tests/runs image-level checks during the Packer build.sboms/stores generated release notes and software bill of materials for Windows image builds..github/workflows/builds images, uploads release-note artifacts, and starts integration validation.taskcluster/defines the Taskcluster task graph used by integration tests.
| Path | Purpose |
|---|---|
.github/workflows/ |
GitHub Actions workflows for Azure, GCP, AWS, pre-commit, and OS integration jobs |
bin/WorkerImages/ |
PowerShell module used by workflows to translate YAML config into Packer environment variables |
ci/ |
Workflow helper scripts for matrix generation, authorization checks, image builds, and Taskcluster integration triggers |
config/ |
Firefox CI image definitions plus windows_production_defaults.yaml |
config/tceng/ |
Taskcluster Engineering image definitions |
packer/ |
Packer templates for Taskcluster Engineering images |
scripts/linux/ |
Linux provisioning scripts for Firefox CI and Taskcluster Engineering images |
scripts/windows/ |
Windows Bootstrap module and Taskcluster Engineering provisioning scripts |
tests/linux/ |
Linux image validation scripts |
tests/win/ |
Windows Pester tests selected by each Windows image config |
taskcluster/ |
Taskgraph code for image integration tests |
provisioners/ |
Internal non-cloud and hardware-imaging work; not part of normal cloud image rollouts |
Builds are normally run with GitHub Actions workflow dispatch. The workflows
check the actor against .github/relsre.json or .github/tceng.json before
they build.
| Workflow | File | Use |
|---|---|---|
FXCI - Azure Prod Parallel Images |
sig-FXCI-parallel-build.yml |
Full Windows production build. Builds untrusted production configs and trusted Azure configs in one matrix. |
FXCI - Azure Alpha Parallel Images |
sig-FXCI-nontrusted-parallel-build-alpha.yml |
Windows alpha builds from images.alpha in windows_production_defaults.yaml. |
FXCI - Azure |
sig-nontrusted.yml |
One-off untrusted Windows Azure build. |
FXCI - Azure - Trusted |
sig-trusted.yml |
One-off trusted Windows Azure build. Do not use this in addition to the prod parallel workflow for a full rollout. |
FXCI - GCP Alpha Parallel Images |
gcp-fxci-parallel-alpha.yml |
Builds all Firefox CI Ubuntu alpha images in GCP. |
FXCI - GCP Prod Parallel Images |
gcp-deploy-parallel.yml |
Promotes all Firefox CI Ubuntu alpha images into date-stamped production GCP images. |
FXCI - GCP |
gcp-fxci.yml |
One-off Firefox CI Ubuntu alpha image build. |
FXCI - GCP Production |
gcp-deploy.yml |
One-off Firefox CI Ubuntu production promotion. |
OS Integration Tests - FXCI |
os-integration.yml |
Triggers Taskcluster integration tests against a built image. |
| TC Engineering workflows | nonsig-tceng-azure.yml, gcp-tceng.yml, aws-tceng.yml |
Builds images owned by Taskcluster Engineering. |
Windows Firefox CI images are Azure Compute Gallery images. Each config under
config/ defines the marketplace source image, gallery name, gallery image
name, gallery version, VM size, ronin_puppet role, and Pester tests.
config/windows_production_defaults.yaml provides shared Windows defaults:
- OpenVox, Puppet, and Git versions used during bootstrap.
- The default
ronin_puppetorganization, repository, branch, anddeploymentId. - The production and alpha config lists used by the parallel Azure workflows.
Most production configs inherit the default ronin_puppet pin by setting
vm.tags.deploymentId: "default". The gallery version is per config in
sharedimage.image_version; bump the configs you actually intend to rebuild.
During the build, the Windows Bootstrap module installs prerequisites, clones ronin_puppet at the configured branch and commit, applies Puppet, runs the config-selected Pester tests, generates release notes, and syspreps the image.
Firefox CI Linux images are Ubuntu 24.04 GCP images. Alpha builds create or
replace images whose names end in -alpha. Production workflows copy those
alpha images into date-stamped production image names such as:
gw-fxci-gcp-l1-2404-amd64-headless-googlecompute-2026-06-23
gw-fxci-gcp-l3-2404-amd64-headless-googlecompute-2026-06-23
Level-1 images live in the taskcluster-imaging project. Trusted level-3
images live in fxci-production-level3-workers. Production rollouts update
the matching image paths in fxci-config.
There are three layers of validation:
- Packer build tests run inside the image before publishing.
- Some workflows automatically trigger Taskcluster OS integration tests through
.github/workflows/os-integration.ymlandci/run-os-integration.py. - Production rollouts should also be validated from the
fxci-configPR using/taskcluster integration, because that tests the worker-pool config that will actually ship.
For Firefox CI images, tier-1 test health is the release bar. If a new image makes tier-1 red or materially more intermittent, it is not ready for production pools.
The short version for Firefox CI production rollouts:
- Land any image content changes first. Windows content usually comes from
ronin_puppet; Linux content usually comes from this repository's Linux scripts and config. - Bump the image config in this repo. For Windows, update the relevant
sharedimage.image_versionvalues and the defaultdeploymentIdif the ronin_puppet pin changed. - Run the appropriate parallel build workflow.
- Verify the published images, release notes, and integration results.
- Open an
fxci-configPR that points worker pools at the new versions or GCP image paths. - Trigger
/taskcluster integrationon that PR. - After merge, watch fresh worker-manager events and pool health to confirm new workers boot the expected image.
Most image builds require cloud credentials and should be run through GitHub Actions. Local work is still useful for formatting, static validation, and Taskcluster taskgraph tests.
pre-commit run --all-files
packer init azure.pkr.hcl
packer validate azure.pkr.hcl
packer init gcp.pkr.hcl
packer validate gcp.pkr.hcl
cd taskcluster
pytest test/To trigger OS integration tests from a local shell, set
TASKCLUSTER_CLIENT_ID and TASKCLUSTER_ACCESS_TOKEN, then run:
uv run ci/run-os-integration.py win11_64_24h2_alpha
uv run ci/run-os-integration.py win11_64_24h2_alpha --no-wait| Term | Meaning |
|---|---|
| FXCI | Firefox CI |
| Taskcluster | Mozilla's CI platform for Firefox and related projects |
| Worker image | A VM image booted by a Taskcluster worker pool |
| ronin_puppet | The Puppet repository used to configure Windows Firefox CI images |
| Azure Compute Gallery / SIG | Azure image gallery where versioned Windows images are published |
| SBOM | Software bill of materials generated from the built Windows image |
| Trusted image | A higher-trust image variant with access to chain-of-trust signing material |