From 34596f307a7c46c544475fa7afbf93e7aa092a90 Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Tue, 23 Apr 2024 16:15:16 -0500 Subject: [PATCH 1/7] chore(ci): breakup GH test.yml turbopack and turborepo tests are often blocking each other and there is no good reason to keep them all in one workflow. This PR separates them. Since linting and JS packages are not cleanly separated between the projects, they get their own workflows as well --- .github/workflows/lint.yml | 136 ++++++ .github/workflows/test-js-packages.yml | 103 ++++ .../{test.yml => turbopack-test.yml} | 447 +----------------- .github/workflows/turborepo-test.yml | 418 ++++++++++++++++ 4 files changed, 663 insertions(+), 441 deletions(-) create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/test-js-packages.yml rename .github/workflows/{test.yml => turbopack-test.yml} (59%) create mode 100644 .github/workflows/turborepo-test.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000000000..a8705000a08bd --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,136 @@ +name: 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: + determine_jobs: + name: Determine jobs to run + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: CI related changes + id: ci + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + .github/actions/** + .github/workflows/lint.yml + + - name: Rust related changes + id: rust + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + pnpm-lock.yaml + package.json + Cargo.** + crates/** + shim/** + xtask/** + .cargo/** + rust-toolchain + !**.md + !**.mdx + + - name: Formatting related changes + id: format + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + **/*.{yml,yaml,md,mdx,js,jsx,ts,tsx,json,toml,css} + + outputs: + rust: ${{ steps.ci.outputs.diff != '' || steps.rust.outputs.diff != '' }} + format: ${{ steps.ci.outputs.diff != '' || steps.format.outputs.diff != '' }} + + rust_lint: + needs: [determine_jobs] + if: needs.determine_jobs.outputs.rust == 'true' + name: Rust lints + runs-on: + - "self-hosted" + - "linux" + - "x64" + - "metal" + steps: + - name: Checkout + uses: actions/checkout@v3 + + - 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/cli@0.5.2 format --check + + - name: Check licenses + uses: EmbarkStudios/cargo-deny-action@v1 + with: + command: check licenses + + format_lint: + name: Formatting + runs-on: + - "self-hosted" + - "linux" + - "x64" + - "metal" + needs: determine_jobs + if: needs.determine_jobs.outputs.format == 'true' + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + TURBO_REMOTE_ONLY: true + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Install Global Turbo + uses: ./.github/actions/install-global-turbo + + - name: Lint + # Filters some workspaces out: + # - Other `@vercel/*` packages because ?? + run: | + turbo run lint \ + --filter=!@vercel/devlow-bench \ + --filter=!@vercel/experimental-nft-next-plugin \ + --filter=!@vercel/experimental-nft-next-plugin \ + --filter=!turbopack-bump-action \ + --filter=!next-integration-stat \ + --env-mode=strict + + cleanup: + name: Cleanup + needs: + - rust_lint + - format_lint + if: always() + uses: ./.github/workflows/pr-clean-caches.yml + secrets: inherit diff --git a/.github/workflows/test-js-packages.yml b/.github/workflows/test-js-packages.yml new file mode 100644 index 0000000000000..ea5a7e1b40679 --- /dev/null +++ b/.github/workflows/test-js-packages.yml @@ -0,0 +1,103 @@ +name: 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: + determine_jobs: + name: Determine jobs to run + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: CI related changes + id: ci + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + .github/actions/** + .github/workflows/test-js-packages.yml + + - name: /packages related changes + id: packages + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + packages/** + + - name: Docs related changes + id: docs + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + docs/** + + outputs: + ci: ${{ steps.ci.outputs.diff != ''}} + packages: ${{ steps.packages.outputs.diff != '' }} + docs: ${{ steps.docs.outputs.diff != '' }} + + js_packages: + name: JS Package Tests + timeout-minutes: 30 + if: needs.determine_jobs.outputs.ci == 'true' || needs.determine_jobs.outputs.packages == 'true' || needs.determine_jobs.outputs.docs == 'true' + needs: [determine_jobs] + runs-on: ${{ matrix.os.runner }} + strategy: + fail-fast: false + matrix: + os: + - name: ubuntu + runner: + - "self-hosted" + - "linux" + - "x64" + - "metal" + - name: macos + runner: macos-12 + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + TURBO_REMOTE_ONLY: true + + steps: + # on main -> current + prev commit + # pr -> pr commits + base commit + - name: Determine fetch depth + id: fetch-depth + run: | + echo "depth=$(( ${{ github.event.pull_request.commits || 1 }} + 1 ))" >> $GITHUB_OUTPUT + + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.ref }} + fetch-depth: ${{ steps.fetch-depth.outputs.depth }} + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + node-version: "20" + + - name: Install Global Turbo + uses: ./.github/actions/install-global-turbo + + - name: Run tests + # We manually set TURBO_API to an empty string to override Hetzner env + # We filter out turborepo-repository because it's a native package and needs + # to run when turbo core changes. This job (`js_packages`) does not run on turborpeo core + # changes, and we don't want to enable that beahvior for _all_ our JS packages. + run: | + TURBO_API= turbo run check-types test --filter=docs --filter="!turborepo-repository" --filter={./packages/*}...[${{ github.event.pull_request.base.sha || 'HEAD^1' }}] --color --env-mode=strict diff --git a/.github/workflows/test.yml b/.github/workflows/turbopack-test.yml similarity index 59% rename from .github/workflows/test.yml rename to .github/workflows/turbopack-test.yml index e21ecae912661..8ade77abb9046 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/turbopack-test.yml @@ -55,7 +55,9 @@ jobs: with: PATTERNS: | .github/actions/** - .github/workflows/test.yml + .github/workflows/turbopack-test.yml + .github/workflows/test-turbopack-rust-bench-test.yml + .github/workflows/pr-clean-caches.yml - name: Root cargo related changes id: cargo @@ -65,13 +67,6 @@ jobs: Cargo.* rust-toolchain - - name: Turborepo version changes - id: turborepo_version - uses: technote-space/get-diff-action@v6 - with: - PATTERNS: | - version.txt - - name: Rust related changes id: rust uses: technote-space/get-diff-action@v6 @@ -131,39 +126,6 @@ jobs: !**.md !**.mdx - - name: Turborepo integration tests changes - id: turborepo_integration - uses: technote-space/get-diff-action@v6 - with: - PATTERNS: | - turborepo-tests/integration/** - turborepo-tests/helpers/** - - - name: Examples related changes - id: examples - uses: technote-space/get-diff-action@v6 - with: - PATTERNS: | - examples/** - turborepo-tests/example-*/** - turborepo-tests/helpers/** - !**.md - !**.mdx - - - name: Turborepo JS Package related changes - id: turborepo_js - uses: technote-space/get-diff-action@v6 - with: - PATTERNS: | - packages/** - - - name: Docs related changes - id: docs - uses: technote-space/get-diff-action@v6 - with: - PATTERNS: | - docs/** - - name: Formatting related changes id: format uses: technote-space/get-diff-action@v6 @@ -172,227 +134,13 @@ jobs: **/*.{yml,yaml,md,mdx,js,jsx,ts,tsx,json,toml,css} outputs: + turbopack_typescript: ${{ steps.ci.outputs.diff != '' || steps.turbopack_typescript.outputs.diff != '' }} rust: ${{ steps.ci.outputs.diff != '' || steps.rust.outputs.diff != '' }} - cargo_only: ${{ steps.ci.outputs.diff != '' || (steps.cargo.outputs.diff != '' && steps.turbopack.outputs.diff == '' && steps.turborepo_rust.outputs.diff == '') }} + turbopack: ${{ steps.ci.outputs.diff != '' || steps.turbopack.outputs.diff != '' }} # We only test workspace dependency changes on main, not on PRs to speed up CI cargo_on_main: ${{ steps.ci.outputs.diff != '' || (steps.cargo.outputs.diff != '' && github.event_name == 'push' && github.ref == 'refs/heads/main') }} - turbopack: ${{ steps.ci.outputs.diff != '' || steps.turbopack.outputs.diff != '' }} - turbopack_typescript: ${{ steps.ci.outputs.diff != '' || steps.turbopack_typescript.outputs.diff != '' }} - turborepo_rust: ${{ steps.ci.outputs.diff != '' || steps.turborepo_rust.outputs.diff != '' }} + cargo_only: ${{ steps.ci.outputs.diff != '' || (steps.cargo.outputs.diff != '' && steps.turbopack.outputs.diff == '' && steps.turborepo_rust.outputs.diff == '') }} turbopack_bench: ${{ steps.ci.outputs.diff != '' || steps.turbopack_bench.outputs.diff != '' }} - turborepo_build: ${{ steps.ci.outputs.diff != '' || steps.turborepo_rust.outputs.diff != '' || steps.turborepo_integration.outputs.diff != ''}} - turborepo_integration: ${{ steps.ci.outputs.diff != '' || steps.turborepo_rust.outputs.diff != '' || steps.turborepo_integration.outputs.diff != '' }} - examples: ${{ steps.ci.outputs.diff != '' || steps.examples.outputs.diff != '' || steps.turborepo_version.outputs.diff != '' }} - turborepo_js: ${{ steps.ci.outputs.diff != '' || steps.turborepo_js.outputs.diff != '' }} - docs: ${{ steps.ci.outputs.diff != '' || steps.docs.outputs.diff != '' }} - format: ${{ steps.ci.outputs.diff != '' || steps.format.outputs.diff != '' }} - push: ${{ steps.ci.outputs.diff != '' || github.event_name == 'push' }} - tag: ${{ steps.ci.outputs.diff != '' || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/node-file-trace')) }} - main_push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - tag_push: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/node-file-trace') }} - - build_turborepo: - name: Build Turborepo - needs: determine_jobs - if: needs.determine_jobs.outputs.turborepo_build == 'true' - runs-on: ${{ matrix.os.runner }} - strategy: - fail-fast: false - matrix: - os: - - name: ubuntu - runner: - - "self-hosted" - - "linux" - - "x64" - - "metal" - - name: macos - runner: macos-12 - - name: windows - runner: windows-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Run sccache-cache - uses: mozilla-actions/sccache-action@v0.0.3 - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - windows: ${{ matrix.os.runner == 'windows-latest' }} - github-token: "${{ secrets.GITHUB_TOKEN }}" - - - name: Install Global Turbo - uses: ./.github/actions/install-global-turbo - - # 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 - turbo run build --filter=cli --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 }} - - - name: Run sccache stat for check - shell: bash - run: ${SCCACHE_PATH} --show-stats - if: ${{ !github.event.pull_request.head.repo.fork }} - - turborepo_integration: - name: Turborepo Integration - needs: [determine_jobs, build_turborepo] - if: needs.determine_jobs.outputs.turborepo_integration == 'true' - runs-on: ${{ matrix.os.runner }} - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - os: - - runner: ubuntu-latest - - runner: macos-12 - - 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@v3 - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - windows: ${{ matrix.os.runner == 'windows-latest' }} - github-token: "${{ secrets.GITHUB_TOKEN }}" - - - name: Install Global Turbo - uses: ./.github/actions/install-global-turbo - - - name: Setup Graphviz - uses: ts-graphviz/setup-graphviz@v1 - with: - macos-skip-brew-update: "true" - env: - HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: true - - - name: Cache Prysk - id: cache-prysk - uses: actions/cache@v3 - with: - path: cli/.cram_env - key: prysk-venv-${{ matrix.os.runner }} - - - name: Integration Tests - run: turbo run test --filter=turborepo-tests-integration --color --env-mode=strict --token=${{ secrets.TURBO_TOKEN }} --team=${{ vars.TURBO_TEAM }} - - turborepo_examples: - name: Turborepo Examples - needs: [determine_jobs] - if: needs.determine_jobs.outputs.examples == 'true' - timeout-minutes: 40 - - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - # Disable corepack. actions/setup-node invokes other package managers and - # that causes corepack to throw an error, so we disable it first. - - name: Disable corepack - shell: bash - run: corepack disable - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - - - name: Install Global Turbo - uses: ./.github/actions/install-global-turbo - - - name: Check examples - shell: bash - # Concurrency being 1 is a big hammer here. - # It's a quick fix for non-deterministic behaviors we're seeing around package resolution. - # We could likely do some hacking to reparallelize this, but it's not worth it right now. - run: turbo run test --filter="@turborepo-examples-tests/*" --continue --token=${{ secrets.TURBO_TOKEN }} --team=${{ vars.TURBO_TEAM }} --env-mode=strict --concurrency=1 - - # Disable corepack again. actions/setup-node's "Post" step runs at the end of - # this job invokes other package managers, and corepack throws an error. - # (corepack was enabled from inside the tests above). - - name: Disable corepack again - shell: bash - run: corepack disable - - js_packages: - name: JS Package Tests - timeout-minutes: 30 - if: needs.determine_jobs.outputs.turborepo_js == 'true' || needs.determine_jobs.outputs.docs == 'true' - needs: [determine_jobs] - runs-on: ${{ matrix.os.runner }} - strategy: - fail-fast: false - matrix: - os: - - name: ubuntu - runner: - - "self-hosted" - - "linux" - - "x64" - - "metal" - - name: macos - runner: macos-12 - env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} - TURBO_REMOTE_ONLY: true - - steps: - # on main -> current + prev commit - # pr -> pr commits + base commit - - name: Determine fetch depth - id: fetch-depth - run: | - echo "depth=$(( ${{ github.event.pull_request.commits || 1 }} + 1 ))" >> $GITHUB_OUTPUT - - - name: Checkout - uses: actions/checkout@v3 - with: - ref: ${{ github.ref }} - fetch-depth: ${{ steps.fetch-depth.outputs.depth }} - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - node-version: "20" - - - name: Install Global Turbo - uses: ./.github/actions/install-global-turbo - - - name: Run tests - # We manually set TURBO_API to an empty string to override Hetzner env - # We filter out turborepo-repository because it's a native package and needs - # to run when turbo core changes. This job (`js_packages`) does not run on turborpeo core - # changes, and we don't want to enable that beahvior for _all_ our JS packages. - run: | - TURBO_API= turbo run check-types test --filter=docs --filter="!turborepo-repository" --filter={./packages/*}...[${{ github.event.pull_request.base.sha || 'HEAD^1' }}] --color --env-mode=strict turbopack_typescript: name: Turbopack TypeScript files @@ -425,87 +173,6 @@ jobs: working-directory: crates/turbopack-ecmascript-runtime/js run: pnpm run check - rust_lint: - needs: [determine_jobs] - if: needs.determine_jobs.outputs.rust == 'true' - name: Rust lints - runs-on: - - "self-hosted" - - "linux" - - "x64" - - "metal" - steps: - - name: Checkout - uses: actions/checkout@v3 - - - 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/cli@0.5.2 format --check - - - name: Check licenses - uses: EmbarkStudios/cargo-deny-action@v1 - with: - command: check licenses - - turborepo_rust_check: - needs: [determine_jobs] - # We test dependency changes only on main - if: | - (needs.determine_jobs.outputs.rust == 'true' && needs.determine_jobs.outputs.turborepo_rust == 'true') || - needs.determine_jobs.outputs.cargo_on_main == 'true' || - needs.determine_jobs.outputs.cargo_only == 'true' - name: Turborepo rust check - runs-on: - - "self-hosted" - - "linux" - - "x64" - - "metal" - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - - - name: Run cargo check - run: | - cargo groups check turborepo-libraries --features rustls-tls - - turborepo_rust_clippy: - needs: [turborepo_rust_check] - name: Turborepo rust clippy - runs-on: - - "self-hosted" - - "linux" - - "x64" - - "metal" - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - - - name: Run cargo clippy - run: | - cargo groups clippy turborepo-libraries --features rustls-tls -- --deny clippy::all - - - name: Run ast-grep lints - run: | - npx --package @ast-grep/cli -- ast-grep scan $(cargo groups list turborepo-libraries | awk '{ print $2 }' | tr '\n' ' ') - turbopack_rust_check: needs: [determine_jobs] # We test dependency changes only on main @@ -638,48 +305,6 @@ jobs: filePath: ./out.log comment_tag: check_next_swc_turbopack - turborepo_rust_test: - needs: [turborepo_rust_check] - strategy: - fail-fast: false - matrix: - os: - - name: ubuntu - runner: - - "self-hosted" - - "linux" - - "x64" - - "metal" - nextest: linux - - name: macos - runner: macos-12 - 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@v3 - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - windows: ${{ matrix.os.runner == 'windows-latest' }} - github-token: "${{ secrets.GITHUB_TOKEN }}" - - - name: Run tests - timeout-minutes: 120 - run: | - cargo groups test turborepo-libraries - turbopack_rust_test1: needs: [turbopack_rust_check] runs-on: @@ -843,53 +468,15 @@ jobs: os: ${{ matrix.os.name }} all: ${{ needs.determine_jobs.outputs.turbopack_bench == 'true' }} - format_lint: - name: Formatting - runs-on: - - "self-hosted" - - "linux" - - "x64" - - "metal" - needs: determine_jobs - if: needs.determine_jobs.outputs.format == 'true' - env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} - TURBO_REMOTE_ONLY: true - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" - - - name: Install Global Turbo - uses: ./.github/actions/install-global-turbo - - - name: Lint - # Filters some workspaces out: - # - Other `@vercel/*` packages because ?? - run: turbo run lint --filter=!@vercel/devlow-bench --filter=!@vercel/experimental-nft-next-plugin --filter=!@vercel/experimental-nft-next-plugin --filter=!turbopack-bump-action --filter=!next-integration-stat --env-mode=strict - final: name: Ok needs: - determine_jobs - - turborepo_examples - - turborepo_integration - - js_packages - - rust_lint - - turborepo_rust_check - - turborepo_rust_clippy - turbopack_rust_check - turbopack_rust_clippy - turbopack_rust_test1 - turbopack_rust_test_bench1 - turbopack_typescript - - turborepo_rust_test - - format_lint if: always() permissions: contents: read @@ -913,19 +500,11 @@ jobs: fi } subjob ${{needs.determine_jobs.result}} "Determining jobs" - subjob ${{needs.turborepo_examples.result}} "Turborepo examples" - subjob ${{needs.turborepo_integration.result}} "Turborepo integration tests" - subjob ${{needs.js_packages.result}} "JS Package tests" - subjob ${{needs.rust_lint.result}} "Rust lints" - subjob ${{needs.turborepo_rust_check.result}} "Turborepo Rust checks" - subjob ${{needs.turborepo_rust_clippy.result}} "Turborepo Rust clippy" subjob ${{needs.turbopack_rust_check.result}} "Turbopack Rust checks" subjob ${{needs.turbopack_rust_clippy.result}} "Turbopack Rust clippy" subjob ${{needs.turbopack_rust_test1.result}} "Turbopack Rust tests (linux)" subjob ${{needs.turbopack_rust_test_bench1.result}} "Turbopack Rust benchmark tests (linux)" subjob ${{needs.turbopack_typescript.result}} "Turbopack Typescript checks" - subjob ${{needs.turborepo_rust_test.result}} "Turborepo Rust tests" - subjob ${{needs.format_lint.result}} "Formatting" if [ "$cancelled" = "true" ]; then echo "cancelled=true" >> $GITHUB_OUTPUT elif [ "$failure" = "true" ]; then @@ -1025,11 +604,6 @@ jobs: needs: - final - determine_jobs - - turborepo_examples - - turborepo_integration - - rust_lint - - turborepo_rust_check - - turborepo_rust_clippy - turbopack_rust_check - turbopack_rust_clippy - turbopack_rust_test1 @@ -1037,8 +611,6 @@ jobs: - turbopack_rust_test_bench1 - turbopack_rust_test_bench2 - turbopack_typescript - - turborepo_rust_test - - format_lint if: always() permissions: contents: read @@ -1063,11 +635,6 @@ jobs: fi } subjob ${{needs.determine_jobs.result}} "Determining jobs" - subjob ${{needs.turborepo_examples.result}} "Turborepo examples" - subjob ${{needs.turborepo_integration.result}} "Turborepo integration tests" - subjob ${{needs.rust_lint.result}} "Rust lints" - subjob ${{needs.turborepo_rust_check.result}} "Turborepo Rust checks" - subjob ${{needs.turborepo_rust_clippy.result}} "Turborepo Rust clippy" subjob ${{needs.turbopack_rust_check.result}} "Turbopack Rust checks" subjob ${{needs.turbopack_rust_clippy.result}} "Turbopack Rust clippy" subjob ${{needs.turbopack_rust_test1.result}} "Turbopack Rust tests (linux)" @@ -1075,8 +642,6 @@ jobs: subjob ${{needs.turbopack_rust_test_bench1.result}} "Turbopack Rust benchmark tests (linux)" subjob ${{needs.turbopack_rust_test_bench2.result}} "Turbopack Rust benchmark tests (mac/win, non-blocking)" subjob ${{needs.turbopack_typescript.result}} "Turbopack Typescript checks" - subjob ${{needs.turborepo_rust_test.result}} "TurboRepo Rust tests" - subjob ${{needs.format_lint.result}} "Formatting" if [ "$cancelled" = "true" ]; then echo "cancelled=true" >> $GITHUB_OUTPUT elif [ "$failure" = "true" ]; then diff --git a/.github/workflows/turborepo-test.yml b/.github/workflows/turborepo-test.yml new file mode 100644 index 0000000000000..d419086273fc9 --- /dev/null +++ b/.github/workflows/turborepo-test.yml @@ -0,0 +1,418 @@ +name: 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: + determine_jobs: + name: Determine jobs to run + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Find PR Comment + id: comment + if: github.event_name == 'pull_request' + uses: peter-evans/find-comment@v2 + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: "github-actions[bot]" + body-includes: "" + + - name: Create or update PR comment + if: github.event_name == 'pull_request' && steps.comment.outputs.comment-id != '' + uses: peter-evans/create-or-update-comment@v2 + continue-on-error: true + with: + comment-id: ${{ steps.comment.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + ## ⏳ CI is running again... ⏳ + + [Wait for it...](https://github.com/vercel/turbo/actions/runs/${{ github.run_id }}) + + + + edit-mode: replace + + - name: Checkout + uses: actions/checkout@v3 + + - name: CI related changes + id: ci + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + .github/actions/** + .github/workflows/test.yml + + - name: Root cargo related changes + id: cargo + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + Cargo.* + rust-toolchain + + - name: Turborepo version changes + id: turborepo_version + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + version.txt + + - name: Rust related changes + id: rust + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + pnpm-lock.yaml + package.json + Cargo.** + crates/** + shim/** + xtask/** + .cargo/** + rust-toolchain + !**.md + !**.mdx + + - name: Turborepo Rust related changes + id: turborepo_rust + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + pnpm-lock.yaml + package.json + crates/turborepo*/** + .cargo/** + rust-toolchain + !**.md + !**.mdx + + - name: Turborepo integration tests changes + id: turborepo_integration + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + turborepo-tests/integration/** + turborepo-tests/helpers/** + + - name: Examples related changes + id: examples + uses: technote-space/get-diff-action@v6 + with: + PATTERNS: | + examples/** + turborepo-tests/example-*/** + turborepo-tests/helpers/** + !**.md + !**.mdx + + outputs: + rust: ${{ steps.ci.outputs.diff != '' || steps.rust.outputs.diff != '' }} + cargo_only: ${{ steps.ci.outputs.diff != '' || (steps.cargo.outputs.diff != '' && steps.turborepo_rust.outputs.diff == '') }} + # We only test workspace dependency changes on main, not on PRs to speed up CI + cargo_on_main: ${{ steps.ci.outputs.diff != '' || (steps.cargo.outputs.diff != '' && github.event_name == 'push' && github.ref == 'refs/heads/main') }} + turborepo_rust: ${{ steps.ci.outputs.diff != '' || steps.turborepo_rust.outputs.diff != '' }} + turborepo_build: ${{ steps.ci.outputs.diff != '' || steps.turborepo_rust.outputs.diff != '' || steps.turborepo_integration.outputs.diff != ''}} + turborepo_integration: ${{ steps.ci.outputs.diff != '' || steps.turborepo_rust.outputs.diff != '' || steps.turborepo_integration.outputs.diff != '' }} + examples: ${{ steps.ci.outputs.diff != '' || steps.examples.outputs.diff != '' || steps.turborepo_version.outputs.diff != '' }} + + build_turborepo: + name: Build Turborepo + needs: determine_jobs + if: needs.determine_jobs.outputs.turborepo_build == 'true' + runs-on: ${{ matrix.os.runner }} + strategy: + fail-fast: false + matrix: + os: + - name: ubuntu + runner: + - "self-hosted" + - "linux" + - "x64" + - "metal" + - name: macos + runner: macos-12 + - name: windows + runner: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + windows: ${{ matrix.os.runner == 'windows-latest' }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Install Global Turbo + uses: ./.github/actions/install-global-turbo + + # 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 + turbo run build --filter=cli --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 }} + + - name: Run sccache stat for check + shell: bash + run: ${SCCACHE_PATH} --show-stats + if: ${{ !github.event.pull_request.head.repo.fork }} + + integration: + name: Turborepo Integration + needs: [determine_jobs, build_turborepo] + if: needs.determine_jobs.outputs.turborepo_integration == 'true' + runs-on: ${{ matrix.os.runner }} + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + os: + - runner: ubuntu-latest + - runner: macos-12 + - 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@v3 + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + windows: ${{ matrix.os.runner == 'windows-latest' }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Install Global Turbo + uses: ./.github/actions/install-global-turbo + + - name: Setup Graphviz + uses: ts-graphviz/setup-graphviz@v1 + with: + macos-skip-brew-update: "true" + env: + HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: true + + - name: Cache Prysk + id: cache-prysk + uses: actions/cache@v3 + with: + path: cli/.cram_env + key: prysk-venv-${{ matrix.os.runner }} + + - name: Integration Tests + run: turbo run test --filter=turborepo-tests-integration --color --env-mode=strict --token=${{ secrets.TURBO_TOKEN }} --team=${{ vars.TURBO_TEAM }} + + examples: + name: Turborepo Examples + needs: [determine_jobs] + if: needs.determine_jobs.outputs.examples == 'true' + timeout-minutes: 40 + + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + # Disable corepack. actions/setup-node invokes other package managers and + # that causes corepack to throw an error, so we disable it first. + - name: Disable corepack + shell: bash + run: corepack disable + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Install Global Turbo + uses: ./.github/actions/install-global-turbo + + - name: Check examples + shell: bash + # Concurrency being 1 is a big hammer here. + # It's a quick fix for non-deterministic behaviors we're seeing around package resolution. + # We could likely do some hacking to reparallelize this, but it's not worth it right now. + run: turbo run test --filter="@turborepo-examples-tests/*" --continue --token=${{ secrets.TURBO_TOKEN }} --team=${{ vars.TURBO_TEAM }} --env-mode=strict --concurrency=1 + + # Disable corepack again. actions/setup-node's "Post" step runs at the end of + # this job invokes other package managers, and corepack throws an error. + # (corepack was enabled from inside the tests above). + - name: Disable corepack again + shell: bash + run: corepack disable + + rust_lint: + needs: [determine_jobs] + if: needs.determine_jobs.outputs.rust == 'true' + name: Rust lints + runs-on: + - "self-hosted" + - "linux" + - "x64" + - "metal" + steps: + - name: Checkout + uses: actions/checkout@v3 + + - 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/cli@0.5.2 format --check + + - name: Check licenses + uses: EmbarkStudios/cargo-deny-action@v1 + with: + command: check licenses + + rust_check: + needs: [determine_jobs] + # We test dependency changes only on main + if: | + (needs.determine_jobs.outputs.rust == 'true' && needs.determine_jobs.outputs.turborepo_rust == 'true') || + needs.determine_jobs.outputs.cargo_on_main == 'true' || + needs.determine_jobs.outputs.cargo_only == 'true' + name: Turborepo rust check + runs-on: + - "self-hosted" + - "linux" + - "x64" + - "metal" + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Run cargo check + run: | + cargo groups check turborepo-libraries --features rustls-tls + + rust_clippy: + needs: [rust_check] + name: Turborepo rust clippy + runs-on: + - "self-hosted" + - "linux" + - "x64" + - "metal" + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Run cargo clippy + run: | + cargo groups clippy turborepo-libraries --features rustls-tls -- --deny clippy::all + + - name: Run ast-grep lints + run: | + npx --package @ast-grep/cli -- ast-grep scan $(cargo groups list turborepo-libraries | awk '{ print $2 }' | tr '\n' ' ') + + rust_test: + needs: [rust_check] + strategy: + fail-fast: false + matrix: + os: + - name: ubuntu + runner: + - "self-hosted" + - "linux" + - "x64" + - "metal" + nextest: linux + - name: macos + runner: macos-12 + 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@v3 + + - name: Setup Turborepo Environment + uses: ./.github/actions/setup-turborepo-environment + with: + windows: ${{ matrix.os.runner == 'windows-latest' }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Run tests + timeout-minutes: 120 + run: | + cargo groups test turborepo-libraries + + cleanup: + name: Cleanup + needs: + - determine_jobs + - build_turborepo + - integration + - examples + - rust_lint + - rust_check + - rust_clippy + - rust_test + if: always() + uses: ./.github/workflows/pr-clean-caches.yml + secrets: inherit From c620e8c7ed5c58381f2dea616eb590a6c19f6359 Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Tue, 23 Apr 2024 16:21:24 -0500 Subject: [PATCH 2/7] names --- .github/workflows/lint.yml | 2 +- .github/workflows/test-js-packages.yml | 2 +- .github/workflows/turbopack-test.yml | 2 +- .github/workflows/turborepo-test.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a8705000a08bd..00c0eaae3c343 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,4 +1,4 @@ -name: Test +name: Lint on: push: branches: [main] diff --git a/.github/workflows/test-js-packages.yml b/.github/workflows/test-js-packages.yml index ea5a7e1b40679..0f0b68dd31251 100644 --- a/.github/workflows/test-js-packages.yml +++ b/.github/workflows/test-js-packages.yml @@ -1,4 +1,4 @@ -name: Test +name: JS Package Tests on: push: branches: [main] diff --git a/.github/workflows/turbopack-test.yml b/.github/workflows/turbopack-test.yml index 8ade77abb9046..425128f6f8db8 100644 --- a/.github/workflows/turbopack-test.yml +++ b/.github/workflows/turbopack-test.yml @@ -1,4 +1,4 @@ -name: Test +name: Turbopack Test on: push: branches: [main] diff --git a/.github/workflows/turborepo-test.yml b/.github/workflows/turborepo-test.yml index d419086273fc9..e8b77590647a1 100644 --- a/.github/workflows/turborepo-test.yml +++ b/.github/workflows/turborepo-test.yml @@ -1,4 +1,4 @@ -name: Test +name: Turborepo Test on: push: branches: [main] From c08e8ae3695cfffb7b596706302409a95483808b Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Tue, 23 Apr 2024 16:23:50 -0500 Subject: [PATCH 3/7] dont need full turborepo env to run lint --- .github/workflows/lint.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 00c0eaae3c343..4b5d92f807c0d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -106,10 +106,10 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Setup Turborepo Environment - uses: ./.github/actions/setup-turborepo-environment + - name: "Setup Node" + uses: ./.github/actions/setup-node with: - github-token: "${{ secrets.GITHUB_TOKEN }}" + extra-flags: --no-optional - name: Install Global Turbo uses: ./.github/actions/install-global-turbo From 12ee60c04529d003ee2d9809de52532e5507e6ec Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Tue, 23 Apr 2024 16:25:23 -0500 Subject: [PATCH 4/7] run lint with node 20 --- .github/workflows/lint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4b5d92f807c0d..c3337e8383f55 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -110,6 +110,7 @@ jobs: uses: ./.github/actions/setup-node with: extra-flags: --no-optional + node-version: "20" - name: Install Global Turbo uses: ./.github/actions/install-global-turbo From 987fe978fb1e96dfd22c80a73c72a6fccdcf1542 Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Tue, 23 Apr 2024 16:44:51 -0500 Subject: [PATCH 5/7] include workflow file for turborepo tests --- .github/workflows/turborepo-test.yml | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/.github/workflows/turborepo-test.yml b/.github/workflows/turborepo-test.yml index e8b77590647a1..9317e74322e57 100644 --- a/.github/workflows/turborepo-test.yml +++ b/.github/workflows/turborepo-test.yml @@ -21,31 +21,6 @@ jobs: contents: read pull-requests: write steps: - - name: Find PR Comment - id: comment - if: github.event_name == 'pull_request' - uses: peter-evans/find-comment@v2 - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: "github-actions[bot]" - body-includes: "" - - - name: Create or update PR comment - if: github.event_name == 'pull_request' && steps.comment.outputs.comment-id != '' - uses: peter-evans/create-or-update-comment@v2 - continue-on-error: true - with: - comment-id: ${{ steps.comment.outputs.comment-id }} - issue-number: ${{ github.event.pull_request.number }} - body: | - ## ⏳ CI is running again... ⏳ - - [Wait for it...](https://github.com/vercel/turbo/actions/runs/${{ github.run_id }}) - - - - edit-mode: replace - - name: Checkout uses: actions/checkout@v3 @@ -55,7 +30,7 @@ jobs: with: PATTERNS: | .github/actions/** - .github/workflows/test.yml + .github/workflows/turborepo-test.yml - name: Root cargo related changes id: cargo From 970f8fbcff83d376dfb4b0adb11e927c882e68ab Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Tue, 23 Apr 2024 20:07:18 -0500 Subject: [PATCH 6/7] Update .github/workflows/lint.yml --- .github/workflows/lint.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c3337e8383f55..ba84099593b26 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -116,8 +116,7 @@ jobs: uses: ./.github/actions/install-global-turbo - name: Lint - # Filters some workspaces out: - # - Other `@vercel/*` packages because ?? + # Filters some packages out, but not sure why run: | turbo run lint \ --filter=!@vercel/devlow-bench \ From 440dc9d4caf0183a1d5391da42b0be1f50896ce6 Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Fri, 17 May 2024 16:58:11 -0500 Subject: [PATCH 7/7] revert changes --- .../src/ecmascript/runtime.rs | 4 ++-- .../monorepos/configuring-workspaces.mdx | 21 +++++++++---------- .../core-concepts/monorepos/running-tasks.mdx | 18 ++++++++-------- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/crates/turbopack-browser/src/ecmascript/runtime.rs b/crates/turbopack-browser/src/ecmascript/runtime.rs index 71fcbee4c0e55..c306b2cc043a7 100644 --- a/crates/turbopack-browser/src/ecmascript/runtime.rs +++ b/crates/turbopack-browser/src/ecmascript/runtime.rs @@ -6,8 +6,8 @@ use turbopack_core::{ ident::AssetIdent, }; use turbopack_ecmascript::chunk::{ - ChunkingContext, EcmascriptChunk, EcmascriptChunkPlaceables, EcmascriptChunkRuntime, - EcmascriptChunkRuntimeContent, + EcmascriptChunk, EcmascriptChunkPlaceables, EcmascriptChunkRuntime, + EcmascriptChunkRuntimeContent, ChunkingContext, }; use crate::ecmascript::content::EcmascriptDevChunkContent; diff --git a/docs/pages/repo/docs/core-concepts/monorepos/configuring-workspaces.mdx b/docs/pages/repo/docs/core-concepts/monorepos/configuring-workspaces.mdx index 96b4d7a52ce98..79ca2eb6e1339 100644 --- a/docs/pages/repo/docs/core-concepts/monorepos/configuring-workspaces.mdx +++ b/docs/pages/repo/docs/core-concepts/monorepos/configuring-workspaces.mdx @@ -30,14 +30,14 @@ key: // custom configuration for the build task in this workspace }, // new tasks only available in this workspace - "special-task": {} + "special-task": {}, } } ``` - For now, the only valid value for the `extends` key is `["//"]`. `//` is a - special name used to identify the root directory of the monorepo. + For now, the only valid value for the `extends` key is `["//"]`. +`//` is a special name used to identify the root directory of the monorepo. Configuration in a workspace can override any of [the configurations for a @@ -59,7 +59,7 @@ with a single `turbo.json` at the root like this: { "pipeline": { "build": { - "outputs": [".next/**", "!.next/cache/**", ".svelte-kit/**"] + "outputs": [".next/**", "!.next/cache/**", ".svelte-kit/**"], } } } @@ -151,8 +151,8 @@ but continue to inherit any other tasks defined at the root. At first glance, Workspace Configurations may sound a lot like the [`workspace#task` syntax][3] in the root `turbo.json`. The features are -similar, but have one significant difference: when you declare a Workspace-specific -task configuration in the root `turbo.json`, it _completely_ overwrites the baseline +similar, but have one significant difference: when you declare a Workspace-specific +task configuration in the root `turbo.json`, it _completely_ overwrites the baseline task configuration. With a Workspace Configuration, the task configuration is merged instead. @@ -166,7 +166,7 @@ app again. Without a Workspace-specific task, you might configure your root "build": { "outputMode": "hash-only", "inputs": ["src/**"], - "outputs": [".next/**", "!.next/cache/**"] + "outputs": [".next/**", "!.next/cache/**"], }, "my-sveltekit-app#build": { "outputMode": "hash-only", // must duplicate this @@ -186,8 +186,7 @@ you don't need to duplicate them. You only need to override `outputs` Although there are no plans to remove Workspace-specific task configurations, - we expect that Workspace Configurations can be used for most use cases - instead. + we expect that Workspace Configurations can be used for most use cases instead. ## Limitations @@ -219,7 +218,7 @@ they are intentional, rather than accidental: }, "build": { // ✅ just use the task name! - } + }, } } ``` @@ -232,7 +231,7 @@ they are intentional, rather than accidental: "build": { // ✅ It's still ok to have workspace#task in dependsOn! "dependsOn": ["some-pkg#compile"] - } + }, } } ``` diff --git a/docs/pages/repo/docs/core-concepts/monorepos/running-tasks.mdx b/docs/pages/repo/docs/core-concepts/monorepos/running-tasks.mdx index bb304f8ad864a..d6f785e7f8d41 100644 --- a/docs/pages/repo/docs/core-concepts/monorepos/running-tasks.mdx +++ b/docs/pages/repo/docs/core-concepts/monorepos/running-tasks.mdx @@ -5,7 +5,7 @@ description: Turborepo can run all your tasks. import { Callout } from "../../../../../components/Callout"; import HeartIcon from "@heroicons/react/solid/HeartIcon"; -import { Tabs, Tab } from "../../../../../components/Tabs"; +import { Tabs, Tab } from '../../../../../components/Tabs' # Running Tasks in a Monorepo @@ -94,10 +94,10 @@ monorepo. Here's a kitchen sink example: "outputs": [".next/**", "!.next/cache/**", ".svelte-kit/**"] }, "deploy": { - // A workspace's `deploy` task depends on the `build`, - // `test`, and `lint` tasks of the same workspace - // being completed. - "dependsOn": ["build", "test", "lint"] + // A workspace's `deploy` task depends on the `build`, + // `test`, and `lint` tasks of the same workspace + // being completed. + "dependsOn": ["build", "test", "lint"] }, "test": { // A workspace's `test` task depends on that workspace's @@ -140,12 +140,12 @@ A sample pipeline that defines the root task `format` and opts the root into `te "outputs": [".next/**", "!.next/cache/**", ".svelte-kit/**"] }, "test": { - "dependsOn": ["^build"] + "dependsOn": ["^build"], }, // This will cause the "test" script to be included when // "turbo run test" is run "//#test": { - "dependsOn": [] + "dependsOn": [], }, // This will cause the "format" script in the root package.json // to be run when "turbo run format" is run. Since the general @@ -247,6 +247,6 @@ A turbo build will only execute the `build` script for the `web` and `docs` work Turborepo's Pipeline API design and this page of documentation was inspired by [Microsoft's Lage project](https://microsoft.github.io/lage/docs/Tutorial/pipeline#defining-a-pipeline). - Shoutout to [Kenneth Chau](https://x.com/kenneth_chau) for the idea of fanning - out tasks in such a concise and elegant way. + Shoutout to [Kenneth Chau](https://x.com/kenneth_chau) for the idea of + fanning out tasks in such a concise and elegant way.