共通アクション
- actions
- setup-go
- アプリケーションによらない環境設定を書く
- ここではgoだけどrubyとかphpとか、その他ミドルウェアとか色々あっていい
- setup-env
- アプリケーションの環境設定を書く、環境変数の準備がメイン
- setup-app
- 初期データ準備とか
- something-else
- 他、共通で使いたいアクション
- setup-go
これを使って
ワークフロー
基本構造はこんな感じで、
- workflows
- lint
- test
- deploy
中身はこんな感じ。
on: [pull_request]
permissions:
contents: read
concurrency: # 連続pushしたときに最後以外はキャンセルする
group: ${{ github.workflow }}-${{ github.head_ref }}
cancel-in-progress: true
jobs:
do-something:
name: do-something
runs-on: ubuntu-latest
timeout-minutes: 5 # 暴走を回避するため絶対いれる
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup-go
- uses: ./.github/actions/setup-env
- uses: ./.github/actions/setup-app
- name: Do something
run: make do-something
ちょっと悩んでる: DBなどServiceを用意する部分を共通にしたいが…
こういうのを書きたいけれど、別ワークフローで再利用できないのでコピペしている
do-something:
services:
mysql:
image: mysql
ワークフローの再利用 - GitHub Docs は別のワークフローの呼び出しなのでやりたいこととはちょっと違う。
actionsに分けてスッキリさせつつ、愚直に1ワークフローに全部入れるのがいいのかも、と思っている。
- actions
- on-pullreq-actions
- lint
- test
- something-else
- on-pullreq-actions
base-job: &base-job
runs-on: ubuntu-latest
timeout-minutes: 5
services:
mysql:
image: mysql
# jobs definitions
name: do something
on: [pull_request]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref }}
cancel-in-progress: true
jobs:
lint:
<<: *base-job
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/on-pullreq-actions/lint
test:
<<: *base-job
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/on-pullreq-actions/test
しかし現在のGithubActionsではアンカーがサポートされてない。うーむ… Support YAML Anchors · Issue #1182 · actions/runner