
actionlint を使うと GitHub Actions ワークフローの構文をチェックできる✅️ また run: に指定するシェルを ShellCheck でチェックすることもできて便利❗️actionlint は仕事でも個人プロジェクトでもよく使っているけど,実は今までブログで紹介していなかったな〜と思って,改めてまとめておこうと思った.
ちなみに actionlint は「GitHub CI/CD 実践ガイド」の第4章でも紹介されている📕
セットアップ
actionlint コマンドをローカル環境で実行するなら Homebrew で OK👌
$ brew install actionlint $ actionlint --version 1.7.7 installed by building from source built with go1.23.5 compiler for darwin/arm64
あと actionlint にはウェブですぐに試せる playground もあるのでおすすめ \( 'ω')/
実行
actionlint コマンドはデフォルトでリポジトリ内のすべてのワークフローをチェックしてくれるため,基本的にはそのまま実行すれば OK👌
$ actionlint
チェックできる項目は以下にまとまっている📝
GitHub Actions
actionlint は GitHub Actions に組み込むのも簡単で,以下のようなワークフローになる.あと GitHub Actions の Problem Matchers にも対応していて,プルリクエストに直接コメントすることもできる❗️
👾 .github/workflows/actionlint.yml
name: actionlint on: pull_request: branches: - main paths: - ".github/workflows/**/*.yml" jobs: actionlint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run actionlint run: | echo "::add-matcher::.github/actionlint-matcher.json" bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash) ./actionlint -color
👾 .github/actionlint-matcher.json
{ "problemMatcher": [ { "owner": "actionlint", "pattern": [ { "regexp": "^(?:\\x1b\\[\\d+m)?(.+?)(?:\\x1b\\[\\d+m)*:(?:\\x1b\\[\\d+m)*(\\d+)(?:\\x1b\\[\\d+m)*:(?:\\x1b\\[\\d+m)*(\\d+)(?:\\x1b\\[\\d+m)*: (?:\\x1b\\[\\d+m)*(.+?)(?:\\x1b\\[\\d+m)* \\[(.+?)\\]$", "file": 1, "line": 2, "column": 3, "message": 4, "code": 5 } ] } ] }
動作確認
意図的にエラーが出るようにしてみた😇
branche→branchesecho ${GITHUB_ACTION_REPOSITORY}→echo "${GITHUB_ACTION_REPOSITORY}"

permissions.models は未サポート
actionlint は現状まだ permissions.models をサポートしてなく,たとえば以下のような権限を実装すると unknown permission scope "models". というエラーが出てしまう.
permissions: contents: read models: read pull-requests: write
permissions.models を使う例は以下の記事にまとめてある❗️
既にプルリクエストは出ているから merge されるとイイな〜💡
