Skip to content

nightly-{dmg,linux}: accept workflow_dispatch inputs.version for release cuts - #147

Merged
mdheller merged 1 commit into
mainfrom
release-build/versioned-nightly-dispatch
Aug 4, 2026
Merged

nightly-{dmg,linux}: accept workflow_dispatch inputs.version for release cuts#147
mdheller merged 1 commit into
mainfrom
release-build/versioned-nightly-dispatch

Conversation

@mdheller

@mdheller mdheller commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Why

The plist-version-equals-tag check landed in #142 (promotion-gate.yml) surfaces the real root cause of 4 consecutive releases shipping with `Info.plist` stuck at 150.0.1: there is no release build. Nightlies hardcode `VERSION: 150.0.1` with no input override, and every release cut has been relabeling nightly artifacts externally. The plist never matched the release tag.

Change

Both `nightly-dmg.yml` and `nightly-linux.yml` now accept a `workflow_dispatch` input `version`:

  • default `150.0.1` — every non-dispatch trigger (schedule, push) still ships a dev-versioned artifact, nightly semantics preserved.
  • dispatch override — a release cut now goes:

```
gh workflow run nightly-dmg.yml --ref main -f version=150.0.6
gh workflow run nightly-linux.yml --ref main -f version=150.0.6

wait for both green

gh release create v150.0.6

promotion-gate.yml verifies plist == tag and lets latest.json publish

```

Adversarial-review checklist

  • Sensitive network fetches — N/A (workflow config only)
  • String parsers — N/A
  • Packaged-artifact assertions — the whole point; plist-version gate in promotion-gate.yml will fire on the resulting release
  • `FINAL_TARGET_FILES` blocks — N/A
  • Auth / IAM changes — N/A
  • Version metadata — this IS the fix
  • Silent-skip guards — no silent skips; fallback is `inputs.version || '150.0.1'`, deterministic
  • Firefox/Mozilla/LibreWolf strings — none added

Test plan

Can't test workflow_dispatch of a versioned nightly on the PR branch (default-branch limitation). Post-merge:

  1. Dispatch both nightlies with `version=150.0.6` from main
  2. Verify shipped artifact names contain `150.0.6`
  3. Extract DMG's `Info.plist`, assert `CFBundleShortVersionString == 150.0.6`
  4. If step 3 passes, cut v150.0.6 release, watch promotion-gate turn green

Blast radius

Additive — no existing trigger path changes behaviour. Existing scheduled nightlies keep shipping as `150.0.1-YYYYMMDD-dev`.

Root cause behind 4 consecutive releases shipping with Info.plist stuck at
150.0.1: nightly workflows hardcoded VERSION=150.0.1 with no input override.
Release cuts have been renaming nightly artifacts externally; the plist
never matched the release tag. promotion-gate.yml (added in #142) now
catches this on release publish — but the fix is to build with the correct
version in the first place.

Preserves: schedule + push triggers keep nightly semantics (dev version).
Changes: manual workflow_dispatch can pass 'version: 150.0.6' to bake that
into Info.plist + artifact filenames, so a release cut goes:

  1. gh workflow run nightly-{dmg,linux}.yml -f version=150.0.6
  2. wait for green
  3. gh release create v150.0.6 <renamed artifacts>
  4. promotion-gate.yml verifies plist == tag and lets latest.json publish
@mdheller
mdheller merged commit cdd6980 into main Aug 4, 2026
17 checks passed
@mdheller
mdheller deleted the release-build/versioned-nightly-dispatch branch August 4, 2026 04:01
mdheller added a commit that referenced this pull request Aug 4, 2026
…ersion

Root cause of PR #147's silent failure: env VERSION was conflated. It's
used for workspace paths (build/workspaces/human-secure-VERSION-1/source),
cache keys, and the upstream Firefox tarball URL — but I ALSO wired it to
the Info.plist version + artifact filename. Passing version=150.0.6
made the workflow look for a workspace at build/…-150.0.6-1 that doesn't
exist because Firefox source is pinned upstream at 150.0.1.

Split into two envs:
  VERSION             = pinned UPSTREAM Firefox tarball (150.0.1, immutable)
  BEARBROWSER_VERSION = what WE ship as (defaults to VERSION; override via
                        workflow_dispatch input release_version)

Release cut is now:
  gh workflow run nightly-dmg.yml   --ref main -f release_version=150.0.6
  gh workflow run nightly-linux.yml --ref main -f release_version=150.0.6

Workspace paths, cache, and Firefox source download all keep the pinned
150.0.1 they need. Packaging (--version arg) and artifact filenames use
BEARBROWSER_VERSION. Nightly semantics preserved when no input passed.
mdheller added a commit that referenced this pull request Aug 4, 2026
…ersion (#148)

Root cause of PR #147's silent failure: env VERSION was conflated. It's
used for workspace paths (build/workspaces/human-secure-VERSION-1/source),
cache keys, and the upstream Firefox tarball URL — but I ALSO wired it to
the Info.plist version + artifact filename. Passing version=150.0.6
made the workflow look for a workspace at build/…-150.0.6-1 that doesn't
exist because Firefox source is pinned upstream at 150.0.1.

Split into two envs:
  VERSION             = pinned UPSTREAM Firefox tarball (150.0.1, immutable)
  BEARBROWSER_VERSION = what WE ship as (defaults to VERSION; override via
                        workflow_dispatch input release_version)

Release cut is now:
  gh workflow run nightly-dmg.yml   --ref main -f release_version=150.0.6
  gh workflow run nightly-linux.yml --ref main -f release_version=150.0.6

Workspace paths, cache, and Firefox source download all keep the pinned
150.0.1 they need. Packaging (--version arg) and artifact filenames use
BEARBROWSER_VERSION. Nightly semantics preserved when no input passed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant