CI上でgaugeのtagを動的に指定させる
ユースケース
CI上でgaugeのtagを動的に指定して実行させたい
How
gauge tag と git tag を利用した指定実行
gauge tag
gaugeは実行するシナリオをタグで指定できます。
ドキュメントより対応しているパターンについて
Tags Selects specs/scenarios that !TagA
do not have TagA TagA & TagB
orTagA,TagB
have both TagA and TagB TagA & !TagB
have TagA and not TagB TagA | TagB
have either TagA or TagB (TagA & TagB) | TagC
have either TagC or both TagA and TagB !(TagA & TagB) | TagC
have either TagC or do not have both TagA and TagB (TagA | TagB) & TagC
have 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