vs/Automate Firefox train branch management - #1578
Conversation
Review summaryThis is a well-architected PR. The branch model (nightly/main/firefoxNNN) is clearly defined, the Python logic is cleanly separated from the workflow glue, and the unit tests cover the core promotion scenarios thoroughly. A few things worth addressing before merging: Security
Bugs
Minor
|
Review: Firefox Train Branch ManagementThis is a well-designed CI system with strong security fundamentals: immutable SHA pinning, atomic branch pushes with post-push validation, regex-guarded branch deletion, and comprehensive unit tests. A few things to address: Issues found:
Minor:
|
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Review: Firefox train branch managementOverall this is a well-designed implementation with good safety mechanisms: atomic pushes during promotion, SHA validation for immutable refs, dry-run mode, and branch name allow-listing before deletion. The Python logic is clean and well-tested. A few things to address: Missing
|
Made changes requested by bot.
…o vs/firefox-train-versioning
ReviewWell-structured PR with good separation of concerns: deterministic branch planning in Python (easily testable), shell execution in CI, and immutable commit pinning before artifact resolution. The atomic push for train promotion and the idempotency guard via the A few issues worth addressing: Network error handling in
|
|
Removed myself from review list as I am not familiar with this area of code. |
the planned release is only added to retention when it does not already exist, and the logs and summary no longer imply that an archive or promotion occurred during an already-promoted run
Review: sync-firefox-branches.ymlThe core mechanics are solid — Incorrect
|
Review: Promote Firefox train branches workflowOverall this is well-structured — good use of A couple of things worth addressing: Best-practice security nit (Write summary step): The Missing job timeout: The job has no Minor: The three |
ReviewOverall this is a solid POC — the dry-run default, atomic push, force-with-lease, and stale-promotion guard are all good. A few things worth addressing: No environment approval gate for live runs
Old-branch deletions have no lease |
…lease sequence against existing release branches, and protect branch updates and deletions with leases. Keep all changes atomic, improve dry-run output, and scope GitHub permissions to the promotion job.
|
Made some new changes. Changes made:
I have some limitations here. I don't have enough rights in Github. Open Settings → Environments. |
ben-c-at-moz
left a comment
There was a problem hiding this comment.
We're almost ready on this one. I think just addressing what exists, and linking a successful dry_run to the description, and we should be ready to go.
I just made a fork to do this.
The workflow completed successfully. The live-approval job was skipped, and no branches were modified. https://github.com/vsangereanMOZ/fx-desktop-qa-automation/actions/runs/33764531601 Is this ok @ben-c-at-moz ? |
Oh if you've forked it, why not try it live and see if it changes the branches? |
|
It was difficult to find out how to run the changes on the fork and branch. Must have run on main:D https://github.com/vsangereanMOZ/fx-desktop-qa-automation/actions/runs/33869114350 |
ben-c-at-moz
left a comment
There was a problem hiding this comment.
Alright, I think we're at the point where we can try it


Relevant Links
Bugzilla: _
TestRail: _
Description of Code / Doc Changes
This PR adds a minimal POC for automated Firefox train branch management.
Branch model:
When Nightly is promoted to Beta, the workflow:
###Triggers
The workflow uses workflow_dispatch. It can be started manually from GitHub Actions or through the GitHub Actions workflow dispatch API.
The API request must target the main branch and provide released_major.
retention is optional and defaults to 2.
dry_run is optional and defaults to true. A live promotion must explicitly provide dry_run as false.