From f0c6f6ca679c1608eb63241795e2302468cd921d Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Mon, 13 Apr 2026 14:18:40 +0000 Subject: [PATCH] chore(ci): harden GitHub Actions workflow - Pin all actions to SHA hashes (via pinact) - Add top-level permissions: {} (default deny) - Add permissions: {} to ci-gate job - Add persist-credentials: false to both checkout steps Co-Authored-By: horsefacts <109845214+horsefacts@users.noreply.github.com> --- .github/workflows/verify.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 05646db0..dff5dc4a 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -5,6 +5,8 @@ on: pull_request: workflow_dispatch: +permissions: {} + concurrency: group: verify-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true @@ -19,16 +21,18 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false - name: Setup pnpm - uses: pnpm/action-setup@v5 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: run_install: false version: 10.28.1 - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: 24.12.0 cache: pnpm @@ -54,6 +58,7 @@ jobs: if: always() needs: [check, e2e] runs-on: ubuntu-latest + permissions: {} steps: - run: | if [[ "${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}" == "true" ]]; then @@ -77,16 +82,18 @@ jobs: steps: - name: Clone repository - uses: actions/checkout@v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false - name: Setup pnpm - uses: pnpm/action-setup@v5 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: run_install: false version: 10.28.1 - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: 24.12.0 cache: pnpm @@ -99,7 +106,7 @@ jobs: run: pnpm run test:e2e --shard=${{ matrix.shard }}/3 - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: ${{ !cancelled() }} with: name: playwright-report-${{ matrix.shard }}