Skip to content

Commit 0838b30

Browse files
ci: apply least-privilege permissions to all workflows (#578)
* ci: apply least-privilege permissions to all workflows Move write permissions from workflow-level to job-level to satisfy OpenSSF Scorecard Token-Permissions check. This follows the principle of least privilege - workflows default to read-all, and only specific jobs that need write access declare it. Changed workflows: - claude.yml: id-token: write moved to job level - claude-code-review.yml: consistent read-all at workflow level - codeql.yml: security-events: write moved to job level - labeler.yml: pull-requests: write moved to job level - pr-tests.yml: pull-requests: write, statuses: write moved to job level - release.yml: contents: write already at job level, workflow to read-all - stale.yml: issues: write, pull-requests: write moved to job level - unity-tests.yml: checks: write moved to job level Signed-off-by: Jason Xu <jasonxudeveloper@gmail.com> Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net> * revert: keep claude-code-review.yml unchanged to pass workflow validation Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net> * revert: restore pr-tests.yml and unity-tests.yml to master GitHub Actions doesn't allow job-level permissions to exceed workflow-level permissions. These workflows need write permissions at workflow level because multiple jobs require them. Signed-off-by: Jason Xu <jasonxudeveloper@gmail.com> Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net> * fix(ci): ensure Unity Tests status is created for all scenarios - Rename skip-tests job to 'Skip Unity Tests' for clarity - Add commit status creation when tests are skipped - Both run and skip scenarios now create 'Unity Tests' status This ensures the required status check works regardless of whether tests actually run or are skipped due to no relevant changes. Signed-off-by: Jason Xu <jasonxudeveloper@gmail.com> Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net> --------- Signed-off-by: Jason Xu <jasonxudeveloper@gmail.com> Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
1 parent 7117f00 commit 0838b30

6 files changed

Lines changed: 30 additions & 17 deletions

File tree

.github/workflows/claude.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@ on:
1010
pull_request_review:
1111
types: [submitted]
1212

13-
permissions:
14-
contents: read
15-
pull-requests: read
16-
issues: read
17-
id-token: write
13+
permissions: read-all
1814

1915
jobs:
2016
claude:

.github/workflows/codeql.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ on:
1313
- cron: '0 0 * * 0'
1414
workflow_dispatch:
1515

16-
permissions:
17-
contents: read
18-
security-events: write
16+
permissions: read-all
1917

2018
jobs:
2119
changes:
2220
name: Detect Changes
2321
runs-on: ubuntu-latest
22+
permissions:
23+
contents: read
2424
# Only run path detection for push/pull_request events
2525
if: github.event_name == 'push' || github.event_name == 'pull_request'
2626
outputs:

.github/workflows/labeler.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ on:
44
pull_request_target:
55
types: [opened, synchronize, reopened]
66

7-
permissions:
8-
contents: read
9-
pull-requests: write
7+
permissions: read-all
108

119
jobs:
1210
label:
1311
runs-on: ubuntu-latest
12+
permissions:
13+
contents: read
14+
pull-requests: write
1415
steps:
1516
- name: Apply labels based on changed files
1617
uses: actions/labeler@v5

.github/workflows/pr-tests.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,30 @@ jobs:
4646
secrets: inherit
4747

4848
skip-tests:
49-
name: Run Unity Tests
49+
name: Skip Unity Tests
5050
needs: changes
5151
if: needs.changes.outputs.should_test == 'false'
5252
runs-on: ubuntu-latest
53+
permissions:
54+
statuses: write
5355
steps:
5456
- name: Skip tests
5557
run: echo "No relevant changes detected, skipping tests"
5658

59+
- name: Set PR check status (skipped)
60+
uses: actions/github-script@v7
61+
with:
62+
script: |
63+
await github.rest.repos.createCommitStatus({
64+
owner: context.repo.owner,
65+
repo: context.repo.repo,
66+
sha: context.payload.pull_request.head.sha,
67+
state: 'success',
68+
target_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`,
69+
description: 'Skipped - no relevant changes',
70+
context: 'Unity Tests'
71+
});
72+
5773
upload-coverage:
5874
name: Upload Coverage
5975
needs: [changes, run-tests]

.github/workflows/release.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ on:
2626
required: false
2727
type: string
2828

29-
permissions:
30-
contents: write
29+
permissions: read-all
3130

3231
jobs:
3332
validate:

.github/workflows/stale.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ on:
66
- cron: '0 0 * * *'
77
workflow_dispatch:
88

9-
permissions:
10-
issues: write
11-
pull-requests: write
9+
permissions: read-all
1210

1311
jobs:
1412
stale:
1513
runs-on: ubuntu-latest
14+
permissions:
15+
issues: write
16+
pull-requests: write
1617
steps:
1718
- name: Mark stale issues and PRs
1819
uses: actions/stale@v9

0 commit comments

Comments
 (0)