kakakakakku blog

Weekly Tech Blog: Keep on Learning!

actionlint: GitHub Actions ワークフローの構文をチェックしよう

actionlint を使うと GitHub Actions ワークフローの構文をチェックできる✅️ また run: に指定するシェルを ShellCheck でチェックすることもできて便利❗️actionlint は仕事でも個人プロジェクトでもよく使っているけど,実は今までブログで紹介していなかったな〜と思って,改めてまとめておこうと思った.

github.com

ちなみに 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

github.com

あと actionlint にはウェブですぐに試せる playground もあるのでおすすめ \( 'ω')/

rhysd.github.io

実行

actionlint コマンドはデフォルトでリポジトリ内のすべてのワークフローをチェックしてくれるため,基本的にはそのまま実行すれば OK👌

$ actionlint

チェックできる項目は以下にまとまっている📝

github.com

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
                }
            ]
        }
    ]
}

動作確認

意図的にエラーが出るようにしてみた😇

  • branchebranches
  • echo ${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 を使う例は以下の記事にまとめてある❗️

kakakakakku.hatenablog.com

既にプルリクエストは出ているから merge されるとイイな〜💡

github.com