Skip to content

ci: reuse release image for edge - #63

Merged
IceCodeNew merged 2 commits into
masterfrom
codex/reuse-release-image-for-edge
Jul 17, 2026
Merged

ci: reuse release image for edge#63
IceCodeNew merged 2 commits into
masterfrom
codex/reuse-release-image-for-edge

Conversation

@IceCodeNew

@IceCodeNew IceCodeNew commented Jul 17, 2026

Copy link
Copy Markdown
Owner

This PR updates the release flow so edge uses the freshly built image from the release tag commit and avoids a separate build trigger path. Also keeps release versioning behavior unchanged from previous iteration.

Summary by CodeRabbit

  • New Features

    • Release images now consistently publish the version, latest, and edge tags together.
    • Subsequent development builds update only edge and the commit-specific image tag.
  • Bug Fixes

    • Image builds are now serialized to prevent competing releases from overwriting the mutable edge tag.
    • Automatically generated development commits skip redundant image builds during releases.
  • Documentation

    • Updated release and image-tagging guidance to describe the revised build behavior and tag meanings.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

No new commits to review since the last review.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 61133fd3-8305-4af7-966c-a9a2e3de4fb2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The image workflow now serializes publishing, skips marked development commits, and assigns edge to release images alongside latest and the version tag. The release workflow adds the skip marker to generated development commits, with documentation describing the resulting release and tag behavior.

Changes

Image release workflow

Layer / File(s) Summary
Serialize image publishing and release tags
.github/workflows/image.yml
The workflow uses a fixed non-canceling concurrency group, filters marked development commits, and publishes release-version, latest, and edge tags together.
Skip duplicate development image build
.github/workflows/release.yml, docs/design.md, docs/notes.md, docs/requirements.md
Generated development commits include the skip trailer, and documentation describes the release trigger, concurrency, and image-tagging rules.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseWorkflow
  participant GitHubActions
  participant ImageRegistry
  ReleaseWorkflow->>GitHubActions: Create development commit with skip trailer
  GitHubActions->>GitHubActions: Skip marked master image build
  GitHubActions->>ImageRegistry: Publish release version, latest, and edge tags
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly captures the main change: reusing the release-built image for edge publishing.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/reuse-release-image-for-edge

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@IceCodeNew

Copy link
Copy Markdown
Owner Author

/agentic_review

@qodo-code-review

qodo-code-review Bot commented Jul 17, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 31 rules

Grey Divider


Action required

1. Weather-Briefing-Skip-Edge-Image undocumented ✓ Resolved 📘 Rule violation ⌂ Architecture
Description
The PR introduces a non-obvious CI/release-flow mechanism (commit trailer-driven skipping of the
master image build and reusing the release image for edge) but does not document the decision’s
rationale, trade-offs, and operating assumptions in docs/notes.md. This reduces maintainability
and makes future changes to the release pipeline riskier.
Code

.github/workflows/image.yml[R26-28]

+    if: >-
+      github.ref_type == 'tag' ||
+      !contains(github.event.head_commit.message, 'Weather-Briefing-Skip-Edge-Image: true')
Relevance

⭐⭐ Medium

Team documents CI/release rationale, but location varies; similar docs/notes guidance was mixed (PRs
#54, #62).

PR-#54
PR-#62

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The changed workflows add a new trailer-based skip condition and extend the release-tag build to
also publish an edge tag. docs/notes.md is the repository’s designated place for documenting
non-obvious architectural decisions and currently contains no entry covering this CI/release
mechanism, so the change is not documented as required.

Rule 2141673: Document non-obvious architectural decisions in docs/notes.md
.github/workflows/image.yml[26-28]
.github/workflows/release.yml[143-145]
.github/workflows/image.yml[124-133]
docs/notes.md[1-25]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
This PR adds a new release/image pipeline behavior controlled by a commit trailer (`Weather-Briefing-Skip-Edge-Image: true`) and tags the release-built image as `edge`, but there is no corresponding architecture note capturing the decision, rationale, trade-offs, and operating boundaries.

## Issue Context
The workflow now conditionally skips the `master` image workflow based on the commit message trailer, and the release tag build publishes `edge` alongside versioned tags. Per compliance, non-obvious architectural decisions must be documented in `docs/notes.md` with rationale, trade-offs, and assumptions/operating boundaries.

## Fix Focus Areas
- docs/notes.md[1-200]
- .github/workflows/image.yml[26-28]
- .github/workflows/image.yml[124-133]
- .github/workflows/release.yml[143-145]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Edge rollback via reruns 🐞 Bug ≡ Correctness ⭐ New
Description
With a single global concurrency group and cancel-in-progress: false, the mutable :edge tag is
updated by whichever workflow run finishes last, so a manually rerun (or otherwise delayed) run for
an older ref can execute after newer builds and overwrite :edge with an older digest, effectively
rolling edge backwards even though newer immutable tags (sha/version) remain correct. The current
notes describe serialization as avoiding concurrent edge updates but do not warn about this
last-writer/rerun rollback behavior, which can cause operators to misinterpret the guarantees of the
concurrency policy.
Code

.github/workflows/image.yml[R18-19]

+  group: weather-briefing-image
+  cancel-in-progress: false
Relevance

⭐⭐⭐ High

PR54 explicitly documents “does not enforce stale-run ordering”; team tends to add boundary/risk
notes—likely accept warning.

PR-#54
PR-#63

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The workflow is triggered for both master and semver tags, uses a single global concurrency group
with no cancellation, and publishes the mutable :edge tag in the manifest publish step for both
branch and tag builds; this combination means serialization only prevents concurrent pushes but does
not enforce “newest ref wins.” As a result, any run that starts later (including a manual rerun for
diagnostics of an older ref) can become the last completed publisher and overwrite edge, and the
notes’ framing of serialization as preventing races supports that it’s intended as ordering control
but currently omits the important limitation that reruns/delayed executions can still be last
writer.

.github/workflows/image.yml[4-9]
.github/workflows/image.yml[17-19]
.github/workflows/image.yml[124-133]
docs/notes.md[9-12]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The image publishing workflow serializes all runs into one concurrency group and does not cancel in-progress runs, so the mutable `:edge` tag follows last-writer semantics: whichever run completes last updates `edge`. This allows manual reruns (or other delayed executions) of older tag/master refs to execute after newer builds and overwrite `:edge` with an older digest, effectively rolling `edge` backward; the documentation also needs to clearly state this limitation so operators don’t assume serialization implies “newest ref always wins.”

## Issue Context
- The workflow triggers on both `master` pushes and release tag pushes.
- The manifest-publish step tags `:edge` for both tag builds and branch builds.
- With a global concurrency group and `cancel-in-progress: false`, `edge` is determined by the last completed publisher across all executions, including manual reruns (e.g., for diagnostics).
- `docs/notes.md` currently explains the serialization boundary (avoiding concurrent writes) but does not warn that reruns/delayed runs of older refs can still overwrite `edge` after newer runs.

## Fix Focus Areas
- .github/workflows/image.yml[17-19]
- .github/workflows/image.yml[101-134]
- docs/notes.md[9-24]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

3. Edge tag publish race ✓ Resolved 🐞 Bug ☼ Reliability
Description
Release-tag runs now publish the mutable :edge tag but still use a different GitHub Actions
concurrency group than master runs, so a tag build and a master build can push :edge
concurrently and whichever finishes last wins. This makes the final edge image nondeterministic
(it can be overwritten by an older/newer run depending on completion order).
Code

.github/workflows/image.yml[R126-130]

+            tags+=(
+              --tag "${REGISTRY_IMAGE}:${RELEASE_VERSION}"
+              --tag "${REGISTRY_IMAGE}:latest"
+              --tag "${REGISTRY_IMAGE}:edge"
+            )
Relevance

⭐ Low

Repo explicitly accepts tag overwrite/non-serialized publication risks as operating boundary in
image workflow docs (PR #54).

PR-#54

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The workflow-level concurrency separates branch (edge) from tag (release-<tag>) runs, but the
manifest creation step now pushes :edge for releases as well as for normal master pushes.
Because these runs are not in the same concurrency group, they can overlap and both update the
edge tag, causing last-writer-wins behavior.

.github/workflows/image.yml[17-19]
.github/workflows/image.yml[124-133]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The workflow now tags `:edge` during **tag** builds, but tag builds and `master` builds are not serialized against each other due to different `concurrency.group` values. Since both flows push the same mutable tag (`edge`), parallel runs can race and the last finisher can overwrite `edge` unpredictably.

### Issue Context
- Branch runs use an `edge` concurrency group.
- Tag runs use a `release-<version>` concurrency group.
- Both flows now publish `:edge`.

### Fix Focus Areas
- Ensure any job that pushes `:edge` shares the same concurrency group across tag + branch runs (e.g., move/add a job-level concurrency on the manifest/tag-pushing job, or adjust the workflow-level `concurrency.group` expression so tag runs that publish `edge` join the `edge` group).

- .github/workflows/image.yml[17-19]
- .github/workflows/image.yml[124-133]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Previous review results

Review updated until commit 84073f5

Results up to commit 7245a1a


🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)


Action required
1. Weather-Briefing-Skip-Edge-Image undocumented ✓ Resolved 📘 Rule violation ⌂ Architecture
Description
The PR introduces a non-obvious CI/release-flow mechanism (commit trailer-driven skipping of the
master image build and reusing the release image for edge) but does not document the decision’s
rationale, trade-offs, and operating assumptions in docs/notes.md. This reduces maintainability
and makes future changes to the release pipeline riskier.
Code

.github/workflows/image.yml[R26-28]

+    if: >-
+      github.ref_type == 'tag' ||
+      !contains(github.event.head_commit.message, 'Weather-Briefing-Skip-Edge-Image: true')
Relevance

⭐⭐ Medium

Team documents CI/release rationale, but location varies; similar docs/notes guidance was mixed (PRs
#54, #62).

PR-#54
PR-#62

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The changed workflows add a new trailer-based skip condition and extend the release-tag build to
also publish an edge tag. docs/notes.md is the repository’s designated place for documenting
non-obvious architectural decisions and currently contains no entry covering this CI/release
mechanism, so the change is not documented as required.

Rule 2141673: Document non-obvious architectural decisions in docs/notes.md
.github/workflows/image.yml[26-28]
.github/workflows/release.yml[143-145]
.github/workflows/image.yml[124-133]
docs/notes.md[1-25]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
This PR adds a new release/image pipeline behavior controlled by a commit trailer (`Weather-Briefing-Skip-Edge-Image: true`) and tags the release-built image as `edge`, but there is no corresponding architecture note capturing the decision, rationale, trade-offs, and operating boundaries.

## Issue Context
The workflow now conditionally skips the `master` image workflow based on the commit message trailer, and the release tag build publishes `edge` alongside versioned tags. Per compliance, non-obvious architectural decisions must be documented in `docs/notes.md` with rationale, trade-offs, and assumptions/operating boundaries.

## Fix Focus Areas
- docs/notes.md[1-200]
- .github/workflows/image.yml[26-28]
- .github/workflows/image.yml[124-133]
- .github/workflows/release.yml[143-145]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational
2. Edge tag publish race ✓ Resolved 🐞 Bug ☼ Reliability
Description
Release-tag runs now publish the mutable :edge tag but still use a different GitHub Actions
concurrency group than master runs, so a tag build and a master build can push :edge
concurrently and whichever finishes last wins. This makes the final edge image nondeterministic
(it can be overwritten by an older/newer run depending on completion order).
Code

.github/workflows/image.yml[R126-130]

+            tags+=(
+              --tag "${REGISTRY_IMAGE}:${RELEASE_VERSION}"
+              --tag "${REGISTRY_IMAGE}:latest"
+              --tag "${REGISTRY_IMAGE}:edge"
+            )
Relevance

⭐ Low

Repo explicitly accepts tag overwrite/non-serialized publication risks as operating boundary in
image workflow docs (PR #54).

PR-#54

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The workflow-level concurrency separates branch (edge) from tag (release-<tag>) runs, but the
manifest creation step now pushes :edge for releases as well as for normal master pushes.
Because these runs are not in the same concurrency group, they can overlap and both update the
edge tag, causing last-writer-wins behavior.

.github/workflows/image.yml[17-19]
.github/workflows/image.yml[124-133]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The workflow now tags `:edge` during **tag** builds, but tag builds and `master` builds are not serialized against each other due to different `concurrency.group` values. Since both flows push the same mutable tag (`edge`), parallel runs can race and the last finisher can overwrite `edge` unpredictably.

### Issue Context
- Branch runs use an `edge` concurrency group.
- Tag runs use a `release-<version>` concurrency group.
- Both flows now publish `:edge`.

### Fix Focus Areas
- Ensure any job that pushes `:edge` shares the same concurrency group across tag + branch runs (e.g., move/add a job-level concurrency on the manifest/tag-pushing job, or adjust the workflow-level `concurrency.group` expression so tag runs that publish `edge` join the `edge` group).

- .github/workflows/image.yml[17-19]
- .github/workflows/image.yml[124-133]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Qodo Logo

Comment thread .github/workflows/image.yml
@IceCodeNew

Copy link
Copy Markdown
Owner Author

/agentic_review

@IceCodeNew

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@IceCodeNew
IceCodeNew marked this pull request as ready for review July 17, 2026 10:43
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

CI: reuse release-built image for edge and serialize tag/branch publishes

⚙️ Configuration changes 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Serialize image publishing across tag and master pushes to avoid edge tag races.
• Reuse the release tag image to also publish edge, keeping versioned/latest semantics intact.
• Document the new skip-trailer and concurrency boundaries for reviewers and maintainers.
Diagram

graph TD
  R["Release workflow"] --> P["Atomic push (tag + master)"]
  P --> IT["image.yml (tag run)"] --> REL["Publish: vX.Y.Z + latest + edge"] --> REG[("Docker Hub")]
  P --> G{"Skip-edge trailer?"}
  G -->|"no"| EDGE["Publish: edge + sha"] --> REG
  G -->|"yes"| SKIP["Skip edge publish"]

  subgraph Legend
    direction LR
    _svc["Workflow/job"] ~~~ _dec{"Decision"} ~~~ _ext[("External system")]
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Chain workflows via workflow_run + artifact/digest passing
  • ➕ Makes the dependency explicit: only publish edge after a successful release tag build
  • ➕ Avoids relying on commit message trailers for behavior control
  • ➖ More moving parts (artifact retention, permissions, cross-workflow data handoff)
  • ➖ Harder to reason about/debug than a single workflow with a simple guard
2. Keep separate concurrency groups and cancel-in-progress for master only
  • ➕ Faster feedback for frequent master pushes (older edge builds get cancelled)
  • ➕ Less queueing when master is active
  • ➖ Still risks races with tag builds updating a mutable tag (edge) unless carefully coordinated
  • ➖ Cancellation can leave edge pointing to an older build if the newer one is cancelled or fails late

Recommendation: The PR’s approach is a good tradeoff: it reuses the already-built release image to update edge, adds a narrow skip mechanism for the synthetic -dev commit, and serializes tag/master publishes to prevent mutable-tag races. The commit-trailer guard is simple, auditable in git history, and avoids additional workflow orchestration complexity.

Files changed (5) +35 / -5

Documentation (3) +22 / -1
design.mdDocument atomic push triggers and edge reuse behavior +2/-0

Document atomic push triggers and edge reuse behavior

• Explains that an atomic push triggers both tag and master workflows and why the auto-generated -dev commit includes a skip trailer. Clarifies that the tag workflow builds once and makes version/latest/edge point to the same image for a release.

docs/design.md

notes.mdAdd review boundary notes for image publish serialization +19/-0

Add review boundary notes for image publish serialization

• Adds a dedicated section describing the serialization boundary for mutable tags (edge), the single concurrency group decision, and the skip-trailer mechanism. Captures the intended semantics and future constraints for reviewers.

docs/notes.md

requirements.mdUpdate release/edge tagging requirements to match new flow +1/-1

Update release/edge tagging requirements to match new flow

• Updates the run-environment requirements to reflect that release tags build once and also update edge, and that the synthetic next-dev master commit skips the redundant edge build. Keeps the rest of the release/versioning contract unchanged.

docs/requirements.md

Other (2) +13 / -4
image.ymlSerialize image workflows and publish edge from release tags +10/-3

Serialize image workflows and publish edge from release tags

• Unifies concurrency to a single group and disables cancel-in-progress to serialize master/tag publishes. Adds a job-level guard to skip master edge builds when a specific commit trailer is present. Extends release-tag publishing to also tag the built image as edge (alongside version and latest).

.github/workflows/image.yml

release.ymlMark auto-generated -dev commit to skip edge image build +3/-1

Mark auto-generated -dev commit to skip edge image build

• Adds a second commit message paragraph (trailer) to the post-release development-version commit. This trailer is consumed by the image workflow to avoid triggering a redundant and potentially conflicting edge publish from the synthetic master commit.

.github/workflows/release.yml

@IceCodeNew
IceCodeNew merged commit b4feacc into master Jul 17, 2026
4 of 5 checks passed
@IceCodeNew
IceCodeNew deleted the codex/reuse-release-image-for-edge branch July 17, 2026 10:46
Comment on lines +18 to +19
group: weather-briefing-image
cancel-in-progress: false

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. Edge rollback via reruns 🐞 Bug ≡ Correctness

With a single global concurrency group and cancel-in-progress: false, the mutable :edge tag is
updated by whichever workflow run finishes last, so a manually rerun (or otherwise delayed) run for
an older ref can execute after newer builds and overwrite :edge with an older digest, effectively
rolling edge backwards even though newer immutable tags (sha/version) remain correct. The current
notes describe serialization as avoiding concurrent edge updates but do not warn about this
last-writer/rerun rollback behavior, which can cause operators to misinterpret the guarantees of the
concurrency policy.
Agent Prompt
## Issue description
The image publishing workflow serializes all runs into one concurrency group and does not cancel in-progress runs, so the mutable `:edge` tag follows last-writer semantics: whichever run completes last updates `edge`. This allows manual reruns (or other delayed executions) of older tag/master refs to execute after newer builds and overwrite `:edge` with an older digest, effectively rolling `edge` backward; the documentation also needs to clearly state this limitation so operators don’t assume serialization implies “newest ref always wins.”

## Issue Context
- The workflow triggers on both `master` pushes and release tag pushes.
- The manifest-publish step tags `:edge` for both tag builds and branch builds.
- With a global concurrency group and `cancel-in-progress: false`, `edge` is determined by the last completed publisher across all executions, including manual reruns (e.g., for diagnostics).
- `docs/notes.md` currently explains the serialization boundary (avoiding concurrent writes) but does not warn that reruns/delayed runs of older refs can still overwrite `edge` after newer runs.

## Fix Focus Areas
- .github/workflows/image.yml[17-19]
- .github/workflows/image.yml[101-134]
- docs/notes.md[9-24]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 84073f5

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/image.yml:
- Around line 18-28: Replace the static concurrency group in the
weather-briefing workflow at .github/workflows/image.yml:18-28 with a
ref-dependent group such as github.workflow plus github.ref, preserving the
existing cancellation behavior and trailer-based job skip. Remove the
single-group concurrency explanation from docs/notes.md:7-25 and describe the
master edge-build protection solely through the Weather-Briefing-Skip-Edge-Image
commit trailer.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 424bcfbb-1bc9-4157-896d-fd4cdf28146e

📥 Commits

Reviewing files that changed from the base of the PR and between 23ff5aa and 84073f5.

📒 Files selected for processing (5)
  • .github/workflows/image.yml
  • .github/workflows/release.yml
  • docs/design.md
  • docs/notes.md
  • docs/requirements.md

Comment on lines +18 to +28
group: weather-briefing-image
cancel-in-progress: false

env:
WEATHER_BRIEFING_IMAGE: ${{ secrets.DOCKERHUB_USERNAME }}/weather-briefing

jobs:
weather-briefing:
if: >-
github.ref_type == 'tag' ||
!contains(github.event.head_commit.message, 'Weather-Briefing-Skip-Edge-Image: true')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win

Race condition risking cancelled release builds due to static concurrency group.

GitHub Actions cancels previously pending workflow runs in the same concurrency group when multiple events are queued simultaneously. An atomic push triggers both the tag and master events at the exact same time. If the master event is processed second and queued, it will silently cancel the pending tag event. Since the generated master commit is explicitly designed to skip the build (via the Weather-Briefing-Skip-Edge-Image trailer), this cancellation race will result in the release image not being built at all.

The explicit commit trailer already cleanly prevents the edge tag race by skipping the master build entirely, making the shared concurrency group unnecessary and actively dangerous for atomic pushes.

  • .github/workflows/image.yml#L18-L28: Revert the workflow to use a ref-dependent concurrency group (e.g., group: ${{ github.workflow }}-${{ github.ref }}) to isolate the tag queue from the master queue, ensuring the release tag build is never cancelled by the skipped master build.
  • docs/notes.md#L7-L25: Remove the explanation of the single weather-briefing-image concurrency group. Update the text to rely purely on the commit trailer mechanism to explain how the master edge build conflict is safely bypassed.
📍 Affects 2 files
  • .github/workflows/image.yml#L18-L28 (this comment)
  • docs/notes.md#L7-L25
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/image.yml around lines 18 - 28, Replace the static
concurrency group in the weather-briefing workflow at
.github/workflows/image.yml:18-28 with a ref-dependent group such as
github.workflow plus github.ref, preserving the existing cancellation behavior
and trailer-based job skip. Remove the single-group concurrency explanation from
docs/notes.md:7-25 and describe the master edge-build protection solely through
the Weather-Briefing-Skip-Edge-Image commit trailer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant