GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Fix findings of the workflow linters by ondrejmirtes · Pull Request #341 · phpstan/phpdoc-parser

Conversation

@ondrejmirtes

@ondrejmirtes ondrejmirtes commented Nov 1, 2026

Copy link
Copy Markdown
Member

Fixes what the linters in lint-workflows.yml report. I ran each one locally the way CI runs it: actionlint 1.7.12 with shellcheck, octoscan through the action's own entrypoint.sh with the same inputs, poutine 1.1.4, and zizmor 1.31.1 with --persona=auditor.

Linter Before After
actionlint 0 0
octoscan 6 0
poutine 25 0
zizmor (auditor) 68 0 (2 ignored inline, with reasons)

What changed

  • Credentials: checkouts set persist-credentials: false, except in create-tag.yml. There, rickstaa/action-create-tag pushes the tag with the persisted PHPSTAN_BOT_TOKEN, and only a tag pushed by that token, not by GITHUB_TOKEN, triggers release.yml. This is now explicit and commented. Every other step that writes uses its own token through the API or an input.
  • Permissions: every workflow defaults to permissions: {}, and each job is granted what it uses, with a comment. The default token was already read-only (contents, metadata, packages: read), so in practice only the unused packages: read is dropped.
  • Concurrency: in PR and push workflows, a new push to a pull request cancels that PR's previous run. Each push to 2.4.x still gets its own run. Release workflows (tags, releases, dispatch, schedule, merge of 1.22.x) queue new runs with cancel-in-progress: false instead of cancelling.
  • Template injection: matrix.branch in apiref.yml and github.ref_name in send-pr.yml reach the shell through env.
  • Job names: added to the jobs that had none. No required status checks depend on job names.
  • Release: softprops/action-gh-release is replaced by gh release create "$TAG" --verify-tag --title "$TAG" --notes "$CHANGELOG", using the same bot token. peter-evans/create-pull-request stays, because it commits, pushes a branch and opens the PR in one step. Its zizmor superfluous-actions finding is ignored inline.
  • actionlint download: a pinned release tarball whose checksum is verified, instead of bash <(curl …/main/…).

Suppressions (please review)

  • .github/poutine.yml skips github_action_from_unverified_creator_used for an explicit list of the pinned actions we use, such as setup-php, lock-threads, and the release/tag actions.
  • .github/zizmor.yml allows the repository secrets used outside environments (secrets-outside-env). Fixing this properly means moving the secrets into dedicated environments in the repository settings first.
  • octoscan's dangerous-checkout flags every ref that isn't made of letters and dashes only, so 2.3.x, 2.x, a pinned SHA and matrix.branch all count. octoscan can only ignore findings by message, not by file, so this message is now ignored globally. zizmor and poutine still check for checkouts of untrusted code.

The release workflows (release, send-pr, create-tag, toot/tweet) can't run from a PR, so the release changes are verified only by reading the actions' sources.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@ondrejmirtes
Fix findings of the workflow linters
f94e7f1
actionlint, octoscan, poutine and zizmor (auditor persona) now report nothing.

- Check out without persisting credentials, except in create-tag, where
  rickstaa/action-create-tag pushes the tag with the bot token so that the
  push triggers release.yml
- Default every workflow to no permissions and grant each job what it uses
- Add concurrency: superseded pull request runs are cancelled, pushes to
  2.4.x each keep their own run, and release workflows are queued, not cancelled
- Pass matrix.branch and github.ref_name to scripts through env
- Name the remaining anonymous jobs
- Create the release with gh release create instead of softprops/action-gh-release
- Download a pinned actionlint release and verify its checksum instead of
  piping a script from main into bash
- Allow the reviewed actions from unverified creators in .github/poutine.yml
  and the repository secrets used outside environments in .github/zizmor.yml
- Ignore octoscan's dangerous-checkout message: every flagged ref is a fixed
  branch or commit, and octoscan cannot ignore findings per file

Amp-Thread-ID: https://ampcode.com/threads/T-01a197a6-ea3e-77f5-80d6-1bebc3252d55
@ondrejmirtes
ondrejmirtes merged commit eb688ae into 2.4.x Nov 7, 2026
65 of 66 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@ondrejmirtes
ondrejmirtes deleted the fix-workflow-lint-findings branch November 7, 2026 10:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@ondrejmirtes
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.