From 1c970b1f85d4339ae74de8d7f0120782293f15f1 Mon Sep 17 00:00:00 2001 From: anandgupta42 Date: Sun, 11 Oct 2026 21:23:51 -0700 Subject: [PATCH] chore: pin least-privilege token permissions in CI workflow `ci.yml` runs on `pull_request` and executes code from the PR branch (tests, builds, scripts) but declared no workflow-level `permissions`, so its token scope depended on the repository's default-token setting. - add top-level `permissions: contents: read` - `changes` job keeps `pull-requests: read` for `dorny/paths-filter` - set `persist-credentials: false` on the `actions/checkout` steps of the jobs that run PR code (no later step in those jobs needs git credentials) No action versions, steps, or ordering changed. Co-Authored-By: Claude Opus 5.5 (1M context) --- .github/workflows/ci.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cf965faa5..b25639347 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,9 @@ concurrency: group: ci-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + jobs: # --------------------------------------------------------------------------- # Detect which areas of the codebase changed to skip unaffected jobs. @@ -18,6 +21,9 @@ jobs: changes: name: Detect Changes runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read timeout-minutes: 2 outputs: typescript: ${{ steps.filter.outputs.typescript }} @@ -181,6 +187,8 @@ jobs: timeout-minutes: 60 steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2 with: @@ -429,6 +437,8 @@ jobs: steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2 with: @@ -524,6 +534,8 @@ jobs: timeout-minutes: 5 steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2 with: @@ -550,6 +562,8 @@ jobs: timeout-minutes: 10 steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - name: Install Pester shell: pwsh @@ -579,6 +593,8 @@ jobs: timeout-minutes: 15 steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2 with: @@ -715,6 +731,8 @@ jobs: timeout-minutes: 10 steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false - uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2 with: @@ -758,6 +776,7 @@ jobs: steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: + persist-credentials: false fetch-depth: 0 - uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2