From 5ed0a859dab7866fc030855584bb45fa1b34890b Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Thu, 26 Feb 2026 19:34:11 -0600 Subject: [PATCH] ci: enable turborepo remote cache for all Node.js pipelines Connect to self-hosted turbo cache at turbo.mosaicstack.dev. Convert lint/typecheck/test/build steps to use pnpm turbo with remote cache env vars, removing manual build-shared steps since turbo handles the dependency graph automatically. Co-Authored-By: Claude Opus 4.6 --- .woodpecker/api.yml | 30 ++++++++++++++---------------- .woodpecker/orchestrator.yml | 17 ++++++++++++++--- .woodpecker/web.yml | 34 +++++++++++++++++----------------- turbo.json | 1 + 4 files changed, 46 insertions(+), 36 deletions(-) diff --git a/.woodpecker/api.yml b/.woodpecker/api.yml index a2ab0f3..c283861 100644 --- a/.woodpecker/api.yml +++ b/.woodpecker/api.yml @@ -24,6 +24,13 @@ variables: pnpm install --frozen-lockfile - &use_deps | corepack enable + - &turbo_env + TURBO_API: + from_secret: turbo_api + TURBO_TOKEN: + from_secret: turbo_token + TURBO_TEAM: + from_secret: turbo_team - &kaniko_setup | mkdir -p /kaniko/.docker echo "{\"auths\":{\"git.mosaicstack.dev\":{\"username\":\"$GITEA_USER\",\"password\":\"$GITEA_TOKEN\"}}}" > /kaniko/.docker/config.json @@ -52,17 +59,6 @@ steps: depends_on: - install - lint: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - commands: - - *use_deps - - pnpm --filter "@mosaic/api" lint - depends_on: - - prisma-generate - - build-shared - prisma-generate: image: *node_image environment: @@ -73,26 +69,27 @@ steps: depends_on: - install - build-shared: + lint: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/shared" build + - pnpm turbo lint --filter=@mosaic/api depends_on: - - install + - prisma-generate typecheck: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/api" typecheck + - pnpm turbo typecheck --filter=@mosaic/api depends_on: - prisma-generate - - build-shared prisma-migrate: image: *node_image @@ -124,6 +121,7 @@ steps: environment: SKIP_ENV_VALIDATION: "true" NODE_ENV: "production" + <<: *turbo_env commands: - *use_deps - pnpm turbo build --filter=@mosaic/api diff --git a/.woodpecker/orchestrator.yml b/.woodpecker/orchestrator.yml index aca8b66..903f9c8 100644 --- a/.woodpecker/orchestrator.yml +++ b/.woodpecker/orchestrator.yml @@ -24,6 +24,13 @@ variables: pnpm install --frozen-lockfile - &use_deps | corepack enable + - &turbo_env + TURBO_API: + from_secret: turbo_api + TURBO_TOKEN: + from_secret: turbo_token + TURBO_TEAM: + from_secret: turbo_team - &kaniko_setup | mkdir -p /kaniko/.docker echo "{\"auths\":{\"git.mosaicstack.dev\":{\"username\":\"$GITEA_USER\",\"password\":\"$GITEA_TOKEN\"}}}" > /kaniko/.docker/config.json @@ -48,9 +55,10 @@ steps: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/orchestrator" lint + - pnpm turbo lint --filter=@mosaic/orchestrator depends_on: - install @@ -58,9 +66,10 @@ steps: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/orchestrator" typecheck + - pnpm turbo typecheck --filter=@mosaic/orchestrator depends_on: - install @@ -68,9 +77,10 @@ steps: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/orchestrator" test + - pnpm turbo test --filter=@mosaic/orchestrator depends_on: - install @@ -81,6 +91,7 @@ steps: environment: SKIP_ENV_VALIDATION: "true" NODE_ENV: "production" + <<: *turbo_env commands: - *use_deps - pnpm turbo build --filter=@mosaic/orchestrator diff --git a/.woodpecker/web.yml b/.woodpecker/web.yml index c97c8ad..c43a22a 100644 --- a/.woodpecker/web.yml +++ b/.woodpecker/web.yml @@ -24,6 +24,13 @@ variables: pnpm install --frozen-lockfile - &use_deps | corepack enable + - &turbo_env + TURBO_API: + from_secret: turbo_api + TURBO_TOKEN: + from_secret: turbo_token + TURBO_TEAM: + from_secret: turbo_team - &kaniko_setup | mkdir -p /kaniko/.docker echo "{\"auths\":{\"git.mosaicstack.dev\":{\"username\":\"$GITEA_USER\",\"password\":\"$GITEA_TOKEN\"}}}" > /kaniko/.docker/config.json @@ -44,46 +51,38 @@ steps: depends_on: - install - build-shared: - image: *node_image - environment: - SKIP_ENV_VALIDATION: "true" - commands: - - *use_deps - - pnpm --filter "@mosaic/shared" build - - pnpm --filter "@mosaic/ui" build - depends_on: - - install - lint: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/web" lint + - pnpm turbo lint --filter=@mosaic/web depends_on: - - build-shared + - install typecheck: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/web" typecheck + - pnpm turbo typecheck --filter=@mosaic/web depends_on: - - build-shared + - install test: image: *node_image environment: SKIP_ENV_VALIDATION: "true" + <<: *turbo_env commands: - *use_deps - - pnpm --filter "@mosaic/web" test + - pnpm turbo test --filter=@mosaic/web depends_on: - - build-shared + - install # === Build === @@ -92,6 +91,7 @@ steps: environment: SKIP_ENV_VALIDATION: "true" NODE_ENV: "production" + <<: *turbo_env commands: - *use_deps - pnpm turbo build --filter=@mosaic/web diff --git a/turbo.json b/turbo.json index d70d42b..495574b 100644 --- a/turbo.json +++ b/turbo.json @@ -1,5 +1,6 @@ { "$schema": "https://turbo.build/schema.json", + "remoteCache": {}, "tasks": { "prisma:generate": { "cache": false