Prepend system bin dirs to PATH when allowed_non_write_users is set#1208
Prepend system bin dirs to PATH when allowed_non_write_users is set#1208OctavianGuzu merged 1 commit intomainfrom
Conversation
1ac9d90 to
347a6be
Compare
347a6be to
869ee18
Compare
There was a problem hiding this comment.
LGTM — straightforward PATH fix following existing patterns.
Extended reasoning...
Overview
Adds two steps to action.yml that write /usr/bin and /bin to $GITHUB_PATH: once before the main Claude step and once after (with always()). Both are gated on allowed_non_write_users \!= '', matching the adjacent pin-bun step pattern.
Security risks
None meaningful. The change only adds standard, trusted system directories to PATH. It does not introduce any new code execution paths, secret exposure, or auth bypass risks. Gating on allowed_non_write_users is appropriate and consistent with adjacent steps.
Level of scrutiny
Low — this is a config-only change to a CI action definition. The mechanism (writing to $GITHUB_PATH) is standard GitHub Actions practice; entries written there are prepended to PATH for subsequent steps, so the naming is accurate despite using >>.
Other factors
No bugs were found, no prior review comments exist, and the change is small (8 lines), self-contained, and follows established patterns in the file. continue-on-error: true makes both steps safe to fail without breaking the workflow.
869ee18 to
e558b02
Compare
There was a problem hiding this comment.
LGTM — straightforward PATH fix and improved security docs.
Extended reasoning...
Overview
Two files changed: adds two small steps that prepend and to GITHUB_PATH (one before the main Claude step, one after in the always-run cleanup phase), and strengthens the PAT warning for allowed_non_write_users.
Security risks
None introduced. The path entries are hardcoded system directories, not user-controlled. The doc change is purely additive security guidance, warning against static PATs and recommending minimal allowedTools.
Level of scrutiny
Low. This is a mechanical fix for a known PATH ordering issue (setup actions like setup-bun can prepend their own dirs, pushing system tools lower). The new steps follow the exact same pattern as the adjacent "Pin bun binary" step (same if condition, same continue-on-error: true).
Other factors
No logic changes, no new inputs, no security-sensitive code touched. The post-step re-prepend correctly uses always() to cover cleanup steps. Bug hunting found no issues.
f7fcc61 to
360857f
Compare
360857f to
da6f220
Compare
da6f220 to
b3500f6
Compare
There was a problem hiding this comment.
Additional findings (outside current diff — PR may have been updated during review):
-
🔴
action.yml:350-376— The Re-prepend step's env: block (lines 357-362) clears BASH_ENV, LD_PRELOAD, and related variables but omits GITHUB_ENV, leaving the write target for the env-clearing at line 372 vulnerable to prompt injection: if the Claude run step is coerced into writing GITHUB_ENV=/dev/null to the real env file, the Re-prepend step's} >> "$GITHUB_ENV"silently discards all clearings to /dev/null, and malicious values like BASH_ENV=/tmp/evil.sh survive into the Cleanup SSH signing key and Post buffered inline comments steps (which invoke bash without --noprofile --norc). Fix by capturing the authoritative GITHUB_ENV path before the Claude step (via a step output) and using that pinned path in the Re-prepend run block.Extended reasoning...
What the bug is and how it manifests
The Re-prepend step was added to sanitize the environment after Claude processes untrusted input (when allowed_non_write_users is set). It clears dangerous variables by writing zeroed values to
$GITHUB_ENVat line 372. However, the step's own env: block (lines 357-362) enumerates BASH_ENV, LD_PRELOAD, NODE_OPTIONS, DYLD_INSERT_LIBRARIES, and DYLD_PRELOAD — but conspicuously omits GITHUB_ENV itself. This means if the GITHUB_ENV environment variable has been overridden by an attacker-injected value (e.g., GITHUB_ENV=/dev/null) from the preceding Claude step, the Re-prepend step inherits that overridden value and all its clearing writes are silently discarded.The specific code path that triggers it
During the Run Claude Code Action step, Claude has access to a bash tool that can write arbitrary content to $GITHUB_ENV. A prompt injection — e.g., a hidden instruction in a user-submitted issue — could cause Claude to execute:
echo 'GITHUB_ENV=/dev/null' >> "$GITHUB_ENV"andecho 'BASH_ENV=/tmp/evil.sh' >> "$GITHUB_ENV". The GitHub Actions runner reads the env file after the Claude step and propagates both values. When the Re-prepend step runs, it has GITHUB_ENV=/dev/null in its environment (set from the accumulated env). The env: block does NOT reset GITHUB_ENV, so the run block's} >> "$GITHUB_ENV"expands to} >> /dev/null— the BASH_ENV= clearing is written nowhere. The runner then reads the canonical env file (its internal reference), finds no clearings, and BASH_ENV=/tmp/evil.sh persists into subsequent steps.Why existing code does not prevent it
The env: block correctly overrides BASH_ENV and the other variables for the step's own bash invocation, which protects the Re-prepend step itself. But the purpose of the GITHUB_ENV writes is to protect SUBSEQUENT steps. Since GITHUB_ENV is not in the env: block, its value during the run: block is whatever the accumulated environment says — and that can be /dev/null if Claude was injected. The continue-on-error: true flag silences any error from writing to /dev/null (on Linux, writes to /dev/null succeed without error anyway), so there is no signal that the clearing failed.
The refutation's counter-argument addressed
One verifier argued that the GitHub Actions runner always creates a fresh temp file for GITHUB_ENV at the start of each step, overriding any accumulated GITHUB_ENV value. If this is correct, the runner would inject the correct GITHUB_ENV path into the Re-prepend step despite any injected override, and the clearing would succeed. This is a legitimate uncertainty: GitHub's documentation describes GITHUB_ENV as runner-managed, and the runner may indeed inject its authoritative path per step. However, this behavior is implementation-dependent and not explicitly guaranteed against injection overrides in the runner specification. At minimum, the design gap (GITHUB_ENV absent from the env: block) makes the step's protection fragile and dependent on an undocumented runner guarantee. The safe fix does not rely on this behavior.
Impact
If the attack works (runner does not override accumulated GITHUB_ENV), BASH_ENV=/tmp/evil.sh persists into the Cleanup SSH signing key step (line 374-383) and Post buffered inline comments step (lines 385+), both of which use shell: bash without --noprofile --norc. When bash initializes, it sources the file at BASH_ENV, giving the attacker arbitrary code execution in the post-Claude cleanup steps. These steps also have access to secrets (GITHUB_TOKEN, ANTHROPIC_API_KEY) passed in their env: blocks, making this high-value for exfiltration.
How to fix it
Before the Run Claude Code Action step, capture the authoritative GITHUB_ENV path: add a step with
id: pin-envandrun: echo "github_env=$GITHUB_ENV" >> "$GITHUB_OUTPUT". In the Re-prepend step's run block, replace$GITHUB_ENVwith${{ steps.pin-env.outputs.github_env }}. Step outputs are set by the runner at step completion and cannot be overridden by env injection, so this pins the write target to the known-good path regardless of what accumulated env vars say.Step-by-step proof
- Attacker submits an issue containing hidden instruction: execute
echo 'GITHUB_ENV=/dev/null' >> "$GITHUB_ENV" && echo 'BASH_ENV=/tmp/evil.sh' >> "$GITHUB_ENV"via bash tool. - Claude (with allowed_non_write_users set) processes it and runs the bash command, writing both entries to the legitimate GITHUB_ENV temp file.
- Runner reads the temp file after the Claude step; accumulates GITHUB_ENV=/dev/null and BASH_ENV=/tmp/evil.sh.
- Runner sets up the Re-prepend step, propagating accumulated env. If runner does not override GITHUB_ENV: step environment has GITHUB_ENV=/dev/null.
- Re-prepend step runs: env: block overrides BASH_ENV="" protecting the step's own bash (good). Run block executes
} >> "$GITHUB_ENV"=} >> /dev/null— clearings are discarded. - Runner reads its canonical env file after Re-prepend; finds no new clearings. BASH_ENV=/tmp/evil.sh from step 3 remains.
- Cleanup SSH signing key step: shell: bash initializes, sources /tmp/evil.sh via BASH_ENV. Attacker code executes with access to the step's environment including any secrets.
- Attacker submits an issue containing hidden instruction: execute
Ensures later steps resolve standard tools like git and tar from /usr/bin regardless of what setup actions added earlier in the job. Also strengthens the PAT guidance in security.md. :house: Remote-Dev: homespace
b3500f6 to
a15bf9d
Compare
wolffiex
left a comment
There was a problem hiding this comment.
LGTM with one small fix before merge, plus a scope note.
Fix: NODE_OPTIONS asymmetry in the re-prepend step
The step's env: block clears 8 variables for the step itself — including NODE_OPTIONS — but the $GITHUB_ENV persistence block clears only 7. NODE_OPTIONS is missing:
env:
BASH_ENV: ""
LD_PRELOAD: ""
LD_LIBRARY_PATH: ""
NODE_OPTIONS: "" # cleared for THIS step
DYLD_INSERT_LIBRARIES: ""
DYLD_PRELOAD: ""
DYLD_LIBRARY_PATH: ""
DYLD_FRAMEWORK_PATH: ""
run: |
echo "/usr/bin" >> "$GITHUB_PATH"
echo "/bin" >> "$GITHUB_PATH"
{
echo "BASH_ENV="
echo "LD_PRELOAD="
echo "LD_LIBRARY_PATH="
# NODE_OPTIONS missing — add it
echo "DYLD_INSERT_LIBRARIES="
echo "DYLD_PRELOAD="
echo "DYLD_LIBRARY_PATH="
echo "DYLD_FRAMEWORK_PATH="
} >> "$GITHUB_ENV"If Claude emits echo "NODE_OPTIONS=--require=/tmp/evil.js" >> "$GITHUB_ENV" during the action run, that setting survives into later steps. The action's own cleanup steps use bun (which ignores NODE_OPTIONS), so this doesn't compromise the action itself — but any downstream node/npm/npx step in the same job picks it up. Either add echo "NODE_OPTIONS=" to the $GITHUB_ENV block, or drop NODE_OPTIONS: "" from the step-level env: so the two lists match.
Suggestion: scope of PATH hardening
Only /usr/bin and /bin are prepended. Binaries commonly installed elsewhere remain exposed to earlier PATH entries: gh (/usr/local/bin on most runners), node, npm, docker, aws, kubectl, language toolchains. The PR framing ("git, tar, zstd") is accurate for what's defended, but a brief comment in action.yml at the pre-step would help a future reader not mistake this for comprehensive PATH lockdown — e.g. "defends standard POSIX tooling; tools in /usr/local/bin and language toolchains remain first-match from earlier PATH entries."
Notes (non-blocking)
continue-on-error: trueon the re-prepend matches the adjacent pin-bun pattern, but the failure mode is different: pin-bun failing → loud downstream. This failing → silent loss of a security boundary. Worth a comment, or droppingcontinue-on-erroron just this step.$GITHUB_PATHappend order:/usr/binwritten first,/binsecond — GitHub prepends each line, so/binends up ahead of/usr/binin final PATH. Harmless (both trusted), but the PR description reads as if/usr/binwins.- Custom shell
/bin/bash --noprofile --norc -e -o pipefail {0}correctly bypasses/etc/profileand~/.bashrc. Good hardening. docs/security.mdchange is well-calibrated — the PAT warning is genuinely sharper.
Approving on the assumption the NODE_OPTIONS gap gets closed in a follow-up commit before merge.
|
Thanks for the review! On the NODE_OPTIONS asymmetry: it's intentional — the runner has rejected Ack on PATH scope (only |
Bumps the github-actions group with 2 updates: [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action) and [actions/cache](https://github.com/actions/cache). Updates `anthropics/claude-code-action` from 1.0.88 to 1.0.101 Release notes *Sourced from [anthropics/claude-code-action's releases](https://github.com/anthropics/claude-code-action/releases).* > v1.0.101 > -------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.101> > > v1.0.100 > -------- > > What's Changed > -------------- > > * Upgrade Claude model from opus-4-6 to opus-4-7 by [`@ashwin-ant`](https://github.com/ashwin-ant) in [anthropics/claude-code-action#1227](https://redirect.github.com/anthropics/claude-code-action/pull/1227) > * fix: pass install.sh binary path to Agent SDK after 0.2.113 bump by [`@ashwin-ant`](https://github.com/ashwin-ant) in [anthropics/claude-code-action#1235](https://redirect.github.com/anthropics/claude-code-action/pull/1235) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.100> > > v1.0.99 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.99> > > v1.0.98 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.98> > > v1.0.97 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.97> > > v1.0.96 > ------- > > What's Changed > -------------- > > * fix: handle fork PRs by fetching via refs/pull/N/head by [`@stakeswky`](https://github.com/stakeswky) in [anthropics/claude-code-action#963](https://redirect.github.com/anthropics/claude-code-action/pull/963) > > New Contributors > ---------------- > > * [`@stakeswky`](https://github.com/stakeswky) made their first contribution in [anthropics/claude-code-action#963](https://redirect.github.com/anthropics/claude-code-action/pull/963) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.96> > > v1.0.95 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.95> > > v1.0.94 > ------- > > What's Changed > -------------- > > * Prepend system bin dirs to PATH when allowed\_non\_write\_users is set by [`@OctavianGuzu`](https://github.com/OctavianGuzu) in [anthropics/claude-code-action#1208](https://redirect.github.com/anthropics/claude-code-action/pull/1208) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.94> > > v1.0.93 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.93> > > v1.0.92 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.92> > > v1.0.91 > ------- > > What's Changed > -------------- > > * Use pinned bun binary for post-steps when allowed\_non\_write\_users is set by [`@OctavianGuzu`](https://github.com/OctavianGuzu) in [anthropics/claude-code-action#1190](https://redirect.github.com/anthropics/claude-code-action/pull/1190) ... (truncated) Commits * [`38ec876`](anthropics/claude-code-action@38ec876) chore: bump Claude Code to 2.1.114 and Agent SDK to 0.2.114 * [`0d2971c`](anthropics/claude-code-action@0d2971c) fix: pass install.sh binary path explicitly to Agent SDK ([#1235](https://redirect.github.com/anthropics/claude-code-action/issues/1235)) * [`c68f82c`](anthropics/claude-code-action@c68f82c) chore: bump Claude Code to 2.1.113 and Agent SDK to 0.2.113 * [`78758ed`](anthropics/claude-code-action@78758ed) chore: bump model version in workflows ([#1227](https://redirect.github.com/anthropics/claude-code-action/issues/1227)) * [`c3d45e8`](anthropics/claude-code-action@c3d45e8) chore: bump Claude Code to 2.1.112 and Agent SDK to 0.2.112 * [`931e620`](anthropics/claude-code-action@931e620) chore: bump Claude Code to 2.1.111 and Agent SDK to 0.2.111 * [`905d4eb`](anthropics/claude-code-action@905d4eb) chore: bump Claude Code to 2.1.110 and Agent SDK to 0.2.110 * [`5fb8995`](anthropics/claude-code-action@5fb8995) chore: bump Claude Code to 2.1.109 and Agent SDK to 0.2.109 * [`c3bf66d`](anthropics/claude-code-action@c3bf66d) fix: handle fork PRs by fetching via refs/pull/N/head ([#962](https://redirect.github.com/anthropics/claude-code-action/issues/962)) ([#963](https://redirect.github.com/anthropics/claude-code-action/issues/963)) * [`3943183`](anthropics/claude-code-action@3943183) chore: bump Claude Code to 2.1.108 and Agent SDK to 0.2.108 * Additional commits viewable in [compare view](anthropics/claude-code-action@1eddb33...38ec876) Updates `actions/cache` from 5.0.4 to 5.0.5 Release notes *Sourced from [actions/cache's releases](https://github.com/actions/cache/releases).* > v5.0.5 > ------ > > What's Changed > -------------- > > * Update ts-http-runtime dependency by [`@yacaovsnc`](https://github.com/yacaovsnc) in [actions/cache#1747](https://redirect.github.com/actions/cache/pull/1747) > > **Full Changelog**: <actions/cache@v5...v5.0.5> Changelog *Sourced from [actions/cache's changelog](https://github.com/actions/cache/blob/main/RELEASES.md).* > Releases > ======== > > How to prepare a release > ------------------------ > > > [!NOTE] > > Relevant for maintainers with write access only. > > 1. Switch to a new branch from `main`. > 2. Run `npm test` to ensure all tests are passing. > 3. Update the version in [`https://github.com/actions/cache/blob/main/package.json`](https://github.com/actions/cache/blob/main/package.json). > 4. Run `npm run build` to update the compiled files. > 5. Update this [`https://github.com/actions/cache/blob/main/RELEASES.md`](https://github.com/actions/cache/blob/main/RELEASES.md) with the new version and changes in the `## Changelog` section. > 6. Run `licensed cache` to update the license report. > 7. Run `licensed status` and resolve any warnings by updating the [`https://github.com/actions/cache/blob/main/.licensed.yml`](https://github.com/actions/cache/blob/main/.licensed.yml) file with the exceptions. > 8. Commit your changes and push your branch upstream. > 9. Open a pull request against `main` and get it reviewed and merged. > 10. Draft a new release <https://github.com/actions/cache/releases> use the same version number used in `package.json` > 1. Create a new tag with the version number. > 2. Auto generate release notes and update them to match the changes you made in `RELEASES.md`. > 3. Toggle the set as the latest release option. > 4. Publish the release. > 11. Navigate to <https://github.com/actions/cache/actions/workflows/release-new-action-version.yml> > 1. There should be a workflow run queued with the same version number. > 2. Approve the run to publish the new version and update the major tags for this action. > > Changelog > --------- > > ### 5.0.4 > > * Bump `minimatch` to v3.1.5 (fixes ReDoS via globstar patterns) > * Bump `undici` to v6.24.1 (WebSocket decompression bomb protection, header validation fixes) > * Bump `fast-xml-parser` to v5.5.6 > > ### 5.0.3 > > * Bump `@actions/cache` to v5.0.5 (Resolves: <https://github.com/actions/cache/security/dependabot/33>) > * Bump `@actions/core` to v2.0.3 > > ### 5.0.2 > > * Bump `@actions/cache` to v5.0.3 [#1692](https://redirect.github.com/actions/cache/pull/1692) > > ### 5.0.1 > > * Update `@azure/storage-blob` to `^12.29.1` via `@actions/cache@5.0.1` [#1685](https://redirect.github.com/actions/cache/pull/1685) > > ### 5.0.0 > > > [!IMPORTANT] > > `actions/cache@v5` runs on the Node.js 24 runtime and requires a minimum Actions Runner version of `2.327.1`. ... (truncated) Commits * [`27d5ce7`](actions/cache@27d5ce7) Merge pull request [#1747](https://redirect.github.com/actions/cache/issues/1747) from actions/yacaovsnc/update-dependency * [`f280785`](actions/cache@f280785) licensed changes * [`619aeb1`](actions/cache@619aeb1) npm run build generated dist files * [`bcf16c2`](actions/cache@bcf16c2) Update ts-http-runtime to 0.3.5 * See full diff in [compare view](actions/cache@6682284...27d5ce7) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Bumps the github-actions group with 3 updates: [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action), [github/codeql-action](https://github.com/github/codeql-action) and [actions/cache](https://github.com/actions/cache). Updates `anthropics/claude-code-action` from 1.0.93 to 1.0.101 Release notes *Sourced from [anthropics/claude-code-action's releases](https://github.com/anthropics/claude-code-action/releases).* > v1.0.101 > -------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.101> > > v1.0.100 > -------- > > What's Changed > -------------- > > * Upgrade Claude model from opus-4-6 to opus-4-7 by [`@ashwin-ant`](https://github.com/ashwin-ant) in [anthropics/claude-code-action#1227](https://redirect.github.com/anthropics/claude-code-action/pull/1227) > * fix: pass install.sh binary path to Agent SDK after 0.2.113 bump by [`@ashwin-ant`](https://github.com/ashwin-ant) in [anthropics/claude-code-action#1235](https://redirect.github.com/anthropics/claude-code-action/pull/1235) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.100> > > v1.0.99 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.99> > > v1.0.98 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.98> > > v1.0.97 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.97> > > v1.0.96 > ------- > > What's Changed > -------------- > > * fix: handle fork PRs by fetching via refs/pull/N/head by [`@stakeswky`](https://github.com/stakeswky) in [anthropics/claude-code-action#963](https://redirect.github.com/anthropics/claude-code-action/pull/963) > > New Contributors > ---------------- > > * [`@stakeswky`](https://github.com/stakeswky) made their first contribution in [anthropics/claude-code-action#963](https://redirect.github.com/anthropics/claude-code-action/pull/963) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.96> > > v1.0.95 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.95> > > v1.0.94 > ------- > > What's Changed > -------------- > > * Prepend system bin dirs to PATH when allowed\_non\_write\_users is set by [`@OctavianGuzu`](https://github.com/OctavianGuzu) in [anthropics/claude-code-action#1208](https://redirect.github.com/anthropics/claude-code-action/pull/1208) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.94> Commits * [`38ec876`](anthropics/claude-code-action@38ec876) chore: bump Claude Code to 2.1.114 and Agent SDK to 0.2.114 * [`0d2971c`](anthropics/claude-code-action@0d2971c) fix: pass install.sh binary path explicitly to Agent SDK ([#1235](https://redirect.github.com/anthropics/claude-code-action/issues/1235)) * [`c68f82c`](anthropics/claude-code-action@c68f82c) chore: bump Claude Code to 2.1.113 and Agent SDK to 0.2.113 * [`78758ed`](anthropics/claude-code-action@78758ed) chore: bump model version in workflows ([#1227](https://redirect.github.com/anthropics/claude-code-action/issues/1227)) * [`c3d45e8`](anthropics/claude-code-action@c3d45e8) chore: bump Claude Code to 2.1.112 and Agent SDK to 0.2.112 * [`931e620`](anthropics/claude-code-action@931e620) chore: bump Claude Code to 2.1.111 and Agent SDK to 0.2.111 * [`905d4eb`](anthropics/claude-code-action@905d4eb) chore: bump Claude Code to 2.1.110 and Agent SDK to 0.2.110 * [`5fb8995`](anthropics/claude-code-action@5fb8995) chore: bump Claude Code to 2.1.109 and Agent SDK to 0.2.109 * [`c3bf66d`](anthropics/claude-code-action@c3bf66d) fix: handle fork PRs by fetching via refs/pull/N/head ([#962](https://redirect.github.com/anthropics/claude-code-action/issues/962)) ([#963](https://redirect.github.com/anthropics/claude-code-action/issues/963)) * [`3943183`](anthropics/claude-code-action@3943183) chore: bump Claude Code to 2.1.108 and Agent SDK to 0.2.108 * Additional commits viewable in [compare view](anthropics/claude-code-action@b47fd72...38ec876) Updates `github/codeql-action` from 4.35.1 to 4.35.2 Release notes *Sourced from [github/codeql-action's releases](https://github.com/github/codeql-action/releases).* > v4.35.2 > ------- > > * The undocumented TRAP cache cleanup feature that could be enabled using the `CODEQL_ACTION_CLEANUP_TRAP_CACHES` environment variable is deprecated and will be removed in May 2026. If you are affected by this, we recommend disabling TRAP caching by passing the `trap-caching: false` input to the `init` Action. [#3795](https://redirect.github.com/github/codeql-action/pull/3795) > * The Git version 2.36.0 requirement for improved incremental analysis now only applies to repositories that contain submodules. [#3789](https://redirect.github.com/github/codeql-action/pull/3789) > * Python analysis on GHES no longer extracts the standard library, relying instead on models of the standard library. This should result in significantly faster extraction and analysis times, while the effect on alerts should be minimal. [#3794](https://redirect.github.com/github/codeql-action/pull/3794) > * Fixed a bug in the validation of OIDC configurations for private registries that was added in CodeQL Action 4.33.0 / 3.33.0. [#3807](https://redirect.github.com/github/codeql-action/pull/3807) > * Update default CodeQL bundle version to [2.25.2](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.2). [#3823](https://redirect.github.com/github/codeql-action/pull/3823) Changelog *Sourced from [github/codeql-action's changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md).* > CodeQL Action Changelog > ======================= > > See the [releases page](https://github.com/github/codeql-action/releases) for the relevant changes to the CodeQL CLI and language packs. > > [UNRELEASED] > ------------ > > No user facing changes. > > 4.35.2 - 15 Apr 2026 > -------------------- > > * The undocumented TRAP cache cleanup feature that could be enabled using the `CODEQL_ACTION_CLEANUP_TRAP_CACHES` environment variable is deprecated and will be removed in May 2026. If you are affected by this, we recommend disabling TRAP caching by passing the `trap-caching: false` input to the `init` Action. [#3795](https://redirect.github.com/github/codeql-action/pull/3795) > * The Git version 2.36.0 requirement for improved incremental analysis now only applies to repositories that contain submodules. [#3789](https://redirect.github.com/github/codeql-action/pull/3789) > * Python analysis on GHES no longer extracts the standard library, relying instead on models of the standard library. This should result in significantly faster extraction and analysis times, while the effect on alerts should be minimal. [#3794](https://redirect.github.com/github/codeql-action/pull/3794) > * Fixed a bug in the validation of OIDC configurations for private registries that was added in CodeQL Action 4.33.0 / 3.33.0. [#3807](https://redirect.github.com/github/codeql-action/pull/3807) > * Update default CodeQL bundle version to [2.25.2](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.2). [#3823](https://redirect.github.com/github/codeql-action/pull/3823) > > 4.35.1 - 27 Mar 2026 > -------------------- > > * Fix incorrect minimum required Git version for [improved incremental analysis](https://redirect.github.com/github/roadmap/issues/1158): it should have been 2.36.0, not 2.11.0. [#3781](https://redirect.github.com/github/codeql-action/pull/3781) > > 4.35.0 - 27 Mar 2026 > -------------------- > > * Reduced the minimum Git version required for [improved incremental analysis](https://redirect.github.com/github/roadmap/issues/1158) from 2.38.0 to 2.11.0. [#3767](https://redirect.github.com/github/codeql-action/pull/3767) > * Update default CodeQL bundle version to [2.25.1](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.1). [#3773](https://redirect.github.com/github/codeql-action/pull/3773) > > 4.34.1 - 20 Mar 2026 > -------------------- > > * Downgrade default CodeQL bundle version to [2.24.3](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3) due to issues with a small percentage of Actions and JavaScript analyses. [#3762](https://redirect.github.com/github/codeql-action/pull/3762) > > 4.34.0 - 20 Mar 2026 > -------------------- > > * Added an experimental change which disables TRAP caching when [improved incremental analysis](https://redirect.github.com/github/roadmap/issues/1158) is enabled, since improved incremental analysis supersedes TRAP caching. This will improve performance and reduce Actions cache usage. We expect to roll this change out to everyone in March. [#3569](https://redirect.github.com/github/codeql-action/pull/3569) > * We are rolling out improved incremental analysis to C/C++ analyses that use build mode `none`. We expect this rollout to be complete by the end of April 2026. [#3584](https://redirect.github.com/github/codeql-action/pull/3584) > * Update default CodeQL bundle version to [2.25.0](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.0). [#3585](https://redirect.github.com/github/codeql-action/pull/3585) > > 4.33.0 - 16 Mar 2026 > -------------------- > > * Upcoming change: Starting April 2026, the CodeQL Action will skip collecting file coverage information on pull requests to improve analysis performance. File coverage information will still be computed on non-PR analyses. Pull request analyses will log a warning about this upcoming change. [#3562](https://redirect.github.com/github/codeql-action/pull/3562) > > To opt out of this change: > > + **Repositories owned by an organization:** Create a custom repository property with the name `github-codeql-file-coverage-on-prs` and the type "True/false", then set this property to `true` in the repository's settings. For more information, see [Managing custom properties for repositories in your organization](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization). Alternatively, if you are using an advanced setup workflow, you can set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > + **User-owned repositories using default setup:** Switch to an advanced setup workflow and set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > + **User-owned repositories using advanced setup:** Set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > * Fixed [a bug](https://redirect.github.com/github/codeql-action/issues/3555) which caused the CodeQL Action to fail loading repository properties if a "Multi select" repository property was configured for the repository. [#3557](https://redirect.github.com/github/codeql-action/pull/3557) > * The CodeQL Action now loads [custom repository properties](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization) on GitHub Enterprise Server, enabling the customization of features such as `github-codeql-disable-overlay` that was previously only available on GitHub.com. [#3559](https://redirect.github.com/github/codeql-action/pull/3559) > * Once [private package registries](https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries) can be configured with OIDC-based authentication for organizations, the CodeQL Action will now be able to accept such configurations. [#3563](https://redirect.github.com/github/codeql-action/pull/3563) > * Fixed the retry mechanism for database uploads. Previously this would fail with the error "Response body object should not be disturbed or locked". [#3564](https://redirect.github.com/github/codeql-action/pull/3564) > * A warning is now emitted if the CodeQL Action detects a repository property whose name suggests that it relates to the CodeQL Action, but which is not one of the properties recognised by the current version of the CodeQL Action. [#3570](https://redirect.github.com/github/codeql-action/pull/3570) > > 4.32.6 - 05 Mar 2026 > -------------------- ... (truncated) Commits * [`95e58e9`](github/codeql-action@95e58e9) Merge pull request [#3824](https://redirect.github.com/github/codeql-action/issues/3824) from github/update-v4.35.2-d2e135a73 * [`6f31bfe`](github/codeql-action@6f31bfe) Update changelog for v4.35.2 * [`d2e135a`](github/codeql-action@d2e135a) Merge pull request [#3823](https://redirect.github.com/github/codeql-action/issues/3823) from github/update-bundle/codeql-bundle-v2.25.2 * [`60abb65`](github/codeql-action@60abb65) Add changelog note * [`5a0a562`](github/codeql-action@5a0a562) Update default bundle to codeql-bundle-v2.25.2 * [`6521697`](github/codeql-action@6521697) Merge pull request [#3820](https://redirect.github.com/github/codeql-action/issues/3820) from github/dependabot/github\_actions/dot-github/wor... * [`3c45af2`](github/codeql-action@3c45af2) Merge pull request [#3821](https://redirect.github.com/github/codeql-action/issues/3821) from github/dependabot/npm\_and\_yarn/npm-minor-345b93... * [`f1c3393`](github/codeql-action@f1c3393) Rebuild * [`1024fc4`](github/codeql-action@1024fc4) Rebuild * [`9dd4cfe`](github/codeql-action@9dd4cfe) Bump the npm-minor group across 1 directory with 6 updates * Additional commits viewable in [compare view](github/codeql-action@c10b806...95e58e9) Updates `actions/cache` from 5.0.4 to 5.0.5 Release notes *Sourced from [actions/cache's releases](https://github.com/actions/cache/releases).* > v5.0.5 > ------ > > What's Changed > -------------- > > * Update ts-http-runtime dependency by [`@yacaovsnc`](https://github.com/yacaovsnc) in [actions/cache#1747](https://redirect.github.com/actions/cache/pull/1747) > > **Full Changelog**: <actions/cache@v5...v5.0.5> Changelog *Sourced from [actions/cache's changelog](https://github.com/actions/cache/blob/main/RELEASES.md).* > Releases > ======== > > How to prepare a release > ------------------------ > > > [!NOTE] > > Relevant for maintainers with write access only. > > 1. Switch to a new branch from `main`. > 2. Run `npm test` to ensure all tests are passing. > 3. Update the version in [`https://github.com/actions/cache/blob/main/package.json`](https://github.com/actions/cache/blob/main/package.json). > 4. Run `npm run build` to update the compiled files. > 5. Update this [`https://github.com/actions/cache/blob/main/RELEASES.md`](https://github.com/actions/cache/blob/main/RELEASES.md) with the new version and changes in the `## Changelog` section. > 6. Run `licensed cache` to update the license report. > 7. Run `licensed status` and resolve any warnings by updating the [`https://github.com/actions/cache/blob/main/.licensed.yml`](https://github.com/actions/cache/blob/main/.licensed.yml) file with the exceptions. > 8. Commit your changes and push your branch upstream. > 9. Open a pull request against `main` and get it reviewed and merged. > 10. Draft a new release <https://github.com/actions/cache/releases> use the same version number used in `package.json` > 1. Create a new tag with the version number. > 2. Auto generate release notes and update them to match the changes you made in `RELEASES.md`. > 3. Toggle the set as the latest release option. > 4. Publish the release. > 11. Navigate to <https://github.com/actions/cache/actions/workflows/release-new-action-version.yml> > 1. There should be a workflow run queued with the same version number. > 2. Approve the run to publish the new version and update the major tags for this action. > > Changelog > --------- > > ### 5.0.4 > > * Bump `minimatch` to v3.1.5 (fixes ReDoS via globstar patterns) > * Bump `undici` to v6.24.1 (WebSocket decompression bomb protection, header validation fixes) > * Bump `fast-xml-parser` to v5.5.6 > > ### 5.0.3 > > * Bump `@actions/cache` to v5.0.5 (Resolves: <https://github.com/actions/cache/security/dependabot/33>) > * Bump `@actions/core` to v2.0.3 > > ### 5.0.2 > > * Bump `@actions/cache` to v5.0.3 [#1692](https://redirect.github.com/actions/cache/pull/1692) > > ### 5.0.1 > > * Update `@azure/storage-blob` to `^12.29.1` via `@actions/cache@5.0.1` [#1685](https://redirect.github.com/actions/cache/pull/1685) > > ### 5.0.0 > > > [!IMPORTANT] > > `actions/cache@v5` runs on the Node.js 24 runtime and requires a minimum Actions Runner version of `2.327.1`. ... (truncated) Commits * [`27d5ce7`](actions/cache@27d5ce7) Merge pull request [#1747](https://redirect.github.com/actions/cache/issues/1747) from actions/yacaovsnc/update-dependency * [`f280785`](actions/cache@f280785) licensed changes * [`619aeb1`](actions/cache@619aeb1) npm run build generated dist files * [`bcf16c2`](actions/cache@bcf16c2) Update ts-http-runtime to 0.3.5 * See full diff in [compare view](actions/cache@6682284...27d5ce7) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Prepends
/usr/binand/bintoGITHUB_PATH(before and after the Claude step) so later steps in the job resolve standard tools (git, tar, zstd) from the system locations regardless of what setup actions added to PATH earlier. Gated onallowed_non_write_users, same as the adjacent pin-bun step.