From 8fba6824e2e65794ec92e46371dcaad82a0548d3 Mon Sep 17 00:00:00 2001 From: Sasha Sorokin <10401817+brawaru@users.noreply.github.com> Date: Sun, 11 Aug 2024 19:40:34 +0300 Subject: [PATCH] Switch to explicit Turborepo config This changes Turborepo config in the workspace root to be explicit. Explicity in this case means that all tasks are defined manually and all inputs are also specified manually. While that might seem redundant, this allows to orchestrate and adjust tasks more carefully - ignoring some files while taking other files into account, only hashing and providing project-specific variables, explicitly reviewing and specifying dependencies. That might come in handy in the future. There's an alternative way to approach this, which is to have every package contain "turbo.json" file, however, for now the flat approach has been chosen as it seems to be the most cleanest and easiest to review. --- apps/app-frontend/package.json | 2 +- apps/app-playground/package.json | 6 +- turbo.json | 162 +++++++++++++++++++++++++++---- 3 files changed, 145 insertions(+), 25 deletions(-) diff --git a/apps/app-frontend/package.json b/apps/app-frontend/package.json index 992ef8636..3038a2367 100644 --- a/apps/app-frontend/package.json +++ b/apps/app-frontend/package.json @@ -4,8 +4,8 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", "build": "vite build", + "dev": "vite", "lint": "eslint . && prettier --check .", "fix": "eslint . --fix && prettier --write ." }, diff --git a/apps/app-playground/package.json b/apps/app-playground/package.json index 4e4825b84..b854f187a 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 -- -D warnings", - "fix": "cargo fmt && cargo clippy --fix", "dev": "cargo run", - "test": "cargo test" + "test": "cargo test", + "lint": "cargo fmt --check && cargo clippy -- -D warnings", + "fix": "cargo fmt && cargo clippy --fix" } } diff --git a/turbo.json b/turbo.json index 256bd1e18..96c51fbd9 100644 --- a/turbo.json +++ b/turbo.json @@ -1,30 +1,150 @@ { "$schema": "https://turbo.build/schema.json", "tasks": { - "build": { + // @modrinth/app + "@modrinth/app#build": { "dependsOn": ["^build"], - "inputs": ["$TURBO_DEFAULT$", ".env*"], - "outputs": [".nuxt/**", "dist/**", ".output/**", "target/**"], - "env": [ - "NODE_ENV", - "SITE_URL", - "BASE_URL", - "FLAG_OVERRIDES", - "BROWSER_BASE_URL", - "RATE_LIMIT_IGNORE_KEY", - "VERCEL_*", - "CF_PAGES_*", - "HEROKU_APP_NAME" - ] + "inputs": ["$TURBO_DEFAULT$", "!**/*.md", "!LICENSE"], + "outputs": ["target"] }, - "lint": {}, - "dev": { + "@modrinth/app#dev": { + "cache": false, + "persistent": true, + "env": ["*"] + }, + "@modrinth/app#test": { + "inputs": ["$TURBO_DEFAULT$", "!**/*.md", "!LICENSE"] + }, + "@modrinth/app#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/app#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + + // @modrinth/app-frontend + "@modrinth/app-frontend#build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", "!**/*.md", "!LICENSE"], + "outputs": ["dist"], + "env": ["BASE_URL", "BROWSER_BASE_URL"] + }, + "@modrinth/app-frontend#dev": { + "cache": false, + "persistent": true, + "env": ["BASE_URL", "BROWSER_BASE_URL"] + }, + "@modrinth/app-frontend#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/app-frontend#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + + // @modrinth/app-playground + "@modrinth/app-playground#build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", "!**/*.md", "!LICENSE"], + "outputs": ["target"] + }, + "@modrinth/app-playground#dev": { "cache": false, "persistent": true, - "env": [ - "*" - ] + "env": ["*"] + }, + "@modrinth/app-playground#test": { + "inputs": ["$TURBO_DEFAULT$", "!**/*.md", "!LICENSE"] + }, + "@modrinth/app-playground#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] }, - "test": {} - } + "@modrinth/app-playground#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + + // @modrinth/frontend + "@modrinth/frontend#build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", ".env", ".env.*", "!*.md", "!LICENSE", "!src/generated"], + "outputs": [".nuxt", ".output", "src/generated"], + "env": ["BASE_URL", "BROWSER_BASE_URL", "RATE_LIMIT_IGNORE_KEY", "SITE_URL", "FLAG_OVERRIDES"] + }, + "@modrinth/frontend#dev": { + "cache": false, + "persistent": true, + "env": ["BASE_URL", "BROWSER_BASE_URL", "RATE_LIMIT_IGNORE_KEY", "SITE_URL", "FLAG_OVERRIDES"] + }, + "@modrinth/frontend#preview": { + "dependsOn": ["build"], + "inputs": [".output"] + }, + "@modrinth/frontend#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/frontend#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/frontend#intl:extract": { + "inputs": [ + "src/**/*.vue", + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.js", + "src/**/*.jsx", + "src/**/*.mts", + "src/**/*.cts", + "src/**/*.mjs", + "src/**/*.cjs", + "!src/**/*.d.ts" + ], + "outputs": ["src/locales/en-US/index.json"] + }, + + // @modrinth/app-lib + "@modrinth/app-lib#build": { + "inputs": ["$TURBO_DEFAULT$", "!**/*.md", "!LICENSE"], + "outputs": ["target"] + }, + "@modrinth/app-lib#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/app-lib#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/app-lib#test": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + + // @modrinth/assets + "@modrinth/assets#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/assets#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + + // @modrinth/ui + "@modrinth/ui#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/ui#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + + // @modrinth/utils + "@modrinth/utils#lint": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + "@modrinth/utils#fix": { + "inputs": ["$TURBO_DEFAULT$", "!LICENSE"] + }, + + "build": {}, + "dev": {}, + "test": {}, + "lint": {}, + "fix": {}, + "intl:extract": {} + }, + "globalEnv": ["NODE_ENV", "TAURI_*", "VERCEL_*", "HEROKU_*", "CF_PAGES_*"] }