Amazon CodeCatalystのWorkflowが書けないのでGithub Actionsに全振りしたいと思います。
はじめに
2023年10月時点のAmazon CodeCatalystの採用ハードルは意外と高い。
「やってみた」系の記事こそ出てくるが、実際に手を動かす際に参考に出来る記事がかなり少ない。Workflowもその一つだ。今回はworkflowをサッと書く話をします。
Workflow
CodeCatalystのWorkflowを表現する記法は、CodeBuildのBuildspecとは違う。なんでだよ。
なんでだよ。というのも、Amazon CodeCatalystが登場したのは2022年の12月。つまり生成AIの学習時期より後に生まれた記法なので、ChatGPTを含むLLMに助けを求めることができない! ブログの事例も少ない中、しんどい状況だ。
気を取り直して、公式ドキュメントの書き方を読むも頭に入ってこない。気晴らしにAWS re:Post で調べて分かったこととして、Github Actionsがほぼそのまま使えるらしい。
これは良さそうだ。何か困ったらChatGPTと一緒にGithub Actionsの形でテンプレートを作って、 CodeCatalyst の形式に読み替える。とアプローチは第一歩として悪くなさそう。
という訳でここからGithubActionsとCodeCatalystの差分について眺めつつ、CodeCatalyst Workflowの理解を深めたいと思います。
参照元のGithub Actions
以前の記事のものを使いまわす。
name: CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
jobs:
bunLockCheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
- name: check lock diff
run: diff <(bun bun.lockb) yarn.lock
CodeCatalystのWorkflow
いきなりだが、動いたものを共有する。
Name: Workflow_abcd
SchemaVersion: "1.0"
RunMode: QUEUED
Triggers:
- Type: Push
Branches:
- main
- Type: PULLREQUEST
Branches:
- main
Events:
- OPEN
- REVISION
Actions:
main:
Identifier: aws/github-actions-runner@v1
Inputs:
Sources:
- WorkflowSource
Configuration:
Steps:
- uses: oven-sh/setup-bun@v1
- name: check lock diff
run: diff <(bun bun.lockb) yarn.lock
Workflowの解説
Header
Name: Workflow_abcd
SchemaVersion: "1.0"
RunMode: QUEUED
この辺は、ほぼおまじないだ。RunMode
がQueued(Default)
/Superseded
/Parallel
の3種類ある点を押さえておけばよいだろう。詳細はこの辺。
Triggers
Github ActionsベースのものをCodeCatalystで書き換えると、このような差がある。
- Before (Github Actions)
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
- After (CodeCatalyst)
Triggers:
- Type: Push
Branches:
- main
- Type: PULLREQUEST
Branches:
- main
Events:
- OPEN
- REVISION
ちなみにWorkflowの手動実行はCodeCatalystではできるので、workflow_dispatch
相当の記載は不要である。
Triggers
で対応できるのは、以下の公式ドキュメントなのだが、正直分かりづらいよね……
Actions
割と大事なことを最初に書く。
actions/checkout
は動きません! また、CodeCatalystのActionにはそもそもcheckoutは必要ありません。
私はこれで大幅に消耗したので疲れました。それでは記述例。
- Before (Github Actions)
jobs:
bunLockCheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
- name: check lock diff
run: diff <(bun bun.lockb) yarn.lock
- After (CodeCatalyst)
Actions:
main:
Identifier: aws/github-actions-runner@v1
Inputs:
Sources:
- WorkflowSource
Configuration:
Steps:
- uses: oven-sh/setup-bun@v1
- name: check lock diff
run: diff <(bun bun.lockb) yarn.lock
公式ドキュメントはここ。
以下は書き方のコツ。
- GithubActionsを利用する場合は、
Identifier: aws/github-actions-runner@v1
と書く。 - Inputs -> Sources -> WorkflowSourceが、事実上の
actions/checkout
。 - 実行環境はこれを見てわかる通り、選択肢がAmazon Linux2のみである点に注意。
- Amazon Linux2はあまり新しくないため、例えばNode18以降に非対応という問題が指摘されている。今回はBunを使ったのでセーフだが、Ubuntuを選べるよう改善してほしいところだ。
まとめ
ということでCodeCatalystのWorkflowをGithub Actionsと比較しつつ解説した。今回はCI部分で閉じてしまったので、どこかでDeploy周りも深堀したいところだ。
Discussion