fix(release): inline changed-image detection, dropping the reusable workflow #101
Closed
ryangr0
wants to merge 1 commit from
fix/inline-changed-images into main
pull from: fix/inline-changed-images
merge into: webgrip:main
webgrip:main
webgrip:feat/agent-runner-dhi-alpine
webgrip:feat/techdocs-builder-dhi
webgrip:feat/semrel-family-dhi-alpine
webgrip:feat/semantic-release-monorepo-dhi-base
webgrip:feat/semantic-release-dhi-base
webgrip:feat/node-ci-runner-dhi-base
webgrip:feat/helm-deploy-dhi-base
webgrip:feat/act-runner-dhi-base
webgrip:fix/promote-dash-candidate
webgrip:perf/consolidate-release-plumbing
webgrip:fix/helm-deploy-tool-bumps
webgrip:fix/candidate-keyed-by-version
webgrip:feat/promote-by-digest
webgrip:feat/cve-budgets-measured
webgrip:diag/measure-cve-budgets
webgrip:fix/techdocs-builder-zensical-conflict
webgrip:fix/semantic-release-rust-signed-reentry
webgrip:fix/node-ci-runner-signed-reentry
webgrip:docs/hardening-wave3-plan
webgrip:fix/techdocs-runner-pin-parent
webgrip:fix/mkdocs-runner-pin-parent
webgrip:fix/tauri-ci-runner-pin-parent
webgrip:fix/ci-runner-signed-cve-gate
webgrip:fix/helm-deploy-verify-downloads
webgrip:fix/techdocs-builder-annotate-stages
webgrip:fix/rust-ci-runner-pin-build-stage
webgrip:fix/rust-releaser-pin-toolchain
webgrip:fix/semantic-release-rust-pin-base
webgrip:fix/semantic-release-monorepo-pin-base
webgrip:fix/semantic-release-pin-base
webgrip:fix/playwright-runner-pin-base
webgrip:fix/act-runner-pin-act
webgrip:fix/node-ci-runner-pin-base
webgrip:fix/bump-workflows-pin-codeberg-bash
webgrip:fix/renovate-digest-aware-args
webgrip:docs/upstream-vex-in-harbor
webgrip:fix/harbor-sbom-honest-report
webgrip:fix/vex-aliases-and-unmatched-guard
webgrip:fix/gate-stderr-not-a-tty
webgrip:perf/drop-installer-actions
webgrip:fix/release-matrix-multiline-output
webgrip:fix/cve-gate-header-accuracy
webgrip:feat/release-manual-trigger
webgrip:fix/ci-runner-claude-code-and-renovate-annotation
webgrip:docs/adr-buildkitd-and-gate-as-step
webgrip:perf/release-verify-uses-buildkitd
webgrip:perf/cve-gate-as-a-step
webgrip:perf/ci-runner-bake-gate
webgrip:fix/cve-gate-volume-ownership
webgrip:fix/ci-runner-verify-helm-yq
webgrip:fix/cve-gate-scan-space
webgrip:chore/oci-labels-batch1
webgrip:perf/build-check-cli
webgrip:chore/forgejo-git-throughput-probe
webgrip:perf/ci-runner-bake-cosign-syft
webgrip:fix/cve-gate-seccomp-clone
webgrip:fix/cve-gate-pin-existing-version
webgrip:fix/cve-gate-readonly-inputs
webgrip:fix/cve-gate-moby-floor
webgrip:feat/cve-gate-static
webgrip:fix/cve-gate-vex-and-budget
webgrip:fix/cve-gate-staging-root
webgrip:ci/build-check-on-branches
webgrip:fix/cve-gate-dhi-registry
webgrip:feat/cve-gate
webgrip:feat/harden-supply-chain
webgrip:fix/semrel-toolchain-one-source
webgrip:fix/semrel-fork-direct-binary
webgrip:renovate/actions-attest-build-provenance-3.x
webgrip:renovate/sigstore-cosign-installer-4.x
webgrip:renovate/github-codeql-action-4.x
webgrip:renovate/docker-login-action-4.x
webgrip:renovate/actions-create-github-app-token-3.x
webgrip:renovate/actions-attest-build-provenance-4.x
webgrip:copilot/fix-docker-build-and-push
webgrip:copilot/fix-1
No reviewers
No labels
pull-request
released
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
webgrip/infrastructure!101
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/inline-changed-images"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Run 267 wedged. `Determine Changed Directories` (the reusable's inner job) succeeded; `Determine changed images` (the caller) never left `blocked`, so nothing downstream could read its outputs and three jobs rendered as "(incomplete matrix)". Nothing was running anywhere on the instance — it did not fail, it stalled. And because `concurrency: group: push-<ref>` has no cancel-in-progress, a wedged run on main blocks every later push to main until a human clears it in the UI. That is the SECOND way Forgejo's reusable-workflow handling has broken this pipeline. The first is already written into this file: v15 flattens an expanded reusable's inner jobs into the caller's graph, so a caller job id equal to the inner job id produces a plan with no dependency-free job and the workflow is rejected outright. Same construct, two unrelated failure modes, and the second one has no in-repo recovery. The work it was doing is a `git diff` and some string handling. It needs neither a cross-repo workflow, nor a flattened job graph, nor tj-actions/changed-files — a full action clone act pays for on every run. So it is inlined and the fragile construct is gone rather than worked around. Semantics preserved exactly, including the two that have already cost releases: - dirname FIRST (matching tj-actions `dir_names: true`), THEN truncate to MAX_LEVEL segments. The other order emits FILE paths once MAX_LEVEL >= 2; verified both orders against a synthetic tree. - MAX_LEVEL 1 keeps every entry an IMMEDIATE child of ops/docker. Run 166 is why: at level 2, ops/docker/semantic-release-rust/toolchain/package-lock.json became its own release train named `toolchain`, had no .releaserc.cjs, and cut a ROOT v2.2.0 tag. Reproduced that exact behaviour at MAX_LEVEL=2 to prove the truncation is faithful, not merely similar. - output written with the heredoc form, because $GITHUB_OUTPUT is line-oriented and this value is JSON (run 253). guard-releaserc greps for the pin, so it now tracks MAX_LEVEL rather than the reusable's max-level input. Without that update the guard would fail on this very commit. VERIFIED BEFORE SHIPPING, running the extracted step script in a throwaway clone checked out at each real commit — not reasoned about: #88 -> [ci-runner] #90 -> [] #99 -> [] #100 -> [cve-gate] each matching what CI actually did on those commits, with the emitted $GITHUB_OUTPUT re-parsed through the runner's own key=value / key<<DELIM rules. An earlier attempt at this verification ran `git checkout <sha> -- .` in the live working tree, which clobbered the uncommitted edit and staged files from old commits. Nothing pushed was lost; the harness now clones first and never touches the working tree.Pull request closed