workflow

permissions:

Controls the scopes granted to the automatically generated GITHUB_TOKEN. Can be set at the workflow or job level; the job-level block overrides the workflow default.

permissions:
  <scope>: read|write|none

Common values / subkeys

Value / Subkey Purpose
contents Read/write repository contents (releases, tags)
pull-requests Read or write PR comments, labels, reviews
id-token Set to write for OIDC federation (AWS/Azure/GCP)
packages Push/pull GHCR packages
actions Read workflow runs / cancel runs
read-all | write-all | {} Grant all scopes read/write, or none ({})

Examples

permissions:
  contents: read

Least-privilege default at workflow root

permissions:
  id-token: write
  contents: read

OIDC to cloud provider without repo writes

permissions: {}

Explicitly grant no permissions

jobs:
  release:
    permissions:
      contents: write
      packages: write

Elevate only for the release job

Gotcha

Setting any key restricts unlisted scopes to none; if you set only `id-token: write` you also lose the default contents read unless you add it back.

Related keywords

← All GitHub Actions syntax · Git commands · Cron syntax