From 4caa038469b30c0a5c5d3babb1f21200c229195a Mon Sep 17 00:00:00 2001 From: Jiayuan Zhang Date: Sun, 15 Feb 2026 01:32:13 +0800 Subject: [PATCH 1/5] chore(turbo): remove ^lint dependency for parallel lint execution Lint tasks don't need dependencies to be linted first. Removing the ^lint dependency lets turbo run all lint tasks in parallel. Also adds eslint config files to inputs for correct cache invalidation. Co-Authored-By: Claude Opus 4.6 --- turbo.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/turbo.json b/turbo.json index da43a57e..3e98b540 100644 --- a/turbo.json +++ b/turbo.json @@ -19,8 +19,7 @@ "outputs": [] }, "lint": { - "dependsOn": ["^lint"], - "inputs": ["src/**", "package.json"], + "inputs": ["src/**", "package.json", "eslint.config.*", ".eslintrc.*"], "outputs": [] } } From 2727ecd803e7222b29a081c9a8d19d000a2ac9b8 Mon Sep 17 00:00:00 2001 From: Jiayuan Zhang Date: Sun, 15 Feb 2026 01:32:19 +0800 Subject: [PATCH 2/5] ci: parallelize jobs and add turbo cache persistence Split single CI job into parallel lint + build-and-typecheck jobs. Add turbo cache via actions/cache for faster subsequent runs. Use single turbo invocation for build+typecheck to optimize task scheduling. Add concurrency group to cancel stale PR runs. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/ci.yml | 45 +++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 136068ef..747d9a8b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,10 +6,13 @@ on: pull_request: branches: [main] -jobs: - ci: - runs-on: ubuntu-latest +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +jobs: + lint: + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 @@ -27,12 +30,34 @@ jobs: run: pnpm install - name: Lint - run: | - pnpm --filter @multica/web lint - pnpm --filter @multica/desktop lint + run: pnpm turbo lint - - name: Type check - run: pnpm typecheck + build-and-typecheck: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 - - name: Build - run: pnpm build + - name: Setup pnpm + uses: pnpm/action-setup@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + + - name: Install dependencies + run: pnpm install + + - name: Restore Turbo cache + uses: actions/cache@v4 + with: + path: .turbo + key: turbo-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.sha }} + restore-keys: | + turbo-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}- + turbo-${{ runner.os }}- + + - name: Build and type check + run: pnpm turbo build typecheck From 8c51cf9f9aeb0eafa32940ea574b2f61f04cfc6e Mon Sep 17 00:00:00 2001 From: Jiayuan Zhang Date: Sun, 15 Feb 2026 02:03:33 +0800 Subject: [PATCH 3/5] ci: add test step to CI pipeline Add test task to turbo.json and include it in the build-and-typecheck job. Turbo handles the dependency graph: builds deps first, then runs typecheck and test in parallel for each package. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/ci.yml | 4 ++-- turbo.json | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 747d9a8b..72aa067c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,5 +59,5 @@ jobs: turbo-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}- turbo-${{ runner.os }}- - - name: Build and type check - run: pnpm turbo build typecheck + - name: Build, type check, and test + run: pnpm turbo build typecheck test diff --git a/turbo.json b/turbo.json index 3e98b540..25f29d58 100644 --- a/turbo.json +++ b/turbo.json @@ -18,6 +18,11 @@ "inputs": ["src/**", "package.json", "tsconfig.json"], "outputs": [] }, + "test": { + "dependsOn": ["^build"], + "inputs": ["src/**", "package.json", "tsconfig.json", "vitest.config.*"], + "outputs": [] + }, "lint": { "inputs": ["src/**", "package.json", "eslint.config.*", ".eslintrc.*"], "outputs": [] From 97270de0252dbb9d49803023e7a3a2c9601fd1ef Mon Sep 17 00:00:00 2001 From: Jiayuan Zhang Date: Sun, 15 Feb 2026 02:03:35 +0800 Subject: [PATCH 4/5] chore: add dependabot for automated dependency updates Configure weekly npm and GitHub Actions dependency updates. Groups dev and production dependencies separately for easier review. Co-Authored-By: Claude Opus 4.6 --- .github/dependabot.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..1cce49a7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,17 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 10 + groups: + dev-dependencies: + dependency-type: development + production-dependencies: + dependency-type: production + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly From 1a85cc104a905f45860841434182849356544a12 Mon Sep 17 00:00:00 2001 From: Jiayuan Zhang Date: Sun, 15 Feb 2026 02:09:47 +0800 Subject: [PATCH 5/5] fix(ci): use pnpm --filter for lint instead of turbo turbo lint fails for all packages due to eslint binary resolution issues. Fall back to pnpm --filter which handles node_modules/.bin PATH correctly. Scope matches original CI (web + desktop). Co-Authored-By: Claude Opus 4.6 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 72aa067c..1624e877 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: run: pnpm install - name: Lint - run: pnpm turbo lint + run: pnpm --filter @multica/web --filter @multica/desktop lint build-and-typecheck: runs-on: ubuntu-latest