Repository navigation
fix(ci)!: align dev checks and Docker release versions - #1594
Conversation
Handle branch-created push payloads without fetching deleted integration refs. Use dev for integration gates and keep ordinary PR/push path filtering. Bind Docker tags, labels and binary versions to the resolved source commit. Publish exact versions before serialized, current-release-only alias promotion; keep manual and prerelease builds from promoting stable aliases. Validate the contracts with offline fixture tests and preserve legacy publishing safeguards. <sub>🤖 Co-authored by [Claudius the Magnificent](https://github.com/lklimek/claudius) AI Agent</sub> Co-Authored-By: Codex <noreply@openai.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the
|
|
✅ Final review complete — no blockers (commit f361cfc) · triage: normal |
Keep stale cache and issue/PR maintenance working with a read-only repository token default, without granting repository contents write. <sub>🤖 Co-authored by [Claudius the Magnificent](https://github.com/lklimek/claudius) AI Agent</sub> Co-Authored-By: Codex GPT-6 <noreply@openai.com>
|
Waiting for bot review — thepastaclaw not yet. Wait for the missing reviews, or a writer can post |
# Conflicts: # .github/workflows/build.yml # .github/workflows/check-generated.yml # .github/workflows/tests.yml
|
Waiting for bot review — thepastaclaw not yet. Wait for the missing reviews, or a writer can post |
thepastaclaw
left a comment
There was a problem hiding this comment.
Final validation — Phase 1 + Phase 2
Static verification of b7a939b confirms one blocking fail-open path in stable-alias promotion. The tag-fetch suggestion is unnecessary because the pinned checkout implementation explicitly fetches all tag refs with fetch-depth: 0, including detached-SHA checkouts. Current build, test, lint, and release-tooling checks pass; PR Hygiene remains pending, and no local builds or tests were run.
🔴 1 blocking
Review provenance
Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: gpt-6.1-sol (agent: phase2-reviewer, role: general); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)
- Triage:
normalbygpt-6.1-sol(effort low) — The cross-cutting CI and Docker release changes introduce meaningful source-selection, versioning, and alias-promotion logic, but do not modify any qualifying critical surface. - Phase 1 reviewers:
muse-spark-1.3-contributor— general (completed, effort xhigh); agentphase1-reviewer - Phase 1 model:
muse-spark-1.3-contributor— not quota-gated; passed overgemini-3.8-flash-high(antigravity quota lookup failed),glm-5.3-flash(not used above high effort; tier asks max) - Fresh verifier:
gpt-6.1-sol— final-verifier; agentsol-verifier - Phase 2 reviewers:
gpt-6.1-sol— general (completed, effort high); agentphase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.
In `scripts/docker-metadata.py`:
- [BLOCKING] scripts/docker-metadata.py:67: Require an affirmative latest-release match before promoting aliases
An empty latest-release result currently authorizes promotion instead of preserving existing aliases. The workflow converts a 404 from getLatestRelease into an empty string (.github/workflows/docker.yml:149–154), which satisfies this condition. If the only stable release is deleted or changed to a prerelease while its image builds, the original published-event payload still contains prerelease=false and its Git tag can remain, allowing the withdrawn release to overwrite latest, major, and minor aliases. This contradicts the new fail-closed publication contract. Require latest_release == tag and update scripts/tests/test_docker_metadata.py:91–93 to expect no aliases for an empty result; a first stable release can qualify through its affirmative API tag match.
… match An empty latest-release lookup (404) no longer authorizes alias promotion, so a release withdrawn or turned into a prerelease while its image builds cannot overwrite latest, major and minor aliases. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Waiting for bot review — thepastaclaw not yet. Wait for the missing reviews, or a writer can post |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Waiting for bot review — thepastaclaw not yet. Wait for the missing reviews, or a writer can post |
thepastaclaw
left a comment
There was a problem hiding this comment.
Re-review — Final validation — Phase 1 + Phase 2
Independently reviewed the complete diff at f361cfc and found no remaining actionable defects; the prior fail-open alias-promotion issue is fixed and covered by regression tests. Current CI reports passing build, unit, E2E, lint, documentation, and release-tooling checks, with PR Hygiene still pending. Validation was static-only: no local builds or tests were run, and actual container publication remains unverified.
🔴 0 blocking | 🟡 0 suggestion(s) | 💬 0 nitpick(s)
Review provenance
Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 3: gpt-6.1-sol (agent: phase2-reviewer, role: general); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)
- Triage:
normalbygpt-6.1-sol(effort low) — The changes introduce cross-cutting CI and release logic for source selection, version metadata, and serialized Docker alias promotion, but do not modify a qualifying critical surface. - Phase 1 reviewers:
muse-spark-1.3-contributor— general (completed, effort xhigh); agentphase1-reviewer - Phase 1 model:
muse-spark-1.3-contributor— not quota-gated; passed overgemini-3.8-flash-high(antigravity quota lookup failed),glm-5.3-flash(not used above high effort; tier asks max) - Fresh final gate: an independent Phase-2 review ran after iterative findings were reconciled
- Fresh verifier:
gpt-6.1-sol— final-verifier; agentsol-verifier - Phase 2 reviewers:
gpt-6.1-sol— general (completed, effort high); agentphase2-reviewer,gpt-6.1-sol— general (completed, effort high); agentphase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify the current code and confirm that no unresolved issues remain.
No unresolved findings remain from the prior review on this head.
|
Ready for review — files with no dedicated owner: lklimek or shumkov · |
|
Policy satisfied — this can merge. |
TL;DR: Keep development checks working after the branch rename and ensure published container images contain the software version shown on their labels.
User story
As a Tenderdash maintainer, I want automated checks and published images to use the selected source, so releases can be verified reliably.
Scenario
Base flow
Run development checks after renaming the integration branch, then publish a release or request a container build.
Actual behavior
Some checks try to read the removed branch from the original event. A manually supplied image tag can label a build of different source, and the reported software version can disagree with its label. Older releases can also replace current stable aliases.
Expected behavior
Checks run on the new branch. Image tags, labels and the reported software version identify the selected source. Prereleases, manual builds and older releases preserve current stable aliases.
Detailed discussion
What was done
dev: remove obsolete versioned push filters and lint fallback; select the actual push ref or PR base for Super-linter; publish documentation fromdev.base_ref. Enable the relevant jobs directly, including the downstream linter behavior for an all-zerobeforeSHA. Ordinary push/PR diff filtering remains.VERSIONexplicitly through the Dockerfile to Makefile linker flags and OCI labels.The alias job uses GitHub's documented
queue: max, retaining pending promotions while exact-version builds remain independent.Testing
queue: maxsyntax; exact diagnostics are excluded and independently checked against current GitHub documentation. No other workflow diagnostic remains.Breaking changes
Manual Docker
tagnow selects an existing source release tag; it cannot attach an arbitrary version label to unrelated source. Historical source without explicit DockerVERSIONsupport is rejected and requires a separately reviewed legacy publishing path. Tags with SemVer build metadata (+...) are rejected rather than silently translated. There is no runtime or wire-protocol change.Prior work
dev/stable release workflow and project release skill.Attribution
🤖 Co-authored by Claudius the Magnificent AI Agent
PR Hygiene ·
f361cfc.agents/skills/tenderdash-release/SKILL.md,DOCKER/Dockerfile,Makefileand 4 more) — approved by lklimekgithub(.github/workflows/build.yml,.github/workflows/check-generated.yml,.github/workflows/docker.ymland 11 more) — approved by lklimekWhen every merge requirement is met, the
PR Hygienecheck passes. Reviewer limits do not block merging; other required GitHub checks and protections still apply.