🐺

CI上でgaugeのtagを動的に指定させる

2024/10/18に公開

ユースケース

CI上でgaugeのtagを動的に指定して実行させたい

How

gauge tag と git tag を利用した指定実行

gauge tag

gaugeは実行するシナリオをタグで指定できます。
ドキュメントより対応しているパターンについて

https://docs.gauge.org/execution.html?os=macos&language=java&ide=vscode#tag-expressions

Tags Selects specs/scenarios that
!TagA do not have TagA
TagA & TagB or TagA,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]

Tag expressionsより

ユースケースではspec内に指定したどれかしらのtagを含んでいるという前提で進めていたので
TagA \| TagBであるor条件を採用しています。

他にも&機能をはじめ、複雑な条件も組むことができるので
かなり柔軟な印象です。

組み合わせ実行

  1. git tag で実行したい gauge tag 名を作成する

    git tag hoge
    git tag fuga
    
  2. git tag を取得し、gauge test の -Ptag オプションに渡して実行

    ユースケースでは、gradleで実行していきます。

    TAGS=$(git tag --list | paste -sd "|" -)
    gradle gauge -Ptags='!wip|${TAGS}'
    # 実際のイメージ gradle gauge -Ptags="!wip|hoge|fuga"
    

    -Ptagsgauge-gradle-plugin のオプションです。

    https://github.com/getgauge/gauge-gradle-plugin

以上

他に考えられる選択肢

tagの指定方法ですが、githubのworkflow_dispatchによる入力方法なども検討しましたが
今回のユースケースとしては git tag が向いていたので不採用

https://docs.github.com/ja/enterprise-cloud@latest/actions/writing-workflows/workflow-syntax-for-github-actions#onworkflow_dispatchinputs

他にも良い方法が思いつけば試してみたいところです。

or条件の補足

gauge-gradle-pluginの仕様としてor条件はパイプ区切りにする必要があるため
pasteコマンドを利用して対応しています。

https://www.ibm.com/docs/ja/aix/7.1?topic=p-paste-command

環境変数に格納する場合

環境変数として登録することで、他ステップでも利用することができるので
個人的には環境変数で設定しておくのが無難かと思います。

- name: Set tag ist
    run: |
        echo "TAGS=$(git tag --list | paste -sd "|" -)" >> $GITHUB_ENV

$GITHUB_ENV

環境変数を定義または更新し、これを GITHUB_ENV 環境ファイルに書き込むことで、ワークフロー ジョブの後続のステップで環境変数が利用できるようになります。 環境変数を作成または更新するステップは、新しい値にアクセスできませんが、ジョブにおける後続のすべてのステップはアクセスできます。

https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-environment-variable

既存の設定値を上書きすることはできないため、予約後など被らないように注意

複数行の格納が必要な場合はEOFを使用することで対応できます。

https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#example-of-a-multiline-string

Discussion