CI上でgaugeのtagを動的に指定させる
ユースケース
CI上でgaugeのtagを動的に指定して実行させたい
How
gauge tag と git tag を利用した指定実行
gauge tag
gaugeは実行するシナリオをタグで指定できます。
ドキュメントより対応しているパターンについて
Tags Selects specs/scenarios that !TagAdo not have TagA TagA & TagBorTagA,TagBhave both TagA and TagB TagA & !TagBhave TagA and not TagB TagA | TagBhave either TagA or TagB (TagA & TagB) | TagChave either TagC or both TagA and TagB !(TagA & TagB) | TagChave either TagC or do not have both TagA and TagB (TagA | TagB) & TagChave either [TagA and TagC] or [TagB and TagC]
ユースケースではspec内に指定したどれかしらのtagを含んでいるという前提で進めていたので
TagA \| TagBであるor条件を採用しています。
他にも&機能をはじめ、複雑な条件も組むことができるので
かなり柔軟な印象です。
組み合わせ実行
-
git tag で実行したい gauge tag 名を作成する
git tag hoge git tag fuga -
git tag を取得し、gauge test の
-Ptagオプションに渡して実行ユースケースでは、gradleで実行していきます。
TAGS=$(git tag --list | paste -sd "|" -) gradle gauge -Ptags='!wip|${TAGS}' # 実際のイメージ gradle gauge -Ptags="!wip|hoge|fuga"-Ptagsはgauge-gradle-pluginのオプションです。
以上
他に考えられる選択肢
tagの指定方法ですが、githubのworkflow_dispatchによる入力方法なども検討しましたが
今回のユースケースとしては git tag が向いていたので不採用
他にも良い方法が思いつけば試してみたいところです。
or条件の補足
gauge-gradle-pluginの仕様としてor条件はパイプ区切りにする必要があるため
pasteコマンドを利用して対応しています。
環境変数に格納する場合
環境変数として登録することで、他ステップでも利用することができるので
個人的には環境変数で設定しておくのが無難かと思います。
- name: Set tag ist
run: |
echo "TAGS=$(git tag --list | paste -sd "|" -)" >> $GITHUB_ENV
$GITHUB_ENV
環境変数を定義または更新し、これを GITHUB_ENV 環境ファイルに書き込むことで、ワークフロー ジョブの後続のステップで環境変数が利用できるようになります。 環境変数を作成または更新するステップは、新しい値にアクセスできませんが、ジョブにおける後続のすべてのステップはアクセスできます。
既存の設定値を上書きすることはできないため、予約後など被らないように注意
複数行の格納が必要な場合はEOFを使用することで対応できます。
Discussion