Skip to content

Add explicit least-privilege permissions to read-only CI workflows#657

Open
arpitjain099 wants to merge 1 commit into
microsoft:mainfrom
arpitjain099:security/workflow-permissions
Open

Add explicit least-privilege permissions to read-only CI workflows#657
arpitjain099 wants to merge 1 commit into
microsoft:mainfrom
arpitjain099:security/workflow-permissions

Conversation

@arpitjain099
Copy link
Copy Markdown

What

Adds a workflow-level permissions: contents: read block to seven workflows that currently declare no permissions at all:

  • build.yaml
  • code-formatting-check.yaml
  • docs.yaml
  • local-development-makefile.yaml
  • test.yaml
  • typos.yaml
  • version-checks.yaml

Why

All seven are pure CI workflows — build, format check, docs build, makefile compile, tests, typos spell check, and version consistency check. None push commits, create releases, comment on PRs, or call any GitHub API endpoint that needs write scopes. The GITHUB_TOKEN for these workflows only needs read access for the checkout step, so declaring contents: read at the workflow level documents the minimum scope and removes reliance on the repository default token permissions.

This matches the existing project pattern: workflows that need elevated scopes (cargo-audit.yaml, codeql.yaml, github-dependency-review.yaml, lint.yaml) already declare them at the job level. This PR fills the gap for the read-only workflows that were leaving scope implicit.

Verification

  • YAML validity: python3 -c "import yaml; yaml.safe_load(open(...))" passes on each of the seven files.
  • No change to jobs, steps, or matrix; only the workflow-level permissions: block is added.

Reference

Seven workflows currently declare no permissions block at all, which leaves
GITHUB_TOKEN scope dependent on the repository default. Adding an explicit
workflow-level contents: read documents the minimum scope needed and matches
GitHub's defense-in-depth guidance.

Workflows touched (all are pure CI - build, lint, docs, tests, spell check,
version consistency check). None push commits, create releases, or call
write APIs:
  - build.yaml
  - code-formatting-check.yaml
  - docs.yaml
  - local-development-makefile.yaml
  - test.yaml
  - typos.yaml
  - version-checks.yaml

Existing workflows that need elevated scopes (cargo-audit, codeql,
github-dependency-review, lint) already declare per-job permissions; this PR
does not modify those.

Signed-off-by: Arpit Jain <arpitjain099@gmail.com>
Copilot AI review requested due to automatic review settings May 13, 2026 06:09
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR tightens GitHub Actions security by explicitly setting least-privilege GITHUB_TOKEN permissions (contents: read) for CI workflows that previously relied on the repository default token permissions.

Changes:

  • Add workflow-level permissions: contents: read to 7 CI workflows to make read-only intent explicit.
  • Align these workflows with the repo’s existing pattern of explicitly declaring permissions (especially for workflows that need elevated scopes).

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
.github/workflows/build.yaml Adds explicit workflow-level contents: read token permissions.
.github/workflows/code-formatting-check.yaml Adds explicit workflow-level contents: read token permissions.
.github/workflows/docs.yaml Adds explicit workflow-level contents: read token permissions.
.github/workflows/local-development-makefile.yaml Adds explicit workflow-level contents: read token permissions.
.github/workflows/test.yaml Adds explicit workflow-level contents: read token permissions.
.github/workflows/typos.yaml Adds explicit workflow-level contents: read token permissions.
.github/workflows/version-checks.yaml Adds explicit workflow-level contents: read token permissions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +12 to +14
permissions:
contents: read

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented May 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 78.69%. Comparing base (ebc705a) to head (45fcee0).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #657   +/-   ##
=======================================
  Coverage   78.69%   78.69%           
=======================================
  Files          25       25           
  Lines        5234     5234           
  Branches     5234     5234           
=======================================
  Hits         4119     4119           
  Misses        995      995           
  Partials      120      120           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@arpitjain099 arpitjain099 force-pushed the security/workflow-permissions branch from 45fcee0 to bcb5fff Compare May 13, 2026 17:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants