ライセンス
パブリックリポジトリでは TestDetta を無料で使用できます。プライベートリポジトリでは、ライセンス文字列を CI に渡します。ライセンスの問題でビルドが失敗することはありません。有効なライセンスがない場合は、TestDetta を導入する前と同じようにすべてのテストを実行します。
パブリックリポジトリ
パブリックリポジトリにライセンスは不要ですが、TestDetta がリポジトリをパブリックと判断できるのは、CI がそれを示している場合だけです。
- GitHub Actions:イベントペイロード(
repository.private)から判断します。 - GitLab CI:
CI_PROJECT_VISIBILITYから判断します。
Jenkins、Azure DevOps、Bitbucket、その他の CI システム、開発者のマシンでは、すべてのリポジトリがプライベートとして扱われます。
ライセンスを渡す
TestDetta は次の順序でライセンスを探します。
TESTDETTA_LICENSE:マスクされた変数またはシークレット変数から渡すライセンス文字列TESTDETTA_LICENSE_FILE:ライセンスを格納したファイルのパス~/.testdetta/license:td license installと自動更新によって書き込まれるファイル- リポジトリ内の
.testdetta/license
推奨される方法はシークレット変数です。GitHub Actions では、アクションの license 入力で渡します。
- uses: <owner>/testdetta@<sha>
with:
mode: test
license: ${{ secrets.TESTDETTA_LICENSE }}
ライセンスを確認するのは td affected と td test だけです。td record はいずれにしてもすべてのテストを実行するため、ライセンスは不要です。
ライセンスを確認する
td license status は、見つかったライセンスの内容を表示します。有効性、対象となるリポジトリ、アクティブなコミッター数を、個人データを含めずに示します。同じ状態は、関係がある場合には常に、ログ、ジョブサマリー、JSON 出力にも表示されます。状態には、有効、まもなく期限切れ、シート超過、期限切れ、スコープ不一致、無効、なしがあります。
td license status
CI のシークレットがないマシン
シークレット変数にライセンスを保持できない場合は、マシンごとに一度だけライセンスを保存します。
td license install <license|file>
ライセンスはまず検証され、その後 ~/.testdetta/license に書き込まれます。
自動更新
ライセンスには、更新元のアドレスが含まれています。TestDetta は 1 日に最大 1 回、最新のバージョンを取得して ~/.testdetta/license に保持します。そのため、更新や追加したシートは、シークレットに手を加えなくても反映されます。このリクエストはヘッダーでライセンスを送信するだけで、リポジトリの内容は何も送信しません。タイムアウトは 2 秒で再試行は行わず、失敗はすべて無視されます。オフラインやブロックされたネットワークでも、かかる時間は 1 日あたり最大 2 秒です。HTTPS_PROXY に従います。
ライセンスサービスに接続できないネットワークでは、TESTDETTA_LICENSE_REFRESH=off を設定し、新しいライセンスを受け取ったときにご自身でライセンス文字列を置き換えてください。
ライセンスの対象となるリポジトリ
ライセンスには、github.com/acme/* のように対象となるリポジトリが記載されています。TestDetta はこれをリポジトリの origin リモートと照合します。Jenkins でよく見られる、リモート URL に埋め込まれた資格情報は、照合の前に取り除かれ、ログに出力されることはありません。
リモートがライセンスの対象リポジトリを示していない場合(ローカルのミラーなど)は、TESTDETTA_LICENSE_SCOPE を設定してください。
TESTDETTA_LICENSE_SCOPE=git.acme.corp/scm/pay/app
アクティブなコミッター
TestDetta の料金は、アクティブなコミッター 1 人あたりの月額です。アクティブなコミッターとは、分析対象のコミットから到達できるコミットのうち、過去 30 日間に 1 件以上のコミットを作成した、重複のないコミット作成者を指します。作成者は .mailmap で名寄せしたメールアドレスによってローカルで数えられ、メールアドレスがお使いのマシンの外に出ることはありません。Dependabot、Renovate、github-actions などのボットは数えません。独自のパターンは .testdetta/license.json に追加できます。
{ "bots": ["ci-service-account"] }
ライセンスのシート数に対して 20% まで(最低 1 人)の超過は問題ありません。それを超えた場合も、シートを追加する時間を確保できるよう、TestDetta は 30 日間は選択を続け、すべてのサマリーに警告を表示します。その後も超過したままの場合に限り、ライセンスがない場合と同様にすべてのテストを実行します。料金を参照してください。
ビルドが失敗することはありません。ライセンスが期限切れ、見つからない、または一致しない場合、TestDetta はすべてのテストを実行してその理由を表示します。ジョブを失敗させることはありません。