Skip to content

ci: lint workflows with actionlint - #23

Merged
smoochy merged 2 commits into
mainfrom
claude/actionlint-ci
Aug 23, 2026
Merged

ci: lint workflows with actionlint#23
smoochy merged 2 commits into
mainfrom
claude/actionlint-ci

Conversation

@smoochy

@smoochy smoochy commented Aug 23, 2026

Copy link
Copy Markdown
Owner

Closes #22.

Problem

A change to any workflow under .github/workflows/ had no automated check. A YAML parse proves the file loads, but it does not catch what actionlint exists to find: unknown context properties, invalid ${{ }} expressions, undefined step or job outputs, wrong runs-on labels, and shell problems inside run: blocks. #21 had to be verified by hand, event name by event name, for exactly this reason.

Change

One new workflow, lint_workflows.yaml. It runs the upstream rhysd/actionlint container over the repository on push to main, on pull_request, and on workflow_dispatch, filtered to .github/workflows/** so it stays quiet for unrelated changes.

The image tag is pinned to 1.7.12 rather than latest, so a new upstream release cannot turn a green pull request red without a commit here.

The workflow lints itself: this pull request touches the filtered path, so its own run is the acceptance evidence, and it also lints the three existing workflows for the first time.

What is not in this change

No local installation instructions. actionlint in CI does not depend on whoever edits a workflow having the tool installed, which is the half of #22 that actually makes the check reliable. A local setup note can follow if it turns out to be wanted.

🤖 Generated with Claude Code

smoochy and others added 2 commits August 24, 2026 00:00
Workflow changes had no automated check: a YAML parse proved the file
loads, but nothing caught unknown context properties, invalid
expressions, undefined step outputs or shell problems inside run blocks.

Adds a job running the upstream actionlint container over the repository
on every push and pull request that touches .github/workflows. The
workflow lints itself, so its own pull-request run is the proof.

Closes #22

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The first run reported 19 findings, all from shellcheck and none from
actionlint itself. SC2016 fires on the single-quoted jq programs, which
must stay literal. SC2129 is pure style. SC2155 warns about a masked
return value in blocks that run without set -e and already fall back
with || echo "". Everything else stays enabled.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@smoochy
smoochy merged commit ef8016f into main Aug 23, 2026
3 checks passed
@smoochy
smoochy deleted the claude/actionlint-ci branch August 23, 2026 22:11
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.

No local verification for GitHub Actions workflow changes

1 participant