pinact is a CLI to edit GitHub Workflow and Composite action files and pin versions of Actions and Reusable Workflows. pinact can also update their versions and
pinact is a CLI to edit GitHub Workflow and Composite action files and pin versions of Actions and Reusable Workflows. pinact can also update their versions and
Install | Usage | Configuration | Agent Skill
pinact is a CLI to pin GitHub Actions and Reusable Workflows. pinact can also update their versions and verify version comments.
[!NOTE] If you are a coding agent and pinact is installed, run
pinact docs listto list the documentation andpinact docs showto read it before answering questions about pinact or troubleshooting its errors. The embedded documentation matches the installed version. If pinact isn't installed, read the documents listed in Documentation.
…
Pin the actions of a repository:
pinact run
Without an argument, pinact pins the workflow files and the action files of the repository; Usage lists them and shows how to pin actions written in a document such as README.md.
pinact run --check
The run exits with a non-zero code when something needs pinning. Checking without fixing covers --check, --fix=false, and the offline check --no-api.
export GITHUB_TOKEN=
pinact can also read the token from the OS keyring or from ghtkn.
pinact init
The configuration file is optional. It says which files to pin, which actions to ignore, and what the default minimum release age is. See Configuration File.
pinact ships a single skill. It holds no documentation of its own: it tells the coding agent to read the documentation embedded in the pinact binary with pinact docs list and pinact docs show , so the agent always reads the documentation of the version it is actually running.
gh skill install suzuki-shunsuke/pinact pinact
The documentation is split by topic under docs/. These documents are embedded in the pinact binary, so pinact docs list and pinact docs show (pinact >= v5.0.0) serve exactly what is listed below, matching the version that is installed. They are the single source of truth, shared between this README, the embedded documentation, and the skill, so there's no duplicated maintenance.
pinact docs list # The name and the description of every document, as JSON
pinact docs show config # One document
pinact docs show codes/005 # A document in a subdirectory is named by its path
--check, --fix=false, the offline check --no-api, and verifying version comments.--update and the minimum release age (cooldown).--branch-to-tag, which opts a branch reference in to being pinned.--include and --exclude.--format sarif, reviewdog, and GitHub code scanning.--diff-file, to introduce pinact gradually.PINACT_GITHUB_TOKEN, the ghtkn integration, and the OS keyring.--verify-comment checks it.USAGE.md is the help of every command, generated from the CLI itself.
https://github.com/suzuki-shunsuke/pinact-action
We develop GitHub Actions to pin GitHub Actions and reusable workflows by pinact.
It is a good manner to pin GitHub Actions versions by commit hash. GitHub tags are mutable so they have a substantial security and reliability risk.
See also Security hardening for GitHub Actions - GitHub Docs
Pinning an action to a full length commit SHA is currently the only way to use an action as an immutable release. Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, as they would need to generate a SHA-1 collision for a valid Git object payload
:thumbsup:
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
:thumbsdown:
uses: actions/cache@v3
uses: actions/[email protected]
The Renovate preset helpers:pinGitHubActionDigestsToSemver is useful, but pinact is still useful: You can use both the preset and pinact together.
No open issues yet, or sync has not completed.