Section 9/131 menit
9. Integrasi dengan CI/CD
9. Integrasi dengan CI/CD
XcodeGen di Xcode Cloud
swift
#!/bin/zsh
# ci_scripts/ci_post_clone.sh
# Install XcodeGen
brew install xcodegen
# Generate project sebelum Xcode Cloud mulai build
cd "$CI_PRIMARY_REPOSITORY_PATH"
xcodegen generate
echo "XcodeGen: project generated successfully"
Tuist di Xcode Cloud / GitHub Actions
swift
#!/bin/zsh
# ci_scripts/ci_post_clone.sh — Xcode Cloud dengan Tuist
# Install mise dan Tuist
curl https://mise.run | sh
~/.local/bin/mise install tuist
# Generate project dengan cache
cd "$CI_PRIMARY_REPOSITORY_PATH"
~/.local/bin/mise exec -- tuist install # resolve SPM dependencies
~/.local/bin/mise exec -- tuist generate
echo "Tuist: project generated with cache"
swift
# .github/workflows/ios.yml — GitHub Actions dengan Tuist
name: iOS CI
on:
pull_request:
branches: [main, develop]
jobs:
build-and-test:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Install mise
uses: jdx/mise-action@v2
- name: Install Tuist
run: mise install
- name: Cache Tuist dependencies
uses: actions/cache@v4
with:
path: |
~/.tuist/Cache
.tuist/Dependencies
key: ${{ runner.os }}-tuist-${{ hashFiles('Tuist/Package.resolved') }}
restore-keys: |
${{ runner.os }}-tuist-
- name: Generate Xcode project
run: tuist install && tuist generate
- name: Build and test
run: |
xcodebuild test \
-scheme MyApp \
-destination "platform=iOS Simulator,name=iPhone 15,OS=latest" \
-resultBundlePath TestResults.xcresult
Bazel di GitHub Actions dengan Remote Cache
swift
# .github/workflows/bazel.yml
name: Bazel CI
on: [push, pull_request]
jobs:
build-test:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Configure Bazel remote cache
run: |
cat >> ~/.bazelrc << EOF
build:ci --remote_cache=grpcs://remote.buildbuddy.io
build:ci --remote_header=x-buildbuddy-api-key=${{ secrets.BUILDBUDDY_API_KEY }}
build:ci --noremote_upload_local_results # hanya CI yang upload
EOF
- name: Build
run: bazel build //... --config=ci
- name: Test
run: bazel test //... --config=ci --test_output=errors