Repository navigation
Review: Improve composability (upstream #269) - #1
msystemsuser wants to merge 4 commits into
Conversation
There was a problem hiding this comment.
Review progress ██████████ 7/7 files
Comment — found 2 issue(s) at 7c6887c.
Actionable comments posted: 2
🤖 Prompt for AI agents
Verify each finding against current code. Fix only still-valid concrete bugs, skip the
rest with a brief reason, keep changes minimal, and validate. Skip Decision required,
policy forks, and "consider X" alternatives. Do not add new features, refactors, or
architecture beyond the fix; prefer the smallest diff.
Findings to address:
1. In `@.github/workflows/plan.yml` (line 145, Important):
`fetch-tags: true`
This replaces the explicit `git fetch origin 'refs/tags/*:refs/tags/*'` workaround for #258. The checkout here is shallow (no `fetch-depth`, so depth 1), and `actions/checkout`'s `fetch-tags` only lifts git's default tag-following (`--no-tags` is dropped, but the tags refspec is only added for `fetch-depth: 0`), i.e. it can fetch tags that point at the fetched commit rather than all tag refs. If the latest tag points at an older main commit (the normal case for a push-to-main run), `render.sh` (`tag="$(git tag --sort=-creatordate | head -n1)"`) sees no tags, `values.sh` bails out with `TAG=v0.0.0` and emits `TBD` checksums, so the rendered action / `Test action (release binary)` step is wrong or fails. Confirm this on a real run (or set `fetch-depth: 0`, or keep the explicit tag fetch) before relying on it.
2. In `@.release/find-changes-action/action.yml` (line 83, Important):
`credentials="$(git config --file "$directory/.git/config" --get "includeIf.gitdir:$PWD/$directory/.git.path" || true)"`
`git config --get` is a *literal key* lookup, so this only finds the value if the key string is byte-identical to what `actions/checkout` wrote into `.git/config` (the key depends on that action's internal convention — whether it records the gitdir as the working-tree path or with the `/.git` suffix, and whether `$PWD` matches the resolved path it used). If it differs in any way, `--get` returns empty, the `case` glob doesn't match, and `rm -f` never runs: the `$RUNNER_TEMP/git-credentials-*.config` file (which holds a live token for the repo) is left behind silently, while the new README section promises the action "removes the temporary directory and its checkout credentials after use". `rm -rf .tmp-anttiharju-compare-changes` does not help because that file lives outside the temp dir. Safer: read whatever key exists, e.g. `git config --file "$directory/.git/config" --get-regexp 'includeIf\.gitdir.*\.path' | awk '{print $2}'`, instead of reconstructing the key by convention.
🚢 Vortex specialist fleet
Security — completed · no findings
| uses: actions/checkout@v7 | ||
| with: | ||
| persist-credentials: false | ||
| fetch-tags: true |
There was a problem hiding this comment.
fetch-tags on a shallow checkout may not bring the tag render.sh needs
fetch-tags: true
This replaces the explicit git fetch origin 'refs/tags/*:refs/tags/*' workaround for anttiharju#258. The checkout here is shallow (no fetch-depth, so depth 1), and actions/checkout's fetch-tags only lifts git's default tag-following (--no-tags is dropped, but the tags refspec is only added for fetch-depth: 0), i.e. it can fetch tags that point at the fetched commit rather than all tag refs. If the latest tag points at an older main commit (the normal case for a push-to-main run), render.sh (tag="$(git tag --sort=-creatordate | head -n1)") sees no tags, values.sh bails out with TAG=v0.0.0 and emits TBD checksums, so the rendered action / Test action (release binary) step is wrong or fails. Confirm this on a real run (or set fetch-depth: 0, or keep the explicit tag fetch) before relying on it.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid concrete bugs, skip the
rest with a brief reason, keep changes minimal, and validate. Skip Decision required,
policy forks, and "consider X" alternatives. Do not add new features, refactors, or
architecture beyond the fix; prefer the smallest diff.
In `@.github/workflows/plan.yml` (line 145, Important):
`fetch-tags: true`
This replaces the explicit `git fetch origin 'refs/tags/*:refs/tags/*'` workaround for #258. The checkout here is shallow (no `fetch-depth`, so depth 1), and `actions/checkout`'s `fetch-tags` only lifts git's default tag-following (`--no-tags` is dropped, but the tags refspec is only added for `fetch-depth: 0`), i.e. it can fetch tags that point at the fetched commit rather than all tag refs. If the latest tag points at an older main commit (the normal case for a push-to-main run), `render.sh` (`tag="$(git tag --sort=-creatordate | head -n1)"`) sees no tags, `values.sh` bails out with `TAG=v0.0.0` and emits `TBD` checksums, so the rendered action / `Test action (release binary)` step is wrong or fails. Confirm this on a real run (or set `fetch-depth: 0`, or keep the explicit tag fetch) before relying on it.
| run: | | ||
| directory=".tmp-anttiharju-compare-changes/$$GITHUB_REPOSITORY" | ||
| if [ -f "$$directory/.git/config" ]; then | ||
| credentials="$$(git config --file "$$directory/.git/config" --get "includeIf.gitdir:$$PWD/$$directory/.git.path" || true)" |
There was a problem hiding this comment.
Credential cleanup may silently no-op
credentials="$(git config --file "$directory/.git/config" --get "includeIf.gitdir:$PWD/$directory/.git.path" || true)"
git config --get is a literal key lookup, so this only finds the value if the key string is byte-identical to what actions/checkout wrote into .git/config (the key depends on that action's internal convention — whether it records the gitdir as the working-tree path or with the /.git suffix, and whether $PWD matches the resolved path it used). If it differs in any way, --get returns empty, the case glob doesn't match, and rm -f never runs: the $RUNNER_TEMP/git-credentials-*.config file (which holds a live token for the repo) is left behind silently, while the new README section promises the action "removes the temporary directory and its checkout credentials after use". rm -rf .tmp-anttiharju-compare-changes does not help because that file lives outside the temp dir. Safer: read whatever key exists, e.g. git config --file "$directory/.git/config" --get-regexp 'includeIf\.gitdir.*\.path' | awk '{print $2}', instead of reconstructing the key by convention.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid concrete bugs, skip the
rest with a brief reason, keep changes minimal, and validate. Skip Decision required,
policy forks, and "consider X" alternatives. Do not add new features, refactors, or
architecture beyond the fix; prefer the smallest diff.
In `@.release/find-changes-action/action.yml` (line 83, Important):
`credentials="$(git config --file "$directory/.git/config" --get "includeIf.gitdir:$PWD/$directory/.git.path" || true)"`
`git config --get` is a *literal key* lookup, so this only finds the value if the key string is byte-identical to what `actions/checkout` wrote into `.git/config` (the key depends on that action's internal convention — whether it records the gitdir as the working-tree path or with the `/.git` suffix, and whether `$PWD` matches the resolved path it used). If it differs in any way, `--get` returns empty, the `case` glob doesn't match, and `rm -f` never runs: the `$RUNNER_TEMP/git-credentials-*.config` file (which holds a live token for the repo) is left behind silently, while the new README section promises the action "removes the temporary directory and its checkout credentials after use". `rm -rf .tmp-anttiharju-compare-changes` does not help because that file lives outside the temp dir. Safer: read whatever key exists, e.g. `git config --file "$directory/.git/config" --get-regexp 'includeIf\.gitdir.*\.path' | awk '{print $2}'`, instead of reconstructing the key by convention.
Cyclone-Source: mergestorm-vortex[bot] Cyclone-Batch: review-5327037552
|
@mergestorm-cyclone Cyclone applied fixes and pushed to batch=review-5327037552 sha=d22f14c verify=skipped |
|
@mergestorm-tempest review |
Tempest — deep systemic reviewOrchestrator: DeepSeek V4.1 Flash Verdict: clear — Tempest traced the systemic surface and found no blocking issues. No error-severity finding survived; verdict is neutral with two warnings and one info note. The most important result: the new prepare/clean-up pair in find-changes-action is not fail-safe — a bare Review confidencehigh — full diff inlined (11316 chars) Systemic risks[warning] The new prepare/clean-up pair is not fail-safe.
Named sequence: consumer repo (or an earlier step of the job) contains evidence: [warning] Exact-version pins are frozen by dependabot's This PR replaces the moving
Decision required: keep Interaction with verification: nothing in this repo renders or invokes evidence: [info] Unsupported events now fail before the binary, losing the binary's explicit event error — The Severity is info: the action never supported those events (its event gating matches evidence: Traced & cleared (9)
Out of scope / deferred (2)
Tempest reviews the bigger picture (cross-file contracts, config drift, platform limits, scale) and never patches. Fast diff review is handled by Vortex. |
auto-patch: on
auto-land: on
Replay of anttiharju#269.