Imported from hrzlgnm/actions (
AGENTS.md). Install upstream withnpx skills add hrzlgnm/actions. Copyright stays with the author.
AGENTS.md — hrzlgnm/actions
Project
Collection of reusable GitHub Actions workflows. Published for external consumption via uses: hrzlgnm/actions/.github/workflows/<file>@<tag>.
Conventions
- Conventional commits — All commits follow conventional commits format.
release-pleaseparses them for changelogs. - Semantic versioning — Tags are
vX.Y.Z. - Signed commits — Release PRs and version-bump commits are authored by
github-actions[bot]via the GitHub API (Verified) usingGITHUB_TOKEN. - Pinned dependencies — All actions and tools pinned to SHA commit hashes with version comments (e.g.
# v3). Renovate keeps them updated. - Copyright + SPDX — Every workflow file has
# Copyright 2026 hrzlgnmand# SPDX-License-Identifier: MIT-0headers. ${{ }}forbidden inrun:blocks — Useenvvars instead.- Branch naming —
feat/,fix/,chore/,docs/,refactor/,perf/,renovate/,deps/trigger auto-labeling byci.yml's labeler step. - No
--labelon PR create — Labels are set automatically by thelabel-prjob inci.yml. Do not pass--labeltogh pr create. - README documents every action — Adding a shared action or reusable workflow requires a
README.mdsection with aQuick Startexample (plus an inputs table when it takes inputs). CI does not enforce this; reviewers must. - Release-please JSON formatting —
release-please-config.jsonand.release-please-manifest.jsonmust be canonical 2-space JSON with a trailing newline. Check with:python3 -c 'import json,sys; sys.exit(any(open(f).read() != json.dumps(json.load(open(f)), indent=2) + "\n" for f in ["release-please-config.json", ".release-please-manifest.json"]))'.
Workflows
| File | Trigger | Purpose |
|---|---|---|
ci.yml |
push/PR/schedule | Main CI: detect changes, label PRs, typos, actionlint, alls-green gate |
release.yml |
push main | release-please: open/update Release PR, tag, create draft release |
typos-reusable.yml |
workflow_call | Spell check with crate-ci/typos |
shell-lint-reusable.yml |
workflow_call | Install pinned shellcheck/shfmt and lint shell scripts |
actionlint-reusable.yml |
workflow_call | Lint workflow files |
docker-reusable.yml |
workflow_call | Build & push changed Dockerfiles to GHCR |
retry-failed-ci-reusable.yml |
workflow_call | Retry failed jobs from a given workflow |
Lint
actionlint .github/workflows/*.yml
typos .
Workflow
After making a change, commit, push, and create a PR — then stop. Don't wait for CI or follow up.
Release process
Pushing to main triggers release-please, which opens (or updates) a
Release PR from github-actions[bot]. CI runs on the Release PR are
approved by the approve-release-pr job. Merging the Release PR tags
the release (vX.Y.Z, force-created) and creates a draft GitHub
release alongside it, which the publish job publishes automatically.
Never publish a draft by hand.