Hexパッケージのインストール
TuistはHexパッケージtuist_exを提供しており、Elixirプロジェクトに統合してビルドインサイトやテストインサイトなどの機能を有効にします。このガイドでは、そのインストールと設定手順を説明します。
このパッケージにはElixir 1.18以降が必要です。Tuistのコマンドラインインターフェースは不要です。
1. プロジェクトの作成#
Tuistダッシュボードでプロジェクトを作成し、ビルドシステムとしてMix (Elixir) を選択します。そのハンドルaccount/projectが、Mixプロジェクトとの接続に使用されます。
2. パッケージの追加#
mix.exs内の依存関係にtuist_exを追加します。
defp deps do
[
{:tuist_ex, "~> 0.10", runtime: false}
]
end
次に、パッケージを取得します。
mix deps.get
runtime: falseにより、実行中のアプリケーションからTuistが除外されます。Get started with Elixirに進み、キャッシング、ビルドインサイト、テストインサイトを一緒に設定してください。以下のセクションでは、認証と設定の詳細について説明します。
3. チームと継続的インテグレーションの認証#
各チームメンバーは、自身のマシンでTuist機能にアクセスするために以下を実行します。
mix tuist.login
短いサインインコードが表示され、ブラウザが開いてコードを入力すると、承認待ちになります。ブラウザなしでログインするには、認証情報を渡します。
セルフホスト型またはローカルのTuistサーバーを使用する場合は、mix.exsでベースURLを設定するか、--urlで指定します。
mix tuist.login --url http://localhost:8080
ホスト名の表記を一貫させてください。例えば、localhost用に保存されたログインは、127.0.0.1用に保存されたものとは別扱いになります。
GitHub Actions、CircleCI、Bitriseでは、継続的インテグレーションにログイン手順は不要です。タスクが初めてレポートを送信する際、プロバイダーのOpenID ConnectトークンとTuistトークンを交換します。Connect your GitHub repositoryでTuistプロジェクトに接続し、GitHub Actionsではジョブにid-token: write権限を付与します。
jobs:
test:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
elixir-version: '1.18'
otp-version: '27'
- run: mix deps.get
- run: mix test
Fly.io Machinesなどの他のOpenID Connect IDプロバイダーを使用する場合は、アカウントのSettings → AuthenticationページにあるWorkload identitiesセクションでワークロードID信頼ポリシーを設定します。これにより、そのアカウントが所有する現在および将来のすべてのプロジェクトに対するCIアクセスが付与されます。TUIST_OIDC_ACCOUNTをプロジェクトを所有するTuistアカウントに設定し、TUIST_OIDC_TOKENを通じてポリシーのオーディエンスを持つ新しく発行されたIDトークンを提供します。アカウントトークンや有効な保存済みログインがない場合、インテグレーションはこれを自動的に交換します。mix tuist.loginもCI外でこれを受け入れます。自動交換では、同じサーバー、アカウント、提供されたIDトークンに対してのみ、有効期限内のセッションを再利用します。IDを変更すると新しい交換が発生し、空のIDを提供すると以前のセッションを再利用せずに失敗します。Tuistセッションはリフレッシュトークンなしで1時間有効なので、長時間実行されるワークロードの場合は、セッションの有効期限が切れる前に新しいIDトークンを発行してmix tuist.loginを再度実行してください。workload identity setupおよびFly.io exampleを参照してください。
フォークからのプルリクエストにはOpenID Connectトークンが付与されないため、その実行はレポートされず、通常どおり成功または失敗します。他のプロバイダーでは、TUIST_TOKEN環境変数をアカウントトークンに設定してください。トークンを作成するには、continuous integration authentication guideに従ってください。
4. mix testとmix compileの使用を継続#
shared setupにより、コンパイルおよびテストのエイリアスがインストールされます。mix test test/my_app_test.exs:12 --traceは、同じ出力と終了コードで実行をレポートし、コンパイル統合はmix testまたはmix phx.serverによってトリガーされたビルドを対象とします。実行すべき処理が見つからないコンパイルはレポートされません。
これらのタスクは、独自の名前で呼び出した場合も動作します。Mixはそのように入力されたタスクをdev環境で開始するため、テスト環境用に別のプロセスで再開する必要があります。これを回避するには、タスクを優先環境に追加します。
def cli do
[preferred_envs: ["tuist.test": :test, "tuist.test.build": :test]]
end
設定リファレンス#
mix.exsのプロジェクトオプション内にあるtuistの下で、以下のオプションが利用可能です。
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
project |
String |
なし(必須) | account/project形式のプロジェクト識別子。 |
url |
String |
"https://tuist.dev" |
TuistサーバーのベースURL。 |
cache |
booleanまたはキーワードリスト |
無効 | セットアップにより依存関係のキャッシングが有効になります。除外事項や追加の入力については、Elixir cacheを参照してください。 |
test_retries |
integer |
0 |
失敗したテストを再試行する回数。test retriesを参照してください。 |
tags |
Stringのリスト |
[] |
すべてのビルドに付加するタグ。custom metadataを参照してください。 |
values |
マップ | %{} |
すべてのビルドに付加するキーと値のデータ。 |
環境変数はmix.exsよりも優先されます。
| 変数 | 説明 |
|---|---|
TUIST_PROJECT |
account/project形式のプロジェクト識別子。 |
TUIST_URL |
TuistサーバーのベースURL。 |
TUIST_TOKEN |
保存されたログインの代わりに認証に使用するトークン。 |
TUIST_OIDC_TOKEN |
Tuistトークンと交換される、新しく発行されたOpenID Connect IDトークン。GitHub ActionsおよびBitriseではオーディエンスをtuistにする必要があり、他のプロバイダーではアカウントのワークロードIDと一致させる必要があります。mix tuist.loginで使用するか、アカウントトークンや有効な保存済みログインがない場合のフォールバックとして使用します。 |
TUIST_OIDC_ACCOUNT |
プロジェクトを所有するTuistアカウントハンドル。アカウントのワークロードIDを通じてトークンを交換する際に必須です。既存のワークロードIDから選択しますが、それ自体でアクセス権を付与するものではありません。 |
TUIST_TEST_RETRIES |
失敗したテストを再試行する回数。 |
TUIST_TAGS |
ビルドに付加するカンマ区切りのタグ。 |
TUIST_VALUES |
ビルドに付加するカンマ区切りのkey=valueペア。 |
TUIST_DEBUG |
レポートを送信できなかった理由を表示するには1に設定します。 |
レポート送信はmix testまたはmix compileの終了コードを変更しません。レポートを送信できない場合、TUIST_DEBUG=1が設定されていない限りタスクは何も表示しません。
次のステップ#
パッケージのインストールと設定が完了したら、以下を使用できます。
- コンパイル済みの依存関係をローカルおよびCIビルド間で再利用するためのDependency caching。
- コンパイル時間、警告、およびビルドのボトルネックを追跡するためのBuild insights。
- 各テストまでさかのぼってテストパフォーマンスを追跡するためのTest insights。
- 断続的に失敗するテストを検出し、追跡するためのFlaky tests。
- 継続的インテグレーションランナー間でテストを分割するためのTest sharding。