🚀

プルリクがマージされるたびにMagicPodのE2Eテストを走らせる workflow の作成 with GitHub Actions

2024/01/25に公開

はじめに

magicpod-api-clientを利用して CircleCI から MagicPod のE2Eテストを実行する方法は、MagicPodヘルプセンターの記事に書いてありました。
https://support.magic-pod.com/hc/ja/articles/4408910495897-CircleCIとの連携
ですが、GitHub Actions から MagicPod のE2Eテストを実行する方法が公式の情報として見つからなかったため、実際に試して上手くいったワークフローについてまとめようと思います。

ワークフローの全体像

ワークフローの全体像だけ確認したい方はこちらをご覧ください。

run-magicpod-e2e.yaml
name: Run MagicPod E2E Tests

on:
  workflow_dispatch:
  push:
    branches:
      - main

jobs:
  run-magicpod-e2e:
    name: Run E2E
    runs-on: ubuntu-latest
    steps:
      - name: Wait for Firebase deploy to succeed
        uses: lewagon/wait-on-check-action@v1.3.1
        with:
          ref: ${{ github.ref }}
          check-name: 'Deploy Firebase'
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          wait-interval: 10

      - name: Download and unzip the latest version of magicpod-api-client
        run: |
          curl -L "https://app.magicpod.com/api/v1.0/magicpod-clients/api/$OS/latest/" -H "Authorization: Token $MAGICPOD_API_TOKEN" --output magicpod-api-client.zip
          unzip -q magicpod-api-client.zip
        env:
          OS: linux
          MAGICPOD_API_TOKEN: ${{ secrets.MAGICPOD_API_TOKEN }}

      - name: Run batch execution using various env
        run: ./magicpod-api-client batch-run -t $MAGICPOD_API_TOKEN -o $MAGICPOD_ORGANIZATION -p $MAGICPOD_PROJECT -S $MAGICPOD_TEST_SETTINGS_NUMBER
        env:
          MAGICPOD_API_TOKEN: ${{ secrets.MAGICPOD_API_TOKEN }}
          MAGICPOD_ORGANIZATION: your_organization
          MAGICPOD_PROJECT: your_project
          MAGICPOD_TEST_SETTINGS_NUMBER: 1

ワークフローの詳細

ワークフローの各ステップについて、つまずきやすい(と思われる)ポイントについて解説していきます。

実行トリガー

name: Run MagicPod E2E Tests

on:
  workflow_dispatch:
  push:
    branches:
      - main

workflow_dispatch:と記述することで、以下のように GitHub の Actionsタブからワークフローを手動で実行できるようになります。

push: branches: - mainによってプルリクがmainブランチにマージされた時に自動で実行されるようになります。

他のワークフローが正常終了するまで待機

jobs:
  run-magicpod-e2e:
    name: Run E2E
    runs-on: ubuntu-latest
    steps:
      - name: Wait for Firebase deploy to succeed
        uses: lewagon/wait-on-check-action@v1.3.1
        with:
          ref: ${{ github.ref }}
          check-name: 'Deploy Firebase'
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          wait-interval: 10

このステップは本記事の本題とは若干逸れますが、今回は Firebase のデプロイが正常に終了してから MagicPod のE2Eテストを自動で走らせたかったので、以下のアクションを利用しています。
https://github.com/lewagon/wait-on-check-action
最新バージョンは2023年12月にリリースされたv1.3.3みたいです。

${{ secrets.GITHUB_TOKEN }}などのシークレットは https://github.com/your_organization/your_project/settings/secrets/actions から登録することができます。

magicpod-api-clientをDLして解凍

- name: Download and unzip the latest version of magicpod-api-client
        run: |
          curl -L "https://app.magicpod.com/api/v1.0/magicpod-clients/api/$OS/latest/" -H "Authorization: Token $MAGICPOD_API_TOKEN" --output magicpod-api-client.zip
          unzip -q magicpod-api-client.zip
        env:
          OS: linux
          MAGICPOD_API_TOKEN: ${{ secrets.MAGICPOD_API_TOKEN }}

公式の記事では、unzip -fq ${FILENAME}.zipとありますが、fオプションをつけて実行すると正常に解凍できなかったのか、./magicpod-api-client: No such file or directoryというエラーが出て失敗したので、今回は外しました。

APIドキュメントはこちらです。

E2Eテストを実行

- name: Run batch execution using various env
        run: ./magicpod-api-client batch-run -t $MAGICPOD_API_TOKEN -o $MAGICPOD_ORGANIZATION -p $MAGICPOD_PROJECT -S $MAGICPOD_TEST_SETTINGS_NUMBER
        env:
          MAGICPOD_API_TOKEN: ${{ secrets.MAGICPOD_API_TOKEN }}
          MAGICPOD_ORGANIZATION: your_organization
          MAGICPOD_PROJECT: your_project
          MAGICPOD_TEST_SETTINGS_NUMBER: 1

TEST_SETTINGS_NUMBERというのが最初は分かりづらかったのですが、MagicPodのGUI上で確認できる、一括実行詳細の設定番号のようです。赤枠で囲っている数字になります。

まとめ

このワークフローによって、プルリクがmainにマージされFirebaseのデプロイが終わったあと、MagicPodのE2Eテストが自動で走るようになりました。

今後は各テストケースの質を高めつつ適宜メンテナンスしていこうと思います。

GitHub Actions における環境変数の使い方については、こちらを参考にさせていただきました。
https://zenn.dev/hashito/articles/aef4de448f341b

Discussion