Skip to content

ci: split examples tests #3738

ci: split examples tests

ci: split examples tests #3738

name: Turborepo Test
on:
push:
branches: [main]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
permissions:
actions: write
contents: read
pull-requests: read
jobs:
integration:
name: Turborepo Integration
runs-on: ${{ matrix.os.runner }}
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
os:
- runner: ubuntu-latest
- runner: macos-13
- runner: windows-latest
steps:
# On Windows, set autocrlf to input so that when the repo is cloned down
# the fixtures retain their line endings and don't get updated to CRLF.
# We want this because this repo also contains the fixtures for our test cases
# and these fixtures have files that need stable file hashes. If we let git update
# the line endings on checkout, the file hashes will change.
# https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration#_core_autocrlf
- name: set crlf
if: matrix.os.runner == 'windows-latest'
shell: bash
run: git config --global core.autocrlf input
- uses: actions/checkout@v4
- name: Setup Turborepo Environment
uses: ./.github/actions/setup-turborepo-environment
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
node-version: "18.20.2"
- name: Install Global Turbo
uses: ./.github/actions/install-global-turbo
- name: Setup Graphviz
uses: ts-graphviz/setup-graphviz@v2
with:
macos-skip-brew-update: "true"
env:
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: true
- name: Cache Prysk
id: cache-prysk
uses: actions/cache@v4
with:
path: cli/.cram_env
key: prysk-venv-${{ matrix.os.runner }}
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Integration Tests
run: |
if [ -z "${RUSTC_WRAPPER}" ]; then
unset RUSTC_WRAPPER
fi
turbo run test --filter=turborepo-tests-integration --color --env-mode=strict --token=${{ secrets.TURBO_TOKEN }} --team=${{ vars.TURBO_TEAM }}
shell: bash
env:
SCCACHE_BUCKET: turborepo-sccache
SCCACHE_REGION: us-east-2
# Only use sccache if we're in the Vercel repo.
RUSTC_WRAPPER: ${{ !github.event.pull_request.head.repo.fork && 'sccache' || '' }}
CARGO_INCREMENTAL: 0
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
rust_lint:
name: Rust lints
runs-on:
- "self-hosted"
- "linux"
- "x64"
- "metal"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Run cargo fmt check
run: |
cargo fmt --check
- name: Check Cargo.toml formatting (taplo)
run: npx @taplo/[email protected] format --check
- name: Check licenses
uses: EmbarkStudios/cargo-deny-action@v1
with:
command: check licenses
- name: Run cargo clippy
run: |
cargo clippy --workspace --features rustls-tls -- --deny clippy::all
rust_check:
# We test dependency changes only on main
name: Turborepo rust check
runs-on:
- "self-hosted"
- "linux"
- "x64"
- "metal"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Turborepo Environment
uses: ./.github/actions/setup-turborepo-environment
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
node-version: "18.20.2"
- name: Run cargo check
run: |
cargo check --workspace
rust_test:
strategy:
fail-fast: false
matrix:
os:
- name: ubuntu
runner:
- "self-hosted"
- "linux"
- "x64"
- "metal"
nextest: linux
- name: macos
runner: macos-13
nextest: mac
- name: windows
runner: windows-latest
nextest: windows-tar
runs-on: ${{ matrix.os.runner }}
name: Turborepo Rust testing on ${{ matrix.os.name }}
steps:
- name: Set git to use LF line endings
run: |
git config --global core.autocrlf false
git config --global core.eol lf
if: matrix.os.name == 'windows'
- name: Checkout
uses: actions/checkout@v4
- name: Setup Turborepo Environment
uses: ./.github/actions/setup-turborepo-environment
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
node-version: "18.20.2"
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Run tests
timeout-minutes: 120
# We explicitly unset RUSTC_WRAPPER if it is an empty string as causes build issues
run: |
if [ -z "${RUSTC_WRAPPER}" ]; then
unset RUSTC_WRAPPER
fi
if [ "$RUNNER_OS" == "Windows" ]; then
cargo test --workspace --exclude turborepo-napi
else
cargo test --workspace
fi
shell: bash
env:
SCCACHE_BUCKET: turborepo-sccache
SCCACHE_REGION: us-east-2
# Only use sccache if we're in the Vercel repo.
RUSTC_WRAPPER: ${{ !github.event.pull_request.head.repo.fork && 'sccache' || '' }}
CARGO_INCREMENTAL: 0
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
summary:
name: Turborepo Test Summary
runs-on: ubuntu-latest
if: always()
needs:
- integration
- rust_lint
- rust_check
- rust_test
steps:
- name: Compute info
id: info
if: always()
run: |
cancelled=false
failure=false
subjob () {
local result=$1
if [ "$result" = "cancelled" ]; then
cancelled=true
elif [ "$result" != "success" ] && [ "$result" != "skipped" ]; then
failure=true
fi
}
subjob ${{needs.integration.result}}
subjob ${{needs.rust_lint.result}}
subjob ${{needs.rust_check.result}}
subjob ${{needs.rust_test.result}}
if [ "$cancelled" = "true" ]; then
echo "cancelled=true" >> $GITHUB_OUTPUT
elif [ "$failure" = "true" ]; then
echo "failure=true" >> $GITHUB_OUTPUT
else
echo "success=true" >> $GITHUB_OUTPUT
fi
- name: Failed
if: steps.info.outputs.failure == 'true'
run: exit 1
- name: Succeeded
if: steps.info.outputs.success == 'true'
run: echo Ok
cleanup:
name: Cleanup
needs: summary
if: always()
uses: ./.github/workflows/pr-clean-caches.yml
secrets: inherit