From 4e3bd4e282297378377ea89b11fd910b81070af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Gonz=C3=A1lez?= <7822554+AlexTMjugador@users.noreply.github.com> Date: Fri, 13 Jun 2025 01:47:28 +0200 Subject: [PATCH] enh(ci): optimize Turbo CI check workflow, track Rust and Node toolchain versions in well-known files (#3776) * enh(ci): optimize Turbo CI check workflow, track Rust and Node toolchain versions in well-known files * fix(ci): build `sqlx-cli` with `rustls` to fix Postgres TLS failures --- .github/workflows/theseus-release.yml | 14 +-- .github/workflows/turbo-ci.yml | 99 ++++++++++--------- .nvmrc | 1 + apps/app-frontend/package.json | 3 +- apps/app-playground/package.json | 6 +- apps/app/package.json | 8 +- apps/daedalus_client/package.json | 6 +- apps/docs/package.json | 5 +- apps/frontend/package.json | 3 +- apps/labrinth/package.json | 11 ++- docker-compose.yml | 1 - package.json | 1 + packages/app-lib/package.json | 6 +- packages/daedalus/package.json | 7 +- pnpm-lock.yaml | 134 ++++++++++++++++++++++++++ rust-toolchain.toml | 2 + turbo.json | 40 +++++++- 17 files changed, 263 insertions(+), 84 deletions(-) create mode 100644 .nvmrc create mode 100644 rust-toolchain.toml diff --git a/.github/workflows/theseus-release.yml b/.github/workflows/theseus-release.yml index a34f5ae17..1cbf4e884 100644 --- a/.github/workflows/theseus-release.yml +++ b/.github/workflows/theseus-release.yml @@ -32,16 +32,16 @@ jobs: - name: Rust setup (mac) if: startsWith(matrix.platform, 'macos') - uses: dtolnay/rust-toolchain@stable + uses: actions-rust-lang/setup-rust-toolchain@v1 with: - components: rustfmt, clippy - targets: aarch64-apple-darwin, x86_64-apple-darwin + rustflags: '' + target: x86_64-apple-darwin - name: Rust setup if: "!startsWith(matrix.platform, 'macos')" - uses: dtolnay/rust-toolchain@stable + uses: actions-rust-lang/setup-rust-toolchain@v1 with: - components: rustfmt, clippy + rustflags: '' - name: Setup rust cache uses: actions/cache@v4 @@ -72,10 +72,10 @@ jobs: restore-keys: | ${{ runner.os }}-rust-target- - - name: Use Node.js + - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version-file: .nvmrc - name: Install pnpm via corepack shell: bash diff --git a/.github/workflows/turbo-ci.yml b/.github/workflows/turbo-ci.yml index 0061f621a..c5506c99b 100644 --- a/.github/workflows/turbo-ci.yml +++ b/.github/workflows/turbo-ci.yml @@ -2,7 +2,7 @@ name: CI on: push: - branches: ['main'] + branches: [main] pull_request: types: [opened, synchronize] merge_group: @@ -10,71 +10,78 @@ on: jobs: build: - name: Build, Test, and Lint + name: Lint and Test runs-on: ubuntu-22.04 + env: + # Ensure pnpm output is colored in GitHub Actions logs + FORCE_COLOR: 3 + # Make cargo nextest successfully ignore projects without tests + NEXTEST_NO_TESTS: pass + steps: - - name: Check out code + - name: 📥 Check out code uses: actions/checkout@v4 with: fetch-depth: 2 - - name: Cache turbo build setup - uses: actions/cache@v4 - with: - path: .turbo - key: ${{ runner.os }}-turbo-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-turbo- + # This is required because Tauri depends on the frontend build directory to + # exist, but it is not created until the frontend is built, which may happen + # after the backend is built + - name: 📁 Create Tauri frontend build directories + run: mkdir -p apps/app-frontend/dist - - name: Install build dependencies + - name: 🧰 Install build dependencies run: | sudo apt-get update - sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + sudo apt-get install -yq libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev - - name: Setup Node.JS environment + - name: 🧰 Install pnpm + uses: pnpm/action-setup@v4 + + - name: 🧰 Setup Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version-file: .nvmrc + cache: pnpm - - name: Install pnpm via corepack - shell: bash - run: | - corepack enable - corepack prepare --activate - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v4 - name: Setup pnpm cache + - name: 🧰 Setup Rust toolchain + uses: actions-rust-lang/setup-rust-toolchain@v1 with: - path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- + rustflags: '' + components: clippy, rustfmt + cache: false - - name: Install dependencies + - name: 🧰 Setup nextest + uses: taiki-e/install-action@nextest + + # cargo-binstall does not have pre-built binaries for sqlx-cli, so we fall + # back to a cached cargo install + - name: 🧰 Setup cargo-sqlx + uses: AlexTMjugador/cache-cargo-install-action@feat/features-support + with: + tool: sqlx-cli + locked: false + no-default-features: true + features: rustls,postgres + + - name: 💨 Setup Turbo cache + uses: rharkor/caching-for-turbo@v1.8 + + - name: 🧰 Install dependencies run: pnpm install - - name: Build - run: pnpm build - env: - SQLX_OFFLINE: true - - - name: Lint + - name: 🔍 Lint run: pnpm lint - env: - SQLX_OFFLINE: true - - name: Start docker compose + - name: ⚙️ Start services run: docker compose up -d - - name: Test + - name: ⚙️ Setup Labrinth environment and database + working-directory: apps/labrinth + run: | + mv .env.local .env + sqlx database setup + + - name: ✔️ Test run: pnpm test - env: - SQLX_OFFLINE: true - DATABASE_URL: postgresql://labrinth:labrinth@localhost/postgres diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..ba331903d --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20.19.2 diff --git a/apps/app-frontend/package.json b/apps/app-frontend/package.json index fa6d8f926..4cfcec60d 100644 --- a/apps/app-frontend/package.json +++ b/apps/app-frontend/package.json @@ -9,7 +9,8 @@ "tsc:check": "vue-tsc --noEmit", "lint": "eslint . && prettier --check .", "fix": "eslint . --fix && prettier --write .", - "intl:extract": "formatjs extract \"{,src/components,src/composables,src/helpers,src/pages,src/store}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore '**/*.d.ts' --ignore 'node_modules' --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace" + "intl:extract": "formatjs extract \"{,src/components,src/composables,src/helpers,src/pages,src/store}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore '**/*.d.ts' --ignore 'node_modules' --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace", + "test": "vue-tsc --noEmit" }, "dependencies": { "@modrinth/assets": "workspace:*", diff --git a/apps/app-playground/package.json b/apps/app-playground/package.json index 0d76eaed8..342b3cecb 100644 --- a/apps/app-playground/package.json +++ b/apps/app-playground/package.json @@ -2,9 +2,9 @@ "name": "@modrinth/app-playground", "scripts": { "build": "cargo build --release", - "lint": "cargo fmt --check && cargo clippy --all-targets --all-features -- -D warnings", - "fix": "cargo fmt && cargo clippy --fix", + "lint": "cargo fmt --check && cargo clippy --all-targets", + "fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt", "dev": "cargo run", - "test": "cargo test" + "test": "cargo nextest run --all-targets --no-fail-fast" } } diff --git a/apps/app/package.json b/apps/app/package.json index 794bf7e0b..43f017203 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -1,12 +1,12 @@ { "name": "@modrinth/app", "scripts": { - "build": "tauri build", "tauri": "tauri", + "build": "tauri build", "dev": "tauri dev", - "test": "cargo test", - "lint": "cargo fmt --check && cargo clippy --all-targets -- -D warnings", - "fix": "cargo fmt && cargo clippy --fix" + "test": "cargo nextest run --all-targets --no-fail-fast", + "lint": "cargo fmt --check && cargo clippy --all-targets", + "fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt" }, "devDependencies": { "@tauri-apps/cli": "2.5.0" diff --git a/apps/daedalus_client/package.json b/apps/daedalus_client/package.json index 1f48075b1..f75b9d768 100644 --- a/apps/daedalus_client/package.json +++ b/apps/daedalus_client/package.json @@ -2,10 +2,10 @@ "name": "@modrinth/daedalus_client", "scripts": { "build": "cargo build --release", - "lint": "cargo fmt --check && cargo clippy --all-targets --all-features -- -D warnings", - "fix": "cargo fmt && cargo clippy --fix", + "lint": "cargo fmt --check && cargo clippy --all-targets", + "fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt", "dev": "cargo run", - "test": "cargo test" + "test": "cargo nextest run --all-targets --no-fail-fast" }, "dependencies": { "@modrinth/daedalus": "workspace:*" diff --git a/apps/docs/package.json b/apps/docs/package.json index 8ce3806e6..274ddd55c 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "astro dev", "start": "astro dev", - "build": "astro check && astro build", + "lint": "astro check", + "build": "astro build", "preview": "astro preview", "astro": "astro" }, @@ -18,4 +19,4 @@ "starlight-openapi": "^0.14.0", "typescript": "^5.8.2" } -} \ No newline at end of file +} diff --git a/apps/frontend/package.json b/apps/frontend/package.json index c04ddc418..c3b53219a 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -10,7 +10,8 @@ "postinstall": "nuxi prepare", "lint": "eslint . && prettier --check .", "fix": "eslint . --fix && prettier --write .", - "intl:extract": "formatjs extract \"{,src/components,src/composables,src/layouts,src/middleware,src/modules,src/pages,src/plugins,src/utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" \"src/error.vue\" --ignore '**/*.d.ts' --ignore 'node_modules' --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace" + "intl:extract": "formatjs extract \"{,src/components,src/composables,src/layouts,src/middleware,src/modules,src/pages,src/plugins,src/utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" \"src/error.vue\" --ignore '**/*.d.ts' --ignore 'node_modules' --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace", + "test": "nuxi build" }, "devDependencies": { "@formatjs/cli": "^6.2.12", diff --git a/apps/labrinth/package.json b/apps/labrinth/package.json index 03e662511..4d01f2043 100644 --- a/apps/labrinth/package.json +++ b/apps/labrinth/package.json @@ -2,10 +2,13 @@ "name": "@modrinth/labrinth", "scripts": { "build": "cargo build --release", - "lint": "cargo fmt --check && cargo clippy --all-targets --all-features -- -D warnings", - "fix": "cargo fmt && cargo clippy --fix", + "lint": "cargo fmt --check && cargo clippy --all-targets", + "fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt", "dev": "cargo run", - "//": "CI will fail since test takes up too much disk space. So we have it named differently.", - "test-labrinth": "cargo test" + "//": "Labrinth integration tests require a lot of disk space, so in the standard GitHub Actions", + "//": "runners we must remove useless development tools from the base image, which frees up ~20 GiB.", + "//": "The command commented out below can be used in CI to debug what is taking up space:", + "//": "sudo du -xh --max-depth=4 / | sort -rh | curl -X POST --data-urlencode content@/dev/fd/0 https://api.mclo.gs/1/log", + "test": "if-ci sudo rm -rf /usr/local/lib/android /usr/local/.ghcup /opt/hostedtoolcache/CodeQL /usr/share/swift && cargo nextest run --all-targets --no-fail-fast" } } diff --git a/docker-compose.yml b/docker-compose.yml index 4b4d073cd..0dbcd1a31 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,6 @@ services: ports: - '5432:5432' environment: - POSTGRES_DB: postgres POSTGRES_USER: labrinth POSTGRES_PASSWORD: labrinth POSTGRES_HOST_AUTH_METHOD: trust diff --git a/package.json b/package.json index 575ac166a..9e23a493d 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "intl:extract": "pnpm ui:intl:extract && pnpm web:intl:extract && pnpm app:intl:extract" }, "devDependencies": { + "if-ci": "^3.0.0", "prettier": "^3.3.2", "turbo": "^2.2.3", "vue": "^3.5.13" diff --git a/packages/app-lib/package.json b/packages/app-lib/package.json index 9c1f1e77c..d1213bbaa 100644 --- a/packages/app-lib/package.json +++ b/packages/app-lib/package.json @@ -2,8 +2,8 @@ "name": "@modrinth/app-lib", "scripts": { "build": "cargo build --release", - "lint": "cargo fmt --check && cargo clippy --all-targets -- -D warnings", - "fix": "cargo fmt && cargo clippy --fix", - "test": "cargo test" + "lint": "cargo fmt --check && cargo clippy --all-targets", + "fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt", + "test": "cargo nextest run --all-targets --no-fail-fast" } } diff --git a/packages/daedalus/package.json b/packages/daedalus/package.json index a5af9cf71..b2ee389f8 100644 --- a/packages/daedalus/package.json +++ b/packages/daedalus/package.json @@ -2,9 +2,8 @@ "name": "@modrinth/daedalus", "scripts": { "build": "cargo build --release", - "lint": "cargo fmt --check && cargo clippy --all-targets --all-features -- -D warnings", - "fix": "cargo fmt && cargo clippy --fix", - "dev": "cargo run", - "test": "cargo test" + "lint": "cargo fmt --check && cargo clippy --all-targets", + "fix": "cargo clippy --all-targets --fix --allow-dirty && cargo fmt", + "test": "cargo nextest run --all-targets --no-fail-fast" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7fdd34863..c0f00cfdb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,6 +13,9 @@ importers: .: devDependencies: + if-ci: + specifier: ^3.0.0 + version: 3.0.0 prettier: specifier: ^3.3.2 version: 3.3.2 @@ -3405,6 +3408,9 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -3572,6 +3578,10 @@ packages: resolution: {integrity: sha512-NKgHbWkSZXJUcaBHSsyzC8eegD6bBd4O0oCI6XMIJ+y4Bq3v4w7sY3wfWoKPuVlq9pQHRB6od0lmKpIqi8TlKA==} hasBin: true + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -3888,6 +3898,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -4289,6 +4302,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} @@ -4490,6 +4507,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -4762,6 +4783,11 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + if-ci@3.0.0: + resolution: {integrity: sha512-/0vPNr5ZDR3znyP83SFMqe6oUVeiAeGt5QnPanVJjPGH7Z7JrZnYUEt7gpkK7C8NTIH5BLSqnA5IPdUnYof6pA==} + engines: {node: '>=6'} + hasBin: true + ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -4870,6 +4896,10 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + is-core-module@2.15.0: resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} @@ -4960,6 +4990,10 @@ packages: is-ssh@1.4.0: resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5579,6 +5613,9 @@ packages: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + nitropack@2.10.4: resolution: {integrity: sha512-sJiG/MIQlZCVSw2cQrFG1H6mLeSqHlYfFerRjLKz69vUfdu0EL2l0WdOxlQbzJr3mMv/l4cOlCCLzVRzjzzF/g==} engines: {node: ^16.11.0 || >=17.0.0} @@ -5644,6 +5681,10 @@ packages: not@0.1.0: resolution: {integrity: sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==} + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -5764,6 +5805,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5859,6 +5904,10 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -6253,6 +6302,9 @@ packages: protocols@2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -6610,10 +6662,18 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -6798,6 +6858,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -7786,6 +7850,10 @@ packages: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -11426,6 +11494,8 @@ snapshots: chrome-trace-event@1.0.4: optional: true + ci-info@2.0.0: {} + ci-info@3.9.0: {} ci-info@4.0.0: {} @@ -11553,6 +11623,14 @@ snapshots: cronstrue@2.52.0: {} + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -11833,6 +11911,10 @@ snapshots: encodeurl@2.0.0: {} + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -12561,6 +12643,16 @@ snapshots: events@3.3.0: {} + execa@1.0.0: + dependencies: + cross-spawn: 6.0.6 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + execa@7.2.0: dependencies: cross-spawn: 7.0.3 @@ -12802,6 +12894,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@4.1.0: + dependencies: + pump: 3.0.2 + get-stream@6.0.1: {} get-stream@8.0.1: {} @@ -13230,6 +13326,11 @@ snapshots: ieee754@1.2.1: {} + if-ci@3.0.0: + dependencies: + execa: 1.0.0 + is-ci: 2.0.0 + ignore@5.3.1: {} ignore@6.0.2: {} @@ -13342,6 +13443,10 @@ snapshots: is-callable@1.2.7: {} + is-ci@2.0.0: + dependencies: + ci-info: 2.0.0 + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -13412,6 +13517,8 @@ snapshots: dependencies: protocols: 2.0.1 + is-stream@1.1.0: {} + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -14276,6 +14383,8 @@ snapshots: neotraverse@0.6.18: {} + nice-try@1.0.5: {} + nitropack@2.10.4(typescript@5.5.4): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 @@ -14407,6 +14516,10 @@ snapshots: not@0.1.0: {} + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -14657,6 +14770,8 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + p-finally@1.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -14767,6 +14882,8 @@ snapshots: path-is-absolute@1.0.1: {} + path-key@2.0.1: {} + path-key@3.1.1: {} path-key@4.0.0: {} @@ -15060,6 +15177,11 @@ snapshots: protocols@2.0.1: {} + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -15607,10 +15729,16 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 + shebang-regex@1.0.0: {} + shebang-regex@3.0.0: {} shell-quote@1.8.1: {} @@ -15827,6 +15955,8 @@ snapshots: strip-bom@3.0.0: {} + strip-eof@1.0.0: {} + strip-final-newline@3.0.0: {} strip-indent@3.0.0: @@ -16869,6 +16999,10 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 + which@1.3.1: + dependencies: + isexe: 2.0.0 + which@2.0.2: dependencies: isexe: 2.0.0 diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 000000000..cf6d0f556 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.86.0" diff --git a/turbo.json b/turbo.json index 71cd9ce3b..aea708c48 100644 --- a/turbo.json +++ b/turbo.json @@ -4,7 +4,7 @@ "build": { "dependsOn": ["^build"], "inputs": ["$TURBO_DEFAULT$", ".env*"], - "outputs": [".nuxt/**", "dist/**", ".output/**", "target/**"], + "outputs": [".nuxt/**", "dist/**", ".output/**", "$TURBO_ROOT$/target/**"], "env": [ "NODE_ENV", "SITE_URL", @@ -20,20 +20,50 @@ "PROD_OVERRIDE", "PYRO_MASTER_KEY", "PORT", - "SQLX_OFFLINE" + "SQLX_OFFLINE", + "DATABASE_URL", + "CARGO_*", + "RUST_*", + "RUSTFLAGS", + "FORCE_COLOR", + "NEXTEST_*" ] }, "lint": { - "env": ["SQLX_OFFLINE"] + "env": [ + "DATABASE_URL", + "SQLX_OFFLINE", + "CARGO_*", + "RUST_*", + "RUSTFLAGS", + "FORCE_COLOR", + "NEXTEST_*" + ] }, "dev": { "cache": false, "persistent": true, "inputs": ["$TURBO_DEFAULT$", ".env*"], - "env": ["DISPLAY", "WEBKIT_DISABLE_DMABUF_RENDERER"] + "env": [ + "DISPLAY", + "WEBKIT_DISABLE_DMABUF_RENDERER", + "CARGO_*", + "RUST_*", + "RUSTFLAGS", + "FORCE_COLOR", + "NEXTEST_*" + ] }, "test": { - "env": ["SQLX_OFFLINE", "DATABASE_URL"] + "env": [ + "SQLX_OFFLINE", + "DATABASE_URL", + "CARGO_*", + "RUST_*", + "RUSTFLAGS", + "FORCE_COLOR", + "NEXTEST_*" + ] }, "fix": { "cache": false