ilmers_corner
A CLI for browsing and generating hashpins for GitHub Actions.
Install
pip install ilmers_corner
Usage
ilmers_corner checkout # search by name
ilmers_corner actions/checkout # exact repository, opens the picker
ilmers_corner actions/checkout@v4 # pin the latest v4.x.y, no prompt
ilmers_corner actions/checkout@v4.2.2 # pin that exact version
Options
| Flag | Effect |
|---|---|
--pre |
include prereleases (rc, beta, alpha) |
--major-tags |
include floating tags like v4, marked moving tag |
--limit N |
maximum tags to fetch (default 100) |
--token |
GitHub token (defaults to $GITHUB_TOKEN) |
--no-advisories |
skip the security advisory lookup (saves one request) |
--clear-cache |
delete cached API responses |
Security signals
Versions are annotated with two facts, so you can see what you are pinning:
v45.0.7 a284dc1814e3 2025-03-15 ⚠ high advisory
v45.0.4 4edd678ac3f8 2024-11-05 ⚠ high advisory unsigned
v46.0.1 2f7c5bfce283 2025-03-16
- Advisories — versions covered by a published GitHub security advisory are flagged, and the selected version prints the GHSA id and the first patched version to stderr. One request covers every version.
- Signatures — commits without a verified signature are marked
unsigned. This costs nothing extra; it rides along in the request that fetches the date.
Neither of these proves a version is safe. The advisory database lags real compromises, often by weeks, so no warning means only that nothing has been published yet. Unsigned commits are common in perfectly healthy repositories. Treat both as prompts to look closer, never as a clearance.
The limits of advisory data are worth seeing concretely. During the March 2025
tj-actions/changed-files compromise the attacker repointed existing version
tags at a backdoored commit, which is why v45.0.5 through v45.0.9 all resolve to
the same SHA. The advisory covers <= 45.0.7, so v45.0.8 and v45.0.9 carry that
same poisoned commit without being flagged — advisories describe version
numbers, not the commits tags happen to point at. A pinned SHA is what makes
that visible and stops it from changing under you.
Rate limits
Unauthenticated GitHub allows 60 requests/hour, and only 10/hour for search. Two things keep that workable:
- Passing an exact
owner/nameskips search entirely, so the scarce search quota is only spent on genuine name lookups. - Responses are cached on disk. Repeat lookups cost zero requests.
For heavier use, set a token to raise the limit to 5000/hour:
export GITHUB_TOKEN=ghp_...
Notes on correctness
Dates come from the commit, not the release. GitHub's published_at records
when the release entry was written, which can be rewritten in bulk — as of this
writing actions/checkout reports v7.0.1 and v3.7.0 as published six minutes
apart. The commit date is the one that reflects reality.
SHAs come from the /tags endpoint, which returns the dereferenced commit even
for annotated tags. Reading git/ref/tags/... instead would return the tag
object's own SHA, which GitHub Actions cannot resolve when pinned.
Why does this exist?
Great tools like pinact exist that automates the process of hashpinning Actions in workflow files. This tool offers something in cases where:
- The developer wants to browse versions and release dates.
- The developer wants to check out security signals (verified signatures, advisories from GitHub Advisory Database).
- The hashpin is needed outside of workflow files.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ilmers_corner-0.1.1.tar.gz.
File metadata
- Download URL: ilmers_corner-0.1.1.tar.gz
- Upload date:
- Size: 377.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63806ba22aee0b2cca28313b1e7cbc4bce0ec1f67af2e1c7831efe83ae6ca2c0
|
|
| MD5 |
e8e1ac5b292c0a7447d0aad9777adb4f
|
|
| BLAKE2b-256 |
956c0126be2b140bfacb01c68d40ae161bb323de3f4242f4a12ad57884dc7258
|
Provenance
The following attestation bundles were made for ilmers_corner-0.1.1.tar.gz:
Publisher:
publish.yml on anderslatif/ilmers_corner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ilmers_corner-0.1.1.tar.gz -
Subject digest:
63806ba22aee0b2cca28313b1e7cbc4bce0ec1f67af2e1c7831efe83ae6ca2c0 - Sigstore transparency entry: 2335790714
- Sigstore integration time:
-
Permalink:
anderslatif/ilmers_corner@cf379859bfd00c0bab478db2392fca6a9b95da72 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/anderslatif
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cf379859bfd00c0bab478db2392fca6a9b95da72 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ilmers_corner-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ilmers_corner-0.1.1-py3-none-any.whl
- Upload date:
- Size: 18.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a43de1992de0f288fcbbac844a1e996d2e26e518db14567f22f08078c7be406c
|
|
| MD5 |
ad140dcde63d900dfc87e750eb98534b
|
|
| BLAKE2b-256 |
a8fa9bcb4e73cb888634c720ff59b68acfb960d6c4d107b913038d75f81b9ed3
|
Provenance
The following attestation bundles were made for ilmers_corner-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on anderslatif/ilmers_corner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ilmers_corner-0.1.1-py3-none-any.whl -
Subject digest:
a43de1992de0f288fcbbac844a1e996d2e26e518db14567f22f08078c7be406c - Sigstore transparency entry: 2335790806
- Sigstore integration time:
-
Permalink:
anderslatif/ilmers_corner@cf379859bfd00c0bab478db2392fca6a9b95da72 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/anderslatif
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cf379859bfd00c0bab478db2392fca6a9b95da72 -
Trigger Event:
release
-
Statement type: