კონტენტზე გადასვლა

უწყვეტი ინტეგრაცია (CI)

იმისათვის, რომ Tuist-ის ბრძანებები შეასრულოთ თქვენს უწყვეტი ინტეგრაციის სამუშაო ნაკადებში, საჭიროა მისი დაყენება თქვენს CI გარემოში.

ავტორიზაცია არის სავალდებულო მხოლოდ იმ შემთხვევაში, თუ გსურთ გამოიყენოთ სერვერის მხარეს განთავსებული ფუნქციები, როგორიცაა cache.

შემდეგი სექციები წარმოადგენს მაგალითებს, თუ როგორ უნდა გააკეთოთ ეს სხვადასხვა CI პლატფორმაზე.

მაგალითები#

GitHub Actions#

GitHub Actions-ზე შეგიძლიათ გამოიყენოთ OIDC ავტორიზაცია უსაფრთხო, საიდუმლოების გარეშე შესასვლელად:

yaml
name: Build Application
on:
pull_request:
branches:
- main
push:
branches:
- main
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: jdx/mise-action@v2
- run: tuist auth login
- run: tuist setup cache
yaml
name: Build Application
on:
pull_request:
branches:
- main
push:
branches:
- main
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- run: brew install --formula [email protected]
- run: tuist auth login
- run: tuist setup cache
yaml
name: Build Application
on:
pull_request:
branches:
- main
push:
branches:
- main
env:
TUIST_TOKEN: ${{ secrets.TUIST_TOKEN }}
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: jdx/mise-action@v2
- run: tuist setup cache
yaml
name: Build Application
on:
pull_request:
branches:
- main
push:
branches:
- main
env:
TUIST_TOKEN: ${{ secrets.TUIST_TOKEN }}
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- run: brew install --formula [email protected]
- run: tuist setup cache
Oidc Setup

OIDC ავტორიზაციის გამოყენებამდე, თქვენ უნდა მიუერთოთ თქვენი GitHub რეპოზიტორია თქვენს Tuist პროექტს. permissions: id-token: write აუცილებელია OIDC-ის მუშაობისთვის. ალტერნატიულად, შეგიძლიათ გამოიყენოთ account token TUIST_TOKEN საიდუმლოსთან ერთად.

Tip

ჩვენ გირჩევთ გამოიყენოთ mise use --pin თქვენს Tuist პროექტებში, რათა დააფიქსიროთ Tuist-ის ვერსია ყველა გარემოში. ეს ბრძანება შექმნის .tool-versions ფაილს, რომელიც შეიცავს Tuist-ის ვერსიას.

Xcode Cloud#

Xcode Cloud-ში, რომელიც იყენებს Xcode პროექტებს როგორც ჭეშმარიტების წყაროს, თქვენ უნდა დაამატოთ post-clone სკრიპტი Tuist-ის დასაყენებლად და საჭირო ბრძანებების შესასრულებლად, მაგალითად tuist generate:

bash
#!/bin/sh
# Mise installation taken from https://mise.jdx.dev/continuous-integration.html#xcode-cloud
curl https://mise.run | sh # Install Mise
export PATH="$HOME/.local/bin:$PATH"
mise install # Installs the version from .mise.toml
# Runs the version of Tuist indicated in the .mise.toml file
mise exec -- tuist install --path ../ # `--path` needed as this is run from within the `ci_scripts` directory
mise exec -- tuist generate -p ../ --no-open # `-p` needed as this is run from within the `ci_scripts` directory
bash
#!/bin/sh
brew install --formula [email protected]
tuist generate
Authentication

გამოიყენეთ account token, TUIST_TOKEN გარემოს ცვლადის დაყენებით თქვენს Xcode Cloud სამუშაო ნაკადის პარამეტრებში.

CircleCI#

CircleCI-ზე შეგიძლიათ გამოიყენოთ OIDC ავტორიზაცია უსაფრთხო, საიდუმლოების გარეშე შესასვლელად:

yaml
version: 2.1
jobs:
build:
macos:
xcode: "15.0.1"
steps:
- checkout
- run:
name: Install Mise
command: |
curl https://mise.jdx.dev/install.sh | sh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> $BASH_ENV
- run:
name: Install Tuist
command: mise install
- run:
name: Authenticate
command: mise exec -- tuist auth login
- run:
name: Build
command: mise exec -- tuist setup cache
yaml
version: 2.1
jobs:
build:
macos:
xcode: "15.0.1"
environment:
TUIST_TOKEN: $TUIST_TOKEN
steps:
- checkout
- run:
name: Install Mise
command: |
curl https://mise.jdx.dev/install.sh | sh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> $BASH_ENV
- run:
name: Install Tuist
command: mise install
- run:
name: Build
command: mise exec -- tuist setup cache
Authentication

OIDC ავტორიზაციის გამოყენებამდე, თქვენ უნდა მიუერთოთ თქვენი GitHub რეპოზიტორია თქვენს Tuist პროექტს. CircleCI OIDC ტოკენები მოიცავს თქვენს მიერთებულ GitHub რეპოზიტორიას, რომელსაც Tuist იყენებს თქვენს პროექტებზე წვდომის ავტორიზაციისთვის. ალტერნატიულად, შეგიძლიათ გამოიყენოთ account token TUIST_TOKEN გარემოს ცვლადთან ერთად.

Bitrise#

Bitrise-ზე შეგიძლიათ გამოიყენოთ OIDC ავტორიზაცია უსაფრთხო, საიდუმლოების გარეშე შესასვლელად:

yaml
workflows:
build:
steps:
- git-clone@8: {}
- script@1:
title: Install Mise
inputs:
- content: |
curl https://mise.jdx.dev/install.sh | sh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
- script@1:
title: Install Tuist
inputs:
- content: mise install
- get-identity-token@0:
inputs:
- audience: tuist
- script@1:
title: Authenticate
inputs:
- content: mise exec -- tuist auth login
- script@1:
title: Build
inputs:
- content: mise exec -- tuist setup cache
yaml
workflows:
build:
steps:
- git-clone@8: {}
- script@1:
title: Install Mise
inputs:
- content: |
curl https://mise.jdx.dev/install.sh | sh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
- script@1:
title: Install Tuist
inputs:
- content: mise install
- script@1:
title: Build
inputs:
- content: mise exec -- tuist setup cache
Authentication

OIDC ავტორიზაციის გამოყენებამდე, თქვენ უნდა მიუერთოთ თქვენი GitHub რეპოზიტორია თქვენს Tuist პროექტს. Bitrise OIDC ტოკენები მოიცავს თქვენს მიერთებულ GitHub რეპოზიტორიას, რომელსაც Tuist იყენებს თქვენს პროექტებზე წვდომის ავტორიზაციისთვის. ალტერნატიულად, შეგიძლიათ გამოიყენოთ account token TUIST_TOKEN გარემოს ცვლადთან ერთად.

Codemagic#

Codemagic-ში, შეგიძლიათ დაამატოთ დამატებითი ნაბიჯი თქვენს სამუშაო ნაკადში Tuist-ის დასაყენებლად:

yaml
workflows:
build:
name: Build
max_build_duration: 30
environment:
xcode: 15.0.1
vars:
TUIST_TOKEN: ${{ secrets.TUIST_TOKEN }}
scripts:
- name: Install Mise
script: |
curl https://mise.jdx.dev/install.sh | sh
mise install # Installs the version from .mise.toml
- name: Build
script: mise exec -- tuist setup cache
yaml
workflows:
build:
name: Build
max_build_duration: 30
environment:
xcode: 15.0.1
vars:
TUIST_TOKEN: ${{ secrets.TUIST_TOKEN }}
scripts:
- name: Install Tuist
script: |
brew install --formula [email protected]
- name: Build
script: tuist setup cache
Authentication

შექმენით account token და დაამატეთ ის როგორც საიდუმლო გარემოს ცვლადი სახელით TUIST_TOKEN.

Appcircle#

Appcircle-ში, შეგიძლიათ გამოიყენოთ ჩაშენებული Tuist Install და Tuist Commands სამუშაო ნაკადის ნაბიჯები, ან დაამატოთ Custom Script ნაბიჯი Git Clone ნაბიჯის შემდეგ, რათა თავად დააყენოთ Tuist:

bash
cd $AC_REPOSITORY_DIR
curl https://mise.jdx.dev/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
mise install
mise exec -- tuist setup cache
bash
cd $AC_REPOSITORY_DIR
brew install --formula [email protected]
tuist setup cache
Workflow steps

Tuist Install ნაბიჯი აყენებს Tuist-ს Homebrew-ით და ასრულებს tuist generate. დააყენეთ Tuist Version შეყვანა ვერსიის დასაფიქსირებლად, შემდეგ დაამატეთ Tuist Commands ნაბიჯი ისეთი ბრძანებების შესასრულებლად, როგორიცაა tuist test ან tuist build.

Authentication

შექმენით account token, დაამატეთ ის როგორც ცვლადი სახელით TUIST_TOKENenvironment variable group-ში და აირჩიეთ ეს ჯგუფი თქვენს build კონფიგურაციაში. მონიშნეთ ცვლადი როგორც საიდუმლო ჩაკეტვის ხატულით.

Run report#

როდესაც Tuist ატვირთავს run-ს, მისი dashboard URL-ები იბეჭდება ლოგებში. მათ მისაღებად ლოგების სკრეპინგის გარეშე - მაგალითად, Slack-ში ტესტის ანგარიშის ბმულის გასაზიარებლად, როდესაც სამუშაო ვერ ხერხდება, ან run-ის თქვენს საკუთარ ინსტრუმენტებში გადასაცემად - გადაეცით --run-report-path (ან დააყენეთ TUIST_RUN_REPORT_PATH) tuist test-ს, tuist xcodebuild test-ს ან tuist xcodebuild build-ს. Tuist წერს JSON ანგარიშს ამ გზაზე, როგორც კი run აიტვირთება:

json
{
"runId": "0193f8c1-...",
"status": "success",
"runURL": "https://tuist.dev/acme/app/runs/0193f8c1-...",
"testRunURL": "https://tuist.dev/acme/app/tests/test-runs/...",
"buildRunURL": "https://tuist.dev/acme/app/builds/build-runs/...",
"testRuns": [
{
"scheme": "App",
"succeeded": true,
"totalTests": 42,
"skippedTests": 0,
"ranTests": 42,
"failedTestNames": [],
"ranTestModules": 3,
"skippedTestModules": 5
}
],
"buildRuns": [
{ "scheme": "App", "succeeded": true, "durationInSeconds": 12.3 }
]
}
ველიტიპიაღწერა
runIdსტრიქონიrun-ის უნიკალური იდენტიფიკატორი.
statusსტრიქონი"success" ან "failure".
runURLსტრიქონიdashboard URL run-ისთვის. ყოველთვის არსებობს.
testRunURLსტრიქონი?dashboard URL ტესტის run-ისთვის, არსებობს, როდესაც ბრძანებამ გაუშვა ტესტები.
buildRunURLსტრიქონი?dashboard URL build run-ისთვის, არსებობს, როდესაც ბრძანებამ შეასრულა build.
testRunsმასივიტესტის შედეგები სქემის მიხედვით: scheme, succeeded, totalTests, skippedTests, ranTests, failedTestNames, ranTestModules და skippedTestModules. ტესტების რაოდენობა ეხება სატესტო შემთხვევებს, ხოლო skippedTests ითვლის მათ, რომლებიც შედეგების კომპლექტში აღნიშნულია როგორც გამოტოვებული. skippedTestModules ითვლის სატესტო მოდულებს, რომლებიც selective testing-მა გამოტოვა და გამოტოვებულია, როდესაც selective testing არ გამოყენებულა ან run არის ტესტის ნაწილი (shard).
buildRunsმასივიbuild-ის შედეგები სქემის მიხედვით: scheme, succeeded, durationInSeconds.

testRunURL და buildRunURL დამოუკიდებელია: ბრძანება, რომელიც ასრულებს build-საც და ტესტსაც, წერს ორივეს, რასაც ლოგები ვერ აკეთებენ — ისინი მხოლოდ ერთ URL-ს ბეჭდავენ თითოეული run-ისთვის.

როდესაც იწერება ანგარიში

ანგარიში იწერება მხოლოდ იმ run-ებისთვის, რომლებიც აიტვირთება სერვერზე, რაც მოითხოვს ავთენტიკაციას და ავტომატურად ხდება CI-ზე. გზა იშლება ყოველი run-ის დასაწყისში, ამიტომ run, რომელიც არ ქმნის ანგარიშს, არაფერს ტოვებს, ვიდრე ძველ ანგარიშს წინა run-დან.

GitLab CI-ზე, ჩვეულებრივი გამოყენებაა URL-ის გამოჩენა მოგვიანებითი სამუშაოებისთვის dotenv report-ის მეშვეობით:

yaml
test:
script:
- tuist test --run-report-path tuist-run.json
- echo "TUIST_TEST_RUN_URL=$(jq -r '.testRunURL // empty' tuist-run.json)" >> run.env
artifacts:
reports:
dotenv: run.env