ci: split examples tests #3738
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |