🛡️

Amazon CodeCatalystのWorkflowが書けないのでGithub Actionsに全振りしたいと思います。

2023/10/13に公開

はじめに

2023年10月時点のAmazon CodeCatalystの採用ハードルは意外と高い。

「やってみた」系の記事こそ出てくるが、実際に手を動かす際に参考に出来る記事がかなり少ない。Workflowもその一つだ。今回はworkflowをサッと書く話をします。

Workflow

CodeCatalystのWorkflowを表現する記法は、CodeBuildのBuildspecとは違う。なんでだよ。

https://docs.aws.amazon.com/codecatalyst/latest/userguide/flows.html

なんでだよ。というのも、Amazon CodeCatalystが登場したのは2022年の12月。つまり生成AIの学習時期より後に生まれた記法なので、ChatGPTを含むLLMに助けを求めることができない! ブログの事例も少ない中、しんどい状況だ。

気を取り直して、公式ドキュメントの書き方を読むも頭に入ってこない。気晴らしにAWS re:Post で調べて分かったこととして、Github Actionsがほぼそのまま使えるらしい。

https://repost.aws/questions/QUXlyde8wCTByqM1R3bYQ8vQ/trying-to-use-flutter-github-action-in-codecatalyst-doesnt-work

https://aws.amazon.com/jp/blogs/news/using-github-actions-with-amazon-codecatalyst/

これは良さそうだ。何か困ったらChatGPTと一緒にGithub Actionsの形でテンプレートを作って、 CodeCatalyst の形式に読み替える。とアプローチは第一歩として悪くなさそう。

という訳でここからGithubActionsとCodeCatalystの差分について眺めつつ、CodeCatalyst Workflowの理解を深めたいと思います。

参照元のGithub Actions

以前の記事のものを使いまわす。

https://zenn.dev/watany/articles/e21a54cf3d56d8

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の解説

Name: Workflow_abcd
SchemaVersion: "1.0"
RunMode: QUEUED

この辺は、ほぼおまじないだ。RunModeQueued(Default)/Superseded/Parallelの3種類ある点を押さえておけばよいだろう。詳細はこの辺。

https://docs.aws.amazon.com/codecatalyst/latest/userguide/workflows-configure-runs.html

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で対応できるのは、以下の公式ドキュメントなのだが、正直分かりづらいよね……

https://docs.aws.amazon.com/codecatalyst/latest/userguide/workflows-add-trigger.html#workflows-add-trigger-examples-push-main

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

公式ドキュメントはここ。

https://docs.aws.amazon.com/codecatalyst/latest/userguide/integrations-github-actions.html

以下は書き方のコツ。

  • 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