[アップデート] Amazon CodeCatalyst のワークフローが GitHub プルリクエストイベントでトリガー出来るようになりました

2023.07.20

いわさです。

Amazon CodeCatalyst は従来の Code シリーズと異なり、開発ライフサイクル全体を統合管理出来るサービスです。

CodeCatalyst では外部リポジトリを構成することが出来て、GitHub がサポートされていました。
また、今年の 4 月には Dev Environment も GitHub リポジトリとの統合がサポートされていました。

CodeCatalyst 内でワークフローの定義や実行の管理を行うことが出来ますが、今回のアップデートで GitHub プルリクエストイベントをトリガーに実行出来るようになりました。

これまでは対象リモートブランチへのプッシュイベントのみがサポートされていたので、プルリクエストイベントを処理するためには GitHub Actions 用にもワークフローの管理が必要でした。
今回 CodeCatalyst 側でイベントを拾えるようになったので、例えばプルリクエスト作成時に単体テストなどのタスクを CodeCatalyst 側で実行するような使い方が出来るようになります。

設定の流れ

リンクした GitHub リポジトリを対象にしたワークフローを作成すると設定が可能になっています。

参考までにデフォルトでは次のようにブランチプッシュのみがトリガーに記述されています。

Name: Workflow_c092
SchemaVersion: "1.0"

# Optional - Set automatic triggers.
Triggers:
  - Type: Push
    Branches:
      - main

# Required - Define action configurations.
Actions:

ビジュアルエディターから今回アップデートされた部分も利用可能なのでこちらを使ってみましょう。
ワークフローコンポーネントを選択し、トリガーを設定していきます。

Add trigger でまずは新しいトリガーを追加してみます。

そうすると、次のようにトリガータイプに「Pull request」が追加されているのでこちらを選択してあとは構成するだけです。簡単ですね。

プルリクエストイベントは次の 3 つがサポートされています。

  • Pull request is created
  • New revision is made to pull request
  • Pull reuqest is closed

後は適当にコマンド実行するタスクでも追加してみましょう。

YAML は次のようになりました。
ハイライト部分が今回定義出来るようになった部分ですね。

Name: Workflow_c092
SchemaVersion: "1.0"

# Optional - Set automatic triggers.
Triggers:
  - Type: PULLREQUEST
    Branches:
      - main
    Events:
      - OPEN

# Required - Define action configurations.
Actions:
  Build_24:
    # Identifies the action. Do not modify this value.
    Identifier: aws/build@v1.0.0
    # Specifies the source and/or artifacts to pass to the action as input.
    Inputs:
      # Optional
      Sources:
        - WorkflowSource # This specifies that the action requires this Workflow as a source
    Outputs:
      # Optional; Automatically discover reports for popular test frameworks
      AutoDiscoverReports:
        Enabled: true
        # Use as prefix for the report files
        ReportNamePrefix: rpt
    # Defines the action's properties.
    Configuration:
      # Required - Steps are sequential instructions that run shell commands
      Steps:
        - Run: echo "created pull request!"
    Compute:
      Type: EC2

作成するとリモートリポジトリにプッシュされます。
知らなかったのですが、CodeCatalyst のワークフローファイルは.codecatalyst/workflows/配下で管理されてるようですね。

混乱しそうだが、一応 GitHub Actions のワークフローファイルと併用出来るようにはなっている。

プルリクエスト作成から実行までの様子を観察する

mainから切った適当なブランチを変更してリモートへプッシュし、プルリクエストを作成してみましょう。

プルリクエスト作成直後に、CodeCatalyst 側でワークフローの実行が開始されたことが確認出来ました。

問題なく実行出来ていますね。
イメージとしてはここで Linter や単体テストを実行したりする感じでしょうか。

さいごに

本日は Amazon CodeCatalyst が、GitHub プルリクエストによってトリガーされるワークフローをサポートするようになったので試してみました。

AWS re:Post でも要望としては挙がっていたようです。

まず、外部リポジトリを使う場合は CodeCatalyst 側でプルリクエスト管理は出来ないので、GitHub 側でプルリクエストを管理する選択肢になります。
その上でワークフローについてはわざわざ CodeCatalyst に寄せるのか、というところですよね。
コードや Issue、プルリクエストを GitHub で管理出来ているのであればそのまま GitHub Actions で良い気がしますので、CodeCatalyst の利点を活かした使い方を考える必要がありますね。

CodeCatalyst だと、Assume Role したものでワークフローが実行出来るので、AWS 環境へデプロイしたりワークフローの中でサービスにアクセスする場合は楽に安全に利用出来ます。
ただ、GitHub 側も昨今は OIDC 連携出来るようになっていてアクセスキーなどを払い出す必要がなくなりました。

あとは CodeCatalyst の場合だと請求は AWS アカウントに紐づく形になるので、ワークフローや Dev Enviroment で発生する料金をまとめたいとか AWS クレジットを適用したいという声はありそうです。