-
-
Notifications
You must be signed in to change notification settings - Fork 159
ci(deps): bump actions/checkout from 6 to 7 #5615
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -57,7 +57,7 @@ jobs: | |
| CARGO_PROFILE_DEV_DEBUG: "0" | ||
| CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: "-C linker-features=-lld" | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🏁 Script executed: cat -n .github/workflows/cache-warm.yml | head -80Repository: PerryTS/perry Length of output: 4030 🏁 Script executed: # Check for other uses of actions/checkout in workflows
rg "actions/checkout" .github/workflows/ -A 2Repository: PerryTS/perry Length of output: 6487 🌐 Web query:
💡 Result: The Citations:
🏁 Script executed: # Check the node-suite-guard.yml to see if it has an example of persist-credentials configuration
cat -n .github/workflows/node-suite-guard.yml | head -30Repository: PerryTS/perry Length of output: 1535 🏁 Script executed: # Check the checkout section in node-suite-guard.yml
cat -n .github/workflows/node-suite-guard.yml | sed -n '30,80p'Repository: PerryTS/perry Length of output: 2350 Pin checkout to a commit SHA and disable persisted credentials for this read-only job. This job only builds and caches artifacts without pushing any changes. Disable credentials using 🧰 Tools🪛 zizmor (1.26.1)[warning] 60-60: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 60-60: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -84,7 +84,7 @@ jobs: | |
| os: [macos-14, ubuntu-24.04] | ||
| runs-on: ${{ matrix.os }} | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🏁 Script executed: # First, verify the file exists and check its structure
wc -l .github/workflows/container-tests.ymlRepository: PerryTS/perry Length of output: 193 🏁 Script executed: # Check the specific lines mentioned in the review
sed -n '85,90p;160,165p;206,211p;248,253p;312,317p' .github/workflows/container-tests.ymlRepository: PerryTS/perry Length of output: 1042 🏁 Script executed: # Get a complete view of all checkout actions in the file
rg "uses: actions/checkout" .github/workflows/container-tests.yml -n -B2 -A2Repository: PerryTS/perry Length of output: 998 🏁 Script executed: # Check what the latest commit SHA is for actions/checkout v7
# Also check if there are any other checkout actions with different versions/settings
rg "actions/checkout" .github/workflows/container-tests.yml -nRepository: PerryTS/perry Length of output: 340 🌐 Web query:
💡 Result: The latest release of actions/checkout is v7.0.0, released on June 18, 2026 [1][2][3]. The commit SHA associated with the v7.0.0 tag is 9c091bb [2][4]. The primary security hardening introduced in v7.0.0 is the protection against "pwn request" vulnerabilities [3][5][6]. By default, actions/checkout now refuses to check out fork pull request code when the workflow is triggered by pull_request_target or workflow_run events [3][5][7]. This is a critical security improvement because these events run with the base repository's context (e.g., GITHUB_TOKEN, secrets, runner access), and executing untrusted code from a fork in this environment can lead to unauthorized access or malicious actions [3][8][5]. Key details regarding this security update include: - Enforcement: The action blocks checkouts if the repository resolves to a fork pull request, or if the ref resolves to fork pull request head/merge commit SHAs [3]. - Backporting: GitHub plans to backport this enforcement to all currently supported major versions of actions/checkout on July 16, 2026 [3]. Workflows pinned to floating major tags (e.g., actions/checkout@v4) will automatically receive this protection [3]. Workflows pinned to specific SHAs, minor, or patch versions will not be affected and will require a manual upgrade [3]. - Opt-out: If a workflow genuinely requires checking out fork pull request code and the risks have been reviewed, users can opt out of this protection by setting the new input allow-unsafe-pr-checkout: true [8][5][6]. This input is intentionally named to warn users of the associated security risks [8]. Users are encouraged to review the official GitHub documentation on securely using pull_request_target when considering the use of this opt-out feature [8][5]. Citations:
🌐 Web query:
💡 Result: Setting persist-credentials: false in the actions/checkout GitHub Action is a recommended security best practice because it prevents the automatic persistence of authentication tokens in the local Git configuration [1][2][3]. By default, actions/checkout is configured with persist-credentials: true [4][5]. This behavior causes the action to write the authentication token (such as the GITHUB_TOKEN) into the runner's local Git configuration file (.git/config or similar) to allow subsequent steps in the same job to execute authenticated Git commands like git push or git fetch [6][7][8]. Security Implications: - Token Exposure: Because the token is written to the local disk, any subsequent step or third-party action within the same job can read it from the Git configuration [2][9][8]. - Accidental Leakage: There is a risk that this configuration file, or the token within it, could be accidentally bundled into workflow artifacts and exfiltrated, or printed in logs if a step behaves unexpectedly [2][9][8]. - Principle of Least Privilege: Most workflow jobs perform checkout only to build or test code and do not require the ability to push commits back to the repository [1][8]. Keeping the default enabled grants implicit, broad access to the token for all subsequent processes in the job, which is unnecessary and violates the principle of least privilege [10][8]. Recommendations: - Set to False by Default: You should explicitly set persist-credentials: false for all checkout steps unless your workflow specifically requires the ability to perform authenticated Git operations [2][3][8]. - Use Explicit Authentication: If you need to perform authenticated Git operations (such as pushing commits), do not rely on the persisted token. Instead, provide the token explicitly where needed (e.g., via the env context) [8]. - Harden Permissions: Beyond managing credential persistence, always ensure that the GITHUB_TOKEN is granted the minimum required permissions using the permissions key in your workflow file [10][11][8]. Usage Example: - uses: actions/checkout@v4 with: persist-credentials: false Citations:
Pin Lines 87, 162, 208, 250, and 314 use Commit SHA pinning also mitigates tag manipulation attacks. 🧰 Tools🪛 zizmor (1.26.1)[warning] 87-87: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 87-87: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
|
|
||
| - name: Free up disk space (macOS) | ||
| if: runner.os == 'macOS' | ||
|
|
@@ -159,7 +159,7 @@ jobs: | |
| runs-on: macos-14 | ||
| if: github.event_name != 'pull_request' || github.base_ref == 'main' | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Free up disk space (macOS) | ||
| run: | | ||
|
|
@@ -205,7 +205,7 @@ jobs: | |
| runs-on: ubuntu-24.04 | ||
| if: github.event_name != 'pull_request' || github.base_ref == 'main' | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -247,7 +247,7 @@ jobs: | |
| startsWith(github.ref, 'refs/tags/v') || | ||
| github.event.inputs.run_e2e == 'true' | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -311,7 +311,7 @@ jobs: | |
| matrix: | ||
| target: [compose_yaml_parse, env_interpolation, compose_spec_json_round_trip] | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install nightly Rust + cargo-fuzz | ||
| run: | | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -27,7 +27,7 @@ jobs: | |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 90 | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🏁 Script executed: # First, locate and read the coverage.yml file
cat -n .github/workflows/coverage.ymlRepository: PerryTS/perry Length of output: 5334 Harden checkout in coverage job (pin to commit SHA and disable credential persistence). At line 30, replace the version tag 🧰 Tools🪛 zizmor (1.26.1)[warning] 30-30: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 30-30: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -20,7 +20,7 @@ jobs: | |
| name: github-pages | ||
| url: ${{ steps.deployment.outputs.page_url }} | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🏁 Script executed: cat -n .github/workflows/docs.yml | head -30Repository: PerryTS/perry Length of output: 1396 🏁 Script executed: rg "actions/checkout" .github/workflows/ -A 2 -B 2Repository: PerryTS/perry Length of output: 10533 🌐 Web query:
💡 Result: As of June 23, 2026, pinning GitHub Actions to a full-length commit SHA remains the industry-standard security best practice [1][2][3]. While major version tags (e.g., actions/checkout@v7) are convenient, they are mutable and can be updated by maintainers, potentially introducing breaking changes or malicious code [1][2][3]. Security Implications of Mutable Tags vs. SHA Pinning: 1. Immutability: A commit SHA is a unique, immutable identifier for a specific point in time in an action's codebase [1][2][3]. Tags can be moved or deleted, making them inherently less secure for supply chain integrity [1][2][3]. 2. Enforcement: GitHub allows organization-level policies to enforce full commit SHA pinning [4][5][3]. When enabled, workflows using tags will fail, ensuring compliance across an entire organization [5][3]. 3. Maintenance: To manage the overhead of manual updates, automation tools like Dependabot or Renovate should be used [6][4][5][3]. These tools can automatically open pull requests to update your SHA pins whenever a new version is released, providing the security of immutability with the convenience of automated maintenance [6][5][3]. Specifics for actions/checkout v7: - General Availability: actions/checkout v7 was released on June 18, 2026 [7][8]. It introduces significant security changes, specifically refusing to check out fork pull request code by default in pull_request_target and workflow_run events to prevent "pwn request" vulnerabilities [7][9][6]. - Backporting: GitHub will backport these security protections to all supported major versions (e.g., v4) on July 16, 2026 [7][6]. - Impact on Pinning: If you pin to a floating major tag (e.g., actions/checkout@v4), you will automatically receive this security patch on July 16 [7][6]. If you are pinned to a specific commit SHA, you will not receive the automatic update and must manually update your SHA pin to a v7-compatible version through your standard dependency management process [7][6]. Recommendation: Always pin to the full-length commit SHA of the action version you intend to use, and include the version tag as a comment for readability (e.g., uses: actions/checkout@3df4ab1 # v7.0.0) [1][3]. Use automated tools like Dependabot or Renovate to ensure these pins remain up to date [6][3]. Citations:
Pin The Suggested hardening- - uses: actions/checkout@v7
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v7
+ with:
+ persist-credentials: false🧰 Tools🪛 zizmor (1.26.1)[warning] 23-23: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 23-23: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
| - name: Install mdBook | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,7 +19,7 @@ jobs: | |
| security-audit: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🏁 Script executed: cat .github/workflows/security-audit.ymlRepository: PerryTS/perry Length of output: 2111 Security-audit workflow should pin checkout to commit SHA and disable credential persistence. At Line 22, the 🧰 Tools🪛 zizmor (1.26.1)[warning] 22-22: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 22-22: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
| - uses: dtolnay/rust-toolchain@stable | ||
| - uses: Swatinem/rust-cache@v2 | ||
| with: | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -29,7 +29,7 @@ jobs: | |
| runs-on: macos-14 | ||
| timeout-minutes: 60 | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🏁 Script executed: # First, check if the file exists and read its full content
cat .github/workflows/simctl-tests.ymlRepository: PerryTS/perry Length of output: 3020 🏁 Script executed: # Check other workflows to see if there's a pattern of hardened vs non-hardened checkouts
rg "actions/checkout" .github/workflows/ -A 1Repository: PerryTS/perry Length of output: 3880 🏁 Script executed: # Check if any workflows use hardened checkout (with persist-credentials or SHA pinning)
rg "actions/checkout@" .github/workflows/ -A 2 | grep -E "with:|sha256|persist-credentials"Repository: PerryTS/perry Length of output: 296 🏁 Script executed: # Check what's in those with: blocks for checkout
grep -A 3 "actions/checkout@v7" .github/workflows/node-suite-guard.yml .github/workflows/benchmark.yml | head -20Repository: PerryTS/perry Length of output: 1272 🏁 Script executed: # Get the full checkout configuration from node-suite-guard.yml
sed -n '30,40p' .github/workflows/node-suite-guard.ymlRepository: PerryTS/perry Length of output: 382 🏁 Script executed: # Find the checkout step with its full configuration in node-suite-guard.yml
grep -A 5 "actions/checkout@v7" .github/workflows/node-suite-guard.yml | head -10Repository: PerryTS/perry Length of output: 384 🏁 Script executed: # Check if any workflows pin checkout to a specific SHA
rg "actions/checkout@" .github/workflows/ | grep -v "`@v`"Repository: PerryTS/perry Length of output: 151 Harden checkout in simctl job (commit pin + disable credential persistence). At line 32, use a full SHA for 🧰 Tools🪛 zizmor (1.26.1)[warning] 32-32: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 32-32: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -56,7 +56,7 @@ jobs: | |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 20 | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🟠 Major 🧩 Analysis chain🏁 Script executed: # First, check if the workflow files exist and their sizes
ls -la .github/workflows/test.yml .github/workflows/node-suite-guard.yml 2>/dev/null
echo "---"
# Get line counts to understand file structure
wc -l .github/workflows/test.yml .github/workflows/node-suite-guard.ymlRepository: PerryTS/perry Length of output: 411 🏁 Script executed: # Check the pattern in node-suite-guard.yml for the reference hardening approach
echo "=== Pattern in node-suite-guard.yml ==="
rg "checkout@" .github/workflows/node-suite-guard.yml -A 2 -B 1Repository: PerryTS/perry Length of output: 328 🏁 Script executed: # Check specific lines in test.yml mentioned in the review
echo "=== Checking test.yml lines mentioned in review ==="
for line_num in 59 138 249 431 482 621 757 1134 1195 1257 1306 1433 1600; do
echo "--- Line $line_num ---"
sed -n "${line_num}p" .github/workflows/test.yml
doneRepository: PerryTS/perry Length of output: 871 🏁 Script executed: # Get more context around the checkout action in node-suite-guard.yml
sed -n '1,78p' .github/workflows/node-suite-guard.yml | grep -A 5 "checkout@"Repository: PerryTS/perry Length of output: 384 🏁 Script executed: # Get more context for each occurrence in test.yml to see if persist-credentials is set
for line_num in 59 138 249 431 482 621 757 1134 1195 1257 1306 1433 1600; do
echo "--- Context around Line $line_num ---"
sed -n "$((line_num-2)),$((line_num+3))p" .github/workflows/test.yml
echo ""
doneRepository: PerryTS/perry Length of output: 2660 🏁 Script executed: # Check if there are any checkout actions with persist-credentials or commit SHA in test.yml
echo "=== All checkout actions in test.yml ==="
rg "checkout@" .github/workflows/test.yml -A 3 | head -50Repository: PerryTS/perry Length of output: 1382 🏁 Script executed: # Get the full context of the checkout action in node-suite-guard.yml
cat .github/workflows/node-suite-guard.yml | head -30Repository: PerryTS/perry Length of output: 1325 🏁 Script executed: # Search for any commit SHA pinning patterns in either workflow file
echo "=== Checking for commit SHA patterns ==="
rg "@[a-f0-9]{40}" .github/workflows/test.yml .github/workflows/node-suite-guard.yml || echo "No commit SHA pins found"Repository: PerryTS/perry Length of output: 217 🏁 Script executed: # Get a broader view of test.yml checkout blocks to check all the context
rg -B 2 -A 5 "actions/checkout@v7" .github/workflows/test.yml | head -100Repository: PerryTS/perry Length of output: 2327 🏁 Script executed: # Get the exact checkout block from node-suite-guard.yml
sed -n '35,50p' .github/workflows/node-suite-guard.ymlRepository: PerryTS/perry Length of output: 636 🏁 Script executed: # Verify there are no 'with' blocks or persist-credentials in test.yml checkout actions
echo "=== test.yml checkout actions with full context ==="
rg -B 1 -A 7 "uses: actions/checkout@v7" .github/workflows/test.yml | head -80Repository: PerryTS/perry Length of output: 1984 Add At lines 59, 138, 249, 431, 482, 621, 757, 1134, 1195, 1257, 1306, 1433, and 1600, add a 🧰 Tools🪛 zizmor (1.26.1)[warning] 59-59: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 59-59: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -135,7 +135,7 @@ jobs: | |
| SCCACHE_CACHE_SIZE: "12G" | ||
| CARGO_INCREMENTAL: "0" | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -246,7 +246,7 @@ jobs: | |
| SCCACHE_CACHE_SIZE: "12G" | ||
| CARGO_INCREMENTAL: "0" | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -428,7 +428,7 @@ jobs: | |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 30 | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -479,7 +479,7 @@ jobs: | |
| SCCACHE_CACHE_SIZE: "12G" | ||
| CARGO_INCREMENTAL: "0" | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -618,7 +618,7 @@ jobs: | |
| (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-extended-tests')) | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -754,7 +754,7 @@ jobs: | |
| (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-extended-tests')) | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -1131,7 +1131,7 @@ jobs: | |
| continue-on-error: true | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -1192,7 +1192,7 @@ jobs: | |
| --health-timeout=3s | ||
| --health-retries=20 | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -1254,7 +1254,7 @@ jobs: | |
| (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-extended-tests')) | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -1303,7 +1303,7 @@ jobs: | |
| (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'run-extended-tests')) | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
@@ -1430,7 +1430,7 @@ jobs: | |
| run: | ||
| shell: ${{ matrix.shell }} | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| # macos-14 ships with ~14 GB free disk after the preinstalled Xcode + | ||
| # iOS/tvOS/watchOS simulator runtime images. Several `cargo build | ||
|
|
@@ -1597,7 +1597,7 @@ jobs: | |
| if: github.ref == 'refs/heads/main' | ||
| runs-on: macos-14 | ||
| steps: | ||
| - uses: actions/checkout@v6 | ||
| - uses: actions/checkout@v7 | ||
|
|
||
| - name: Install Rust toolchain | ||
| uses: dtolnay/rust-toolchain@stable | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major
🧩 Analysis chain
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 187
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 1843
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 197
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 2121
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 1996
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 986
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 1087
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 830
🌐 Web query:
GitHub Actions security best practices actions/checkout persist-credentials false SHA pinning💡 Result:
To enhance the security of your GitHub Actions workflows, implementing both
persist-credentials: falseand full-length commit SHA pinning is highly recommended as a standard industry practice [1][2][3][4]. persist-credentials: false Theactions/checkoutaction defaults topersist-credentials: true, which stores your repository credentials (such as theGITHUB_TOKEN) in the local Git configuration (.git/configor~/.git-credentials) of the runner [5][6][2]. This persistence allows any subsequent step or third-party action in the same job to access and potentially misuse these credentials [2][7]. By settingpersist-credentials: false, you prevent the action from writing these credentials to the Git configuration, effectively limiting their exposure to other processes [1][2]. You should only set this totrueif your workflow explicitly requires authenticated Git operations (e.g., pushing commits back to the repository) [2]. SHA Pinning Pinning an action to its full-length commit SHA (e.g.,actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11) is the only way to ensure the action is immutable [8][4]. - Why it matters: Referencing actions by tags (e.g.,@v4) or branches (e.g.,@main) is risky because these references are mutable; a maintainer or an attacker who compromises the repository can force-push new, potentially malicious code to the same tag or branch [8][3][4]. - Enforcement: GitHub now supports organization-level policies that can enforce SHA pinning [9][10][3]. When enabled, any workflow using a non-pinned action will fail, preventing the use of mutable references [9][10]. - Maintenance: To manage the maintenance overhead of manually updating SHAs, it is best practice to use automated dependency tools like Dependabot or Renovate [9][10][3][4]. These tools can automatically open pull requests to update your pinned SHAs when new releases are available [10][3][4]. A common convention is to include the version tag as a comment alongside the SHA for human readability (e.g.,uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1) [3][4]. Top Results: [1][2][9][10][3][4]Citations:
persist-credentialsor change the default tofalseactions/checkout#485🌐 Web query:
GitHub Actions checkout v7 tag vs SHA pinning release workflow security💡 Result:
As of June 23, 2026, actions/checkout v7.0.0 has been released (published June 18, 2026) [1][2]. This release introduces significant security enhancements, most notably safer handling of fork pull requests: by default, the action now refuses to check out code from fork pull requests when a workflow is triggered by pull_request_target or workflow_run, preventing common "pwn request" vulnerabilities [3][4]. To opt in to this behavior, users must explicitly set the new allow-unsafe-pr-checkout: true input after reviewing the associated security risks [3][4]. Regarding security best practices for pinning, it is strongly recommended to pin GitHub Actions to a full 40-character commit SHA rather than a tag (such as
@v7) or branch [5][6][7][8]. Using a tag is inherently mutable; because tags can be moved or retargeted by maintainers (or attackers who have compromised a repository), relying on them exposes workflows to supply chain attacks where malicious code could be injected into an existing version tag [6][8]. A commit SHA is immutable, ensuring that the code executed remains exactly what was reviewed and tested [5][8]. Organizations and teams are encouraged to enforce SHA pinning via GitHub’s allowed actions policy [5][8]. To balance security with maintainability, teams often use automation tools like Dependabot or Renovate with presets (e.g., helpers:pinGitHubActionDigests) to automatically keep pinned commit SHAs up to date while maintaining the human-readable version tag in a comment for visibility [6][7][8]. Example of a secure pinning configuration: - uses: actions/checkout@3df4ab1 # v7.0.0 This approach leverages the immutability of the SHA while documenting the version for clarity [8].Citations:
Pin actions/checkout to commit SHA and disable credential persistence for read-only benchmark jobs.
At lines 39, 207, and 304,
actions/checkout@v7uses tag-only pinning, which is mutable and vulnerable to supply-chain attacks. Additionally, credential persistence is left enabled by default, creating unnecessary token exposure. Since these jobs only read code and do not perform authenticated Git operations, they should pin to a full commit SHA and explicitly disable credentials.Suggested hardening pattern
For line 39-42 (with existing
with:keys):For lines 207 and 304 (no existing
with:block):Use Dependabot or Renovate with SHA pinning helpers to keep the commit references up to date.
Also applies to: 207-207, 304-304
🧰 Tools
🪛 zizmor (1.26.1)
[warning] 39-42: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false
(artipacked)
[error] 39-39: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
🤖 Prompt for AI Agents
Source: Linters/SAST tools