はじめに
GitHub CI/CD実践ガイドにも紹介されている actionlint を実装して使ってみました。
actionlintについて
actionlint は ドッグ さんという方が作った GitHub Actions のワークフローファイルを静的解析してくれるツールです。YAMLを書いているとあるあるな、しょーもないミスを早期検知してくれるものになります。
実装
- 弊チームでは、YAMLの拡張子は
.yml
で統一しているので.yaml
は対象にしていません - シェルチェックの一部を
SHELLCHECK_OPTS
キーワードで対象外にしています
.github/workflows/actionlint.yml
name: actionlint
on:
pull_request:
paths: '.github/workflows/*.yml'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
actionlint:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: .github/workflows
- name: Run actionlint
env:
SHELLCHECK_OPTS: --exclude=SC2129,SC2086
run: |
bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
./actionlint -color
shell: bash
- デフォルトでは Self-Hosted Runner のラベル名がバリデーションに引っ掛かるので、対象外にしています
- この設定ファイルは
$ actionlint -init-config
で生成できます
.github/actionlint.yml
self-hosted-runner:
# Labels of self-hosted runner in array of strings.
labels: [label1, label2, label3]
# Configuration variables in array of strings defined in your repository or
# organization. `null` means disabling configuration variables check.
# Empty array means no configuration variable is allowed.
config-variables: null
使ってみて
- CI上で一瞬で静的解析してくれる(めっちゃはやい)
-
go
をインストールすればローカルでも実行可能なので、ミスの早期発見ができる(ubuntu_latest
のタイポとか) - ワークフローの実行を待たずとも早い段階でミスに気が付けるので、無駄な待ち時間が減った(今までは手動実行してエラーログ見てやっとミスに気が付いていたのでかなりありがたい)
- 既存のワークフローファイルにもフィードバックが返ってきたので、あんまりよくない書き方に気が付くことができた
おわりに
総じてめっちゃ便利なのでおすすめです。繰り返すしょーもないミスにイライラしなくなる!はず!!