Repository navigation
Conversation
✅ Deploy Preview for treeherder ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
camd
force-pushed
the
camd/github-actions-deploy
branch
from
September 22, 2026 16:30
59069de to
6b9ad4d
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## camd/github-actions-ci #9884 +/- ##
========================================================
Coverage 70.17% 70.17%
========================================================
Files 644 644
Lines 39572 39572
Branches 3469 3541 +72
========================================================
Hits 27770 27770
+ Misses 11656 11415 -241
- Partials 146 387 +241 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
camd
force-pushed
the
camd/github-actions-ci
branch
from
October 1, 2026 16:11
79392b3 to
bb89eb1
Compare
camd
force-pushed
the
camd/github-actions-deploy
branch
from
October 1, 2026 16:11
6b9ad4d to
b28223c
Compare
camd
force-pushed
the
camd/github-actions-ci
branch
from
October 3, 2026 15:57
bb89eb1 to
27c350a
Compare
camd
force-pushed
the
camd/github-actions-deploy
branch
from
October 3, 2026 15:57
b28223c to
1268462
Compare
camd
force-pushed
the
camd/github-actions-ci
branch
from
October 6, 2026 17:23
27c350a to
03b59dc
Compare
camd
force-pushed
the
camd/github-actions-deploy
branch
from
October 6, 2026 17:23
1268462 to
d368902
Compare
camd
force-pushed
the
camd/github-actions-ci
branch
from
October 8, 2026 23:55
03b59dc to
f9d4a03
Compare
camd
force-pushed
the
camd/github-actions-deploy
branch
from
October 8, 2026 23:55
d368902 to
867f4c2
Compare
camd
force-pushed
the
camd/github-actions-ci
branch
from
October 11, 2026 17:57
f9d4a03 to
510d6ed
Compare
camd
force-pushed
the
camd/github-actions-deploy
branch
from
October 11, 2026 17:57
867f4c2 to
dfe9878
Compare
First step of migrating CI from CircleCI to GitHub Actions. This adds a
`ci.yml` workflow that mirrors every CircleCI job except `deploy`:
- javascript-tests, javascript-integration-tests, javascript-lint
- builds (docs + linters via tox)
- python-tests-{general,perf,frontend,telemetry} (tox docker envs)
- test-docker-build (BuildKit build of docker/Dockerfile, no push)
Job names match the CircleCI job names so required status checks can be
swapped one-for-one at cutover. A composite `setup-pnpm` action replaces
the CircleCI `setup-pnpm` command. Dependabot now also tracks action
versions.
CircleCI keeps running unchanged; it is removed in a later PR once the
two systems have run side by side and the deploy workflow is in place.
camd
force-pushed
the
camd/github-actions-ci
branch
from
October 13, 2026 16:09
510d6ed to
2f76ca7
Compare
Adds .github/workflows/deploy.yml, which builds the production image and pushes it to Docker Hub and GCP Artifact Registry on pushes to master, prototype and tags, mirroring the CircleCI deploy job. Push-triggered runs are gated on a DEPLOY_ENABLED repository variable so the workflow can land before the registry secrets and variables exist without failing on every push. A workflow_dispatch trigger with a push input (default false) always runs and allows a dry run that exercises version.json, the build, the Docker Hub login and the GCP OIDC exchange without publishing anything. CircleCI is left untouched so both systems publish side by side until cutover.
camd
force-pushed
the
camd/github-actions-deploy
branch
from
October 13, 2026 16:09
dfe9878 to
a089079
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Second step of the CircleCI to GitHub Actions migration, stacked on #9868. This PR adds
.github/workflows/deploy.yml, which builds the production image and pushes it to Docker Hub and GCP Artifact Registry exactly as the CircleCIdeployjob does today..circleci/config.ymlis still untouched; once this is switched on both systems publish the same tags side by side until cutover.masterlatest,master-<sha>latest,master-<sha>prototypeprototype-<sha>prototype-<sha>vX.Y.ZvX.Y.ZvX.Y.Zworkflow_dispatchfrom any other branchdispatch-<sha>(only ifpushinput is true)Design
ci.yml. Keepsid-token: writeand the registry credentials out of the workflow that runs on fork PRs. Nothing inci.ymlchanged.DEPLOY_ENABLEDrepository variable (if: github.event_name == 'workflow_dispatch' || vars.DEPLOY_ENABLED == 'true'). Until it is set totruethe job is skipped on every push tomaster/prototype/tags instead of failing at login. It also doubles as a kill switch: unset it to stop GitHub publishing without a code change.workflow_dispatchdry run. Always runs regardless of the gate. Thepushinput defaults to false. A dry run still createsversion.json, computes the tag list, builds the image, logs in to Docker Hub and completes the GCP OIDC exchange, so every credential is exercised before anything is published. A dispatch from a branch other thanmaster/prototypecan never write a real tag; it usesdispatch-<sha>.deployin parallel with the test jobs, so a redmasterstill publishes. Preserved for parity; gating on a green CI run is a separate product decision.google-github-actions/auth(Workload Identity Federation,token_format: access_token) plusdocker/login-actionagainst the registry host, replacing the CircleCIgcp-cliorb andgcloud auth configure-docker.docker/build-push-actionwith the same BuildKittype=ghacache thattest-docker-buildinci.ymlpopulates, so amasterpush mostly reuses layers from the PR's build.version.jsonuses the GitHub equivalents of the CircleCI variables:GITHUB_SHA,GITHUB_REF_NAMEwhen the ref is a tag,GITHUB_REPOSITORY, and the run URL asbuild.Manual steps
All of these are outside the repo and need someone with the right access. None of them exist yet: as of 2026-09-22
gh secret listandgh variable listformozilla/treeherderare both empty. The full walk-through with the source of truth for each value and thegcloudcommands lives in the "Phase 2" section of #9868. The short version:DOCKER_USERDOCKER_PASSDOCKERHUB_REPOGCP_GAR_REGISTRYGCP_PROJECT_ID_OF_GCP_GARGCP_WIP_PROJECT_NUMBERGCP_WIP_IDGCP_WIP_PROVIDER_IDGCP_GAR_PUSHER_SERVICE_ACCOUNT_EMAILDEPLOY_ENABLEDtruelast, after the dry run passesPlus, in GCP: add a GitHub OIDC provider (
https://token.actions.githubusercontent.com, attribute conditionassertion.repository == 'mozilla/treeherder') to the existing Workload Identity Pool and grantroles/iam.workloadIdentityUseron the pusher service account to that repository principal set.Optional: a GitHub environment named
deployholding the Docker Hub secrets; the workflow has a commented-outenvironment: deployline for it.Verification plan
GitHub only accepts
workflow_dispatchfor a workflow that exists on the default branch (gh workflow run deploy.yml --ref camd/github-actions-deployreturns404: workflow deploy.yml not found on the default branch), so nothing here can be exercised from this branch. The order is therefore:DEPLOY_ENABLEDunset, thedeployjob shows as skipped on every push tomaster; nothing else changes.DEPLOY_ENABLED.gh workflow run deploy.yml --repo mozilla/treeherder --ref masterwithpushleft false. Expected:version.jsonprinted, tag list printed, image built, both logins green, nothing pushed. If any step fails, fix the value and re-run; nothing has been published.gh variable set DEPLOY_ENABLED --repo mozilla/treeherder --body true.prototype. CircleCI and GitHub both publishprototype-<sha>to both registries; confirm the digests match withdocker buildx imagetools inspect. Double-publishing an identical tag is harmless.mastermerge. Confirmlatestandmaster-<sha>in both registries and that the Kubernetes rollout behaves normally.Rollback at any point: unset
DEPLOY_ENABLED. CircleCI is still the system of record until the cutover PR.Notes for reviewers
actions/checkout,docker/setup-buildx-actionanddocker/build-push-actionare pinned to the same majors asci.ymlso Dependabot bumps both files together.docker/login-actionandgoogle-github-actions/authare new here and use their current majors.concurrencygroup on purpose: two quick pushes tomastershould both publish theirmaster-<sha>tag..circleci/, README badge, required status checks, renamebuildstodocs-and-linters) is the third PR.