プルリクがマージされるたびにMagicPodのE2Eテストを走らせる workflow の作成 with GitHub Actions
はじめに
magicpod-api-client
を利用して CircleCI から MagicPod のE2Eテストを実行する方法は、MagicPodヘルプセンターの記事に書いてありました。
ですが、GitHub Actions から MagicPod のE2Eテストを実行する方法が公式の情報として見つからなかったため、実際に試して上手くいったワークフローについてまとめようと思います。
ワークフローの全体像
ワークフローの全体像だけ確認したい方はこちらをご覧ください。
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テストを自動で走らせたかったので、以下のアクションを利用しています。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 における環境変数の使い方については、こちらを参考にさせていただきました。
Discussion