Skip to content

Commit d7a63a5

Browse files
Record the caller permission boundary
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 5a495ce commit d7a63a5

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

docs/content/reference/process-workflow-fleet-standard.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,7 @@ concurrency:
110110
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
111111
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
112112

113-
permissions:
114-
contents: write
115-
pull-requests: write
116-
statuses: write
117-
pages: write
118-
id-token: write
113+
permissions: {}
119114

120115
jobs:
121116
Process-PSModule:
@@ -137,7 +132,7 @@ decisions before canonical guides, templates, or consumer workflows adopt it:
137132
| Trigger ownership | The caller owns manual, schedule, default-branch push, and pull-request triggers. | Move some trigger policy into separate workflows or omit selected event classes. |
138133
| Pull-request activities | Keep all six listed activity types. | Reduce the activity list if a v8 behavior is intentionally unsupported. |
139134
| Concurrency | Use the workflow plus PR-number-or-full-ref key and cancel only pull-request runs. | Selected for the candidate: PR reconciliation must be resumable; non-PR runs serialize by full ref. |
140-
| Permissions | Declare the five current scopes at workflow level. | Introduce settings-based least-privilege profiles or split read-only validation from release work. |
135+
| Permissions | Set caller permissions to `{}` and use scoped GitHub App tokens inside the reusable workflow. | Selected for the candidate; built-in `GITHUB_TOKEN` authority must not be required. |
141136
| Fork behavior | Skip fork-originated pull requests in this credentialed wrapper. | Add a separate secret-free workflow or define another supported fork-validation design. |
142137
| Credentials | Explicitly map the three v8 credentials. | Define a narrower credential profile for repositories that cannot publish. |
143138
| Optional surface | Permit only documented `TestData`, workflow inputs, schedule timing, and presentation metadata. | Allow additional extension points after naming and compatibility rules are agreed. |
@@ -172,7 +167,7 @@ fleet campaign. Branch names, `latest`, floating minor tags, and unqualified tar
172167
| Manual dispatch | Keep `workflow_dispatch`. | Provides the documented default-branch manual release and recovery path. |
173168
| Schedule | Keep a scheduled health run. | Exercises current dependencies even when repository code is unchanged. |
174169
| Concurrency | Use the PR-number-or-ref key and cancel only pull-request runs. | New PR events supersede older declarative reconciliation runs; same-ref push, dispatch, and schedule runs serialize without cancellation. |
175-
| Permissions | Declare the five documented permissions explicitly. | The called workflow cannot elevate caller permissions. |
170+
| Permissions | Set top-level `permissions: {}` and grant no caller-job permissions. | Repository access and mutations use narrowly scoped GitHub App installation tokens created inside the reusable workflow. |
176171
| Fork guard | Skip pull requests whose head repository differs from `github.repository`. | GitHub withholds the required repository secrets from fork pull requests. |
177172
| Reference | Use the intended internal floating major tag (`v8`) after tag governance is enforced. | Compatible owned releases roll out centrally; breaking releases require a new major and campaign. |
178173
| Credentials | Explicitly map the three required secrets. | Satisfies the `v7+` contract and prevents unrelated secret inheritance. |
@@ -205,7 +200,13 @@ an approved structure:
205200
- a concurrency key other than workflow plus PR number or full ref, or cancellation behavior other than pull-request-only;
206201
- trigger-level path filters that bypass Process-PSModule important-file evaluation;
207202
- unrelated additional jobs in the caller wrapper;
208-
- omitted documented permissions without a verified settings-based least-privilege profile.
203+
- any built-in `GITHUB_TOKEN` permission granted by the caller.
204+
205+
The current v8 implementation still uses built-in token authority for checkout, linter status/reporting, and the standard
206+
GitHub Pages deployment action. Before adopting the empty-permissions caller, each job must create a narrowly scoped
207+
GitHub App installation token before checkout and pass it explicitly to checkout, GitHub CLI, and reporting actions.
208+
Pages publication must either move to an App-authenticated deployment path or document the unavoidable `pages`/OIDC
209+
exception if the standard Pages action remains.
209210

210211
Fork-originated pull requests are skipped by the candidate caller because reusable-workflow caller jobs cannot select a
211212
GitHub Environment and repository secrets are unavailable to forks. Supporting fork CI requires a separate, secret-free,

0 commit comments

Comments
 (0)