Skip to content

Conversation

@lifeiscontent
Copy link
Collaborator

@lifeiscontent lifeiscontent commented Dec 10, 2025

Type of Change

  • Performance improvements

Summary by CodeRabbit

  • Chores

    • Updated CI workflows to newer Actions, added caching for Python, pnpm, Turbo and build artifacts, increased Node memory and tuned timeouts for faster CI.
    • Reorganized CI into parallel jobs (format/build/check) and introduced matrixed checks for lint/types.
    • Integrated ESLint turbo plugin.
  • New Features

    • Modernized package distribution with ESM/dist outputs, exports field, build/dev scripts and a standalone build configuration.
    • Revised task graph and global envs for the monorepo and caching behavior.

✏️ Tip: You can customize this high-level summary in your review settings.

@lifeiscontent lifeiscontent requested review from Copilot, prateekshourya29 and sriramveeraghanta and removed request for Copilot December 10, 2025 05:39
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 10, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Updates CI workflows to newer Actions versions and add pip/pnpm/Turbo caching; restructures web CI into parallel check/build jobs; integrates eslint-plugin-turbo; migrates packages/shared-state to ESM with tsdown build; and significantly reorganizes turborepo task graph, env, and inputs/outputs.

Changes

Cohort / File(s) Summary
CI Workflows
\.github/workflows/pull-request-build-lint-api.yml, \.github/workflows/pull-request-build-lint-web-apps.yml
Bump actions/checkout and setup actions to v6, add Python (pip) and pnpm store caching, add Turbo cache restore/save, split web workflow into parallel check-format/build/check jobs, set NODE_OPTIONS memory, adjust timeouts and artifact caching.
ESLint plugin
eslint.config.mjs, package.json
Add import of turboPlugin and include turboPlugin.configs["flat/recommended"] in ESLint flat config; add [email protected] to devDependencies.
Shared-state ESM & build
packages/shared-state/package.json, packages/shared-state/tsdown.config.ts
Convert package to ESM (type: "module"), point main/module/types to dist/, add exports map, add build/dev scripts using tsdown, and add tsdown.config.ts to emit ESM + d.ts.
Turborepo task reorganization
turbo.json
Replace schema URL, add globalDependencies and remoteCache flag, expand globalEnv, introduce tasks check, check:format, check:lint, check:types, fix*, start, and redefine inputs/outputs, cache semantics, and task dependency graph for build/check/fix flows.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant PR as Pull Request
    participant GH as GitHub Actions
    participant Checkout as Checkout (actions/checkout)
    participant Setup as Setup (node/python)
    participant Cache as Cache (pnpm/pip/.turbo)
    participant Build as Build job (pnpm/turbo)
    participant Artifact as Artifacts store
    participant Check as Check jobs (lint/types/format)

    PR->>GH: triggers workflows
    GH->>Checkout: checkout repo (v6)
    Checkout->>Setup: setup runtime (node/python v6)
    Setup->>Cache: restore pnpm/pip/.turbo caches
    Setup->>Build: start build job
    Build->>Cache: save/update .turbo & pnpm caches
    Build->>Artifact: upload build artifacts
    Artifact->>Check: download artifacts (matrix jobs)
    Check->>Cache: restore caches if needed
    Check->>Check: run lint / types / format checks
    Check->>GH: report results
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Review hotspots:
    • turbo.json: task dependency graph, inputs/outputs, cache flags, and env changes.
    • .github/workflows/pull-request-build-lint-web-apps.yml: pnpm/Turbo cache steps, artifact passing between jobs, and timeouts.
    • packages/shared-state/*: ESM export map, dist paths, and tsdown config correctness.
    • eslint.config.mjs + package.json: ensure turbo plugin integration with flat config.

Poem

🐇 I hopped through CI with caches in store,

ESM carrots tucked in dist galore,
Turbo tapped a rhythmic beat,
lint and types all tidy and neat,
tiny paws, a dev-flow encore ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is largely incomplete, providing only a single checkbox selection without any implementation details, rationale, test scenarios, or references to support the changes. Add detailed description of the optimizations made, explain the rationale behind changes like caching configuration and task restructuring, and document how the improvements were tested.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore: optimize turborepo' accurately reflects the main changes, which involve optimizing turborepo configurations, caching strategies, and task workflows.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch lifeiscontent/optimize-turborepo

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
packages/shared-state/tsdown.config.ts (1)

1-8: LGTM!

The tsdown configuration is well-structured, specifying ESM output with TypeScript declarations and platform-neutral targeting. This aligns with the package.json migration to dist-based ESM distribution.

The catalog specifies tsdown 0.16.0. Note that tsdown 0.17.0 is available; consider updating to the latest version for any improvements or fixes.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 491b5bc and a24aae7.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (7)
  • .github/workflows/pull-request-build-lint-api.yml (1 hunks)
  • .github/workflows/pull-request-build-lint-web-apps.yml (1 hunks)
  • eslint.config.mjs (2 hunks)
  • package.json (1 hunks)
  • packages/shared-state/package.json (2 hunks)
  • packages/shared-state/tsdown.config.ts (1 hunks)
  • turbo.json (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{ts,tsx,mts,cts}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

**/*.{ts,tsx,mts,cts}: Use const type parameters for more precise literal inference in TypeScript 5.0+
Use the satisfies operator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicit is return types in filter/check functions
Use NoInfer<T> utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing in switch(true) blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacy experimentalDecorators
Use using declarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Use with { type: "json" } for import attributes; avoid deprecated assert syntax (TypeScript 5.3/5.8+)
Use import type explicitly when importing types to ensure they are erased during compilation, respecting verbatimModuleSyntax flag
Use .ts, .mts, .cts extensions in import type statements (TypeScript 5.2+)
Use import type { Type } from "mod" with { "resolution-mode": "import" } for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize new Set methods like union, intersection, etc., when available (TypeScript 5.5+)
Use Object.groupBy / Map.groupBy standard methods for grouping instead of external libraries (TypeScript 5.4+)
Use Promise.withResolvers() for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted, toSpliced, with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields via super in classes (TypeScript 5....

Files:

  • packages/shared-state/tsdown.config.ts
**/*.{js,mjs,cjs}

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

Use @import tags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)

Files:

  • eslint.config.mjs
{turbo.json,**/*.sh}

📄 CodeRabbit inference engine (.github/instructions/bash.instructions.md)

Use Turbo for build system orchestration with configuration in turbo.json

Files:

  • turbo.json
🧠 Learnings (5)
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)

Applied to files:

  • packages/shared-state/tsdown.config.ts
  • eslint.config.mjs
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json

Applied to files:

  • .github/workflows/pull-request-build-lint-web-apps.yml
  • package.json
  • eslint.config.mjs
  • turbo.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{js,mjs,cjs} : Use `import` tags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)

Applied to files:

  • eslint.config.mjs
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `import type { Type } from "mod" with { "resolution-mode": "import" }` for specific module resolution contexts (TypeScript 5.3+)

Applied to files:

  • packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)

Applied to files:

  • packages/shared-state/package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: CodeQL analysis (javascript-typescript)
  • GitHub Check: Agent
  • GitHub Check: Build and lint web apps
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (15)
package.json (1)

38-38: LGTM!

The addition of eslint-plugin-turbo version 2.6.3 aligns with the turbo version and is properly integrated in eslint.config.mjs.

eslint.config.mjs (1)

13-13: LGTM!

The integration of eslint-plugin-turbo is correctly implemented using the flat config pattern and aligns with the devDependency added in package.json.

Also applies to: 46-46

packages/shared-state/package.json (2)

19-20: LGTM!

The build and dev scripts using tsdown are properly configured and align with the tsdown.config.ts file. The devDependency is correctly added.

Also applies to: 42-42


7-17: Approve ESM migration with exports map.

All 24 imports of @plane/shared-state across the codebase (in store, hooks, and components) are properly handled by the new exports configuration. The migration from src/ to dist/ outputs is transparent to consumers—both type-only imports and concrete imports like WorkItemFilterStore resolve correctly through the exports map.

turbo.json (5)

4-38: LGTM!

The expanded globalEnv list comprehensively covers environment variables that should invalidate Turbo's cache, including Vite, Sentry, and PostHog configuration. This ensures builds are correctly invalidated when configuration changes.


39-41: Remote caching is explicitly disabled.

The remoteCache is set to false. This is appropriate for repositories without remote cache infrastructure but means CI runs won't share cache across machines or runs.


43-68: LGTM on task definitions and inputs/outputs.

The task definitions are well-structured:

  • build correctly includes .env* files in inputs and adds .react-router/** to outputs
  • check family tasks properly depend on ^build and exclude markdown files from linting/type-checking
  • Empty outputs for check tasks correctly indicate no build artifacts are produced

69-89: LGTM on cache settings for side-effect tasks.

The fix tasks and clean task correctly disable caching since they perform side effects (modifying files). The dev task appropriately uses persistent: true for long-running development servers.


2-2: Schema URL is correct and canonical.

The schema URL https://turborepo.com/schema.json is the current canonical Turborepo schema location. The update from turbo.build to turborepo.com is correct.

.github/workflows/pull-request-build-lint-web-apps.yml (4)

30-30: LGTM on memory allocation increase.

Setting NODE_OPTIONS: "--max-old-space-size=4096" allocates 4GB heap for Node.js, which helps prevent out-of-memory errors during builds in monorepo environments.


44-62: LGTM on caching strategy.

The caching implementation is well-structured:

  • Pnpm store caching with proper dependency tracking via pnpm-lock.yaml
  • Turbo cache persistence using .turbo directory
  • Appropriate cache keys and restore fallbacks

This significantly improves CI performance by avoiding redundant package downloads and build operations.


64-68: LGTM on consolidated Turbo command.

The single command pnpm turbo run build check:lint check:format check:types --affected efficiently replaces multiple separate steps. This leverages Turbo's task orchestration and aligns with the task definitions in turbo.json.


33-33: Both actions/checkout@v6 and actions/setup-node@v6 are available and stable. The v6 releases exist with multiple patch versions (checkout: v6.0.0, v6.0.1; setup-node: v6.0.0, v6.1.0), and both have major version tags pointing to their latest v6 releases.

.github/workflows/pull-request-build-lint-api.yml (2)

32-36: Upgrade to actions/setup-python@v6 is stable and pip caching improves CI performance.

The workflow update to v6.1.0 (latest release as of November 2025) and addition of pip caching with cache-dependency-path is approved. The configuration correctly targets the API requirements file for caching.


30-30: No action required. actions/checkout@v6 is released and stable. The latest release is v6.0.1, with v6.0.0 also available. The v6 tag in GitHub Actions points to a stable release and is safe to use in workflows.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR optimizes the Turborepo configuration and CI/CD pipeline to improve build performance and maintainability. The changes include upgrading GitHub Actions, introducing better caching strategies, adding the eslint-plugin-turbo for monorepo-specific linting, and converting the @plane/shared-state package to use tsdown for building.

Key changes:

  • Restructured GitHub Actions workflow from a single job to three parallel/sequential jobs (format check, build, and matrix-based lint/type checks)
  • Added eslint-plugin-turbo integration for consolidated linting
  • Converted @plane/shared-state to use tsdown build tooling with proper ESM module exports

Reviewed changes

Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
turbo.json Updated schema URL, reorganized globalEnv alphabetically, added new environment variables, refined task configurations with better input/output definitions, and removed pnpm lock files from globalDependencies
pnpm-lock.yaml Added [email protected], [email protected], and [email protected] dependencies; updated caniuse-lite version
packages/shared-state/tsdown.config.ts Added tsdown build configuration for ESM format with type declarations
packages/shared-state/package.json Converted to ESM module with proper exports field, added build/dev scripts using tsdown, updated entry points to dist outputs
package.json Added [email protected] to devDependencies
eslint.config.mjs Integrated turbo plugin flat config for monorepo-specific linting rules
.github/workflows/pull-request-build-lint-web-apps.yml Split workflow into three jobs (check-format, build, check), upgraded actions to v6, added comprehensive caching strategy with pnpm store and build artifacts, increased Node.js memory allocation
.github/workflows/pull-request-build-lint-api.yml Upgraded actions/checkout to v6, upgraded actions/setup-python to v6, added pip caching
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.github/workflows/pull-request-build-lint-web-apps.yml (1)

32-36: fetch-depth: 50 may not be sufficient for affected detection over time.

Using fetch-depth: 50 assumes the PR base is within the last 50 commits. For longer-lived branches or slow review cycles, this could miss affected packages. Consider either:

  1. Increasing fetch-depth to a safer value (100-200)
  2. Using fetch-depth: 0 (full history) if performance is acceptable
  3. Adding a comment documenting the limitation

Consider updating to a more resilient fetch depth:

- fetch-depth: 50
+ fetch-depth: 0

Or document the limitation if fetch-depth: 50 is intentional for performance reasons.

Also applies to: 76-79, 139-142

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a24aae7 and 171b8c9.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (7)
  • .github/workflows/pull-request-build-lint-api.yml (1 hunks)
  • .github/workflows/pull-request-build-lint-web-apps.yml (2 hunks)
  • eslint.config.mjs (2 hunks)
  • package.json (1 hunks)
  • packages/shared-state/package.json (2 hunks)
  • packages/shared-state/tsdown.config.ts (1 hunks)
  • turbo.json (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • eslint.config.mjs
  • package.json
  • packages/shared-state/tsdown.config.ts
🧰 Additional context used
📓 Path-based instructions (1)
{turbo.json,**/*.sh}

📄 CodeRabbit inference engine (.github/instructions/bash.instructions.md)

Use Turbo for build system orchestration with configuration in turbo.json

Files:

  • turbo.json
🧠 Learnings (5)
📓 Common learnings
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json

Applied to files:

  • .github/workflows/pull-request-build-lint-web-apps.yml
  • turbo.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)

Applied to files:

  • packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `import type { Type } from "mod" with { "resolution-mode": "import" }` for specific module resolution contexts (TypeScript 5.3+)

Applied to files:

  • packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)

Applied to files:

  • packages/shared-state/package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Agent
  • GitHub Check: CodeQL analysis (javascript-typescript)
  • GitHub Check: Build packages
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (11)
.github/workflows/pull-request-build-lint-api.yml (2)

35-36: Python caching aligns with optimization objectives.

The addition of Python package caching (cache: 'pip' with cache-dependency-path) is a straightforward performance win and aligns well with the PR's broader caching strategy across the monorepo. The dependency path correctly points to the API requirements file.


30-30: Caching configuration is correctly formatted for setup-python v6.

The upgrade from actions/checkout@v4 to v6 and actions/setup-python@v5 to v6 introduces Python dependency caching, which aligns with the PR's performance optimization goals. The cache configuration syntax (cache: 'pip' with cache-dependency-path: 'apps/api/requirements.txt') is valid for setup-python v6.

Note: checkout v6 changes how credentials are persisted (from .git/config to $RUNNER_TEMP), but this is transparent to standard git operations and should not affect this linting workflow.

turbo.json (5)

2-2: Schema URL update is correct.

The URL change from turbo.build/schema.json to turborepo.com/schema.json aligns with the official Turborepo domain migration. No action needed.


39-41: Disabling remote cache is appropriate for this workflow.

Setting remoteCache: { enabled: false } disables Turborepo Cloud caching, which is fine for local development and PR workflows. If remote caching is needed later, this can be re-enabled.


52-68: New check/fix task structure is well-organized.

The introduction of composite tasks (check depending on check:format/check:lint/check:types, fix depending on fix:format/fix:lint) is clean and mirrors modern CLI conventions. The dependencies are correct:

  • check:format has no deps (format is independent)
  • check:lint and check:types both depend on ^build (required for artifacts)
  • Inputs exclude markdown files for lint/types (appropriate to avoid spurious failures)

72-76: Verify "dev" task configuration handles persistent tasks correctly.

The "dev" task has persistent: true with cache: false and dependsOn: ["^build"], which is appropriate for long-running development servers. Ensure:

  1. CI workflows don't accidentally invoke "dev" (which would hang)
  2. The persistent flag works as expected in the configured Turbo version

43-46: Build task inputs and outputs align with CI caching strategy.

The build task specifies:

  • inputs: ["$TURBO_DEFAULT$", ".env*"] — includes environment files in cache key
  • outputs: ["dist/", "build/", ".react-router/**"] — covers all monorepo build artifacts

Configuration is sound and follows Turbo best practices for build orchestration.

packages/shared-state/package.json (2)

7-17: ESM migration with correct export structure looks good.

The "type": "module" declaration, dist-based main/types, and modern conditional exports are all correctly configured. The package.json export for metadata access is a nice addition. The tsdown configuration properly compiles src/index.ts to ESM format (dist/index.js) with generated TypeScript definitions, and no consumers are importing directly from src/, so the migration is clean.


19-20: No action required.

tsdown (version 0.16.0) is properly declared in the pnpm catalog within pnpm-workspace.yaml and correctly referenced via "catalog:" syntax in packages/shared-state/package.json at line 42. The build scripts at lines 19-20 are standard configuration. tsdown is an actively maintained, modern TypeScript bundler built on Rolldown and Oxc, specifically designed for fast builds—not a performance liability.

Likely an incorrect or invalid review comment.

.github/workflows/pull-request-build-lint-web-apps.yml (2)

33-33: Node.js version is already properly configured; no action needed.

Node.js version is explicitly specified in package.json engines field ("node": ">=22.18.0"), so actions/setup-node@v6 will correctly auto-detect and use this version. GitHub Actions versions are current. No version drift risk exists.

Likely an incorrect or invalid review comment.


113-122: Add apps/*/dist to the artifact cache paths to capture TypeScript app outputs.

The workflow caches packages/*/dist for library outputs and apps/*/build for React Router app outputs, but apps/live uses tsdown (like the packages) and produces apps/live/dist. Update the cache paths to include apps/*/dist alongside apps/*/build and apps/*/.react-router to ensure all build artifacts are preserved across jobs.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 8 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@lifeiscontent lifeiscontent force-pushed the lifeiscontent/optimize-turborepo branch from 171b8c9 to 0da62a3 Compare December 10, 2025 10:46
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (1)
turbo.json (1)

3-3: Consider restoring pnpm-lock.yaml to globalDependencies for clarity and robustness.

The workflows compensate for its removal through SHA-based cache invalidation (lines 103, 163 in pull-request-build-lint-web-apps.yml) and separate pnpm store caching with hashFiles('**/pnpm-lock.yaml'). However, this branch/commit strategy is less explicit than file-based invalidation. Adding pnpm-lock.yaml back makes the intent clearer:

"globalDependencies": [".npmrc", "pnpm-lock.yaml"]

This is particularly useful for local development, where branch/commit-based cache keys don't apply. Optionally include pnpm-workspace.yaml as well.

🧹 Nitpick comments (1)
turbo.json (1)

71-89: Clarify the purpose and interaction of dev and start tasks; add interactive flag if tasks accept stdin.

Both dev (lines 71–75) and start (lines 86–89) tasks are marked persistent: true and cache: false, but they differ in dependencies: dev depends on ^build, while start has no dependencies. This distinction is unclear.

Additionally, per Turbo best practices for dev/persistent tasks, both should include "interactive": true if they accept stdin (e.g., if the process reads user input or allows REPL interaction).

Consider:

  1. Documenting (in comments or README) whether dev and start serve different purposes (e.g., dev = full dev environment with builds; start = lightweight start).
  2. Adding "interactive": true to both tasks if they accept stdin.

Example:

"dev": {
  "cache": false,
  "dependsOn": ["^build"],
  "persistent": true,
  "interactive": true  // if task accepts stdin
},
"start": {
  "cache": false,
  "persistent": true,
  "interactive": true  // if task accepts stdin
}

Please confirm whether dev and start should both have interactive: true, and clarify their intended use cases (e.g., for local development, CI, or both).

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 171b8c9 and 734b8c1.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (7)
  • .github/workflows/pull-request-build-lint-api.yml (1 hunks)
  • .github/workflows/pull-request-build-lint-web-apps.yml (2 hunks)
  • eslint.config.mjs (2 hunks)
  • package.json (1 hunks)
  • packages/shared-state/package.json (2 hunks)
  • packages/shared-state/tsdown.config.ts (1 hunks)
  • turbo.json (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
  • .github/workflows/pull-request-build-lint-api.yml
  • packages/shared-state/tsdown.config.ts
  • eslint.config.mjs
  • package.json
🧰 Additional context used
📓 Path-based instructions (1)
{turbo.json,**/*.sh}

📄 CodeRabbit inference engine (.github/instructions/bash.instructions.md)

Use Turbo for build system orchestration with configuration in turbo.json

Files:

  • turbo.json
🧠 Learnings (8)
📓 Common learnings
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)

Applied to files:

  • packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `import type { Type } from "mod" with { "resolution-mode": "import" }` for specific module resolution contexts (TypeScript 5.3+)

Applied to files:

  • packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)

Applied to files:

  • packages/shared-state/package.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json

Applied to files:

  • turbo.json
  • .github/workflows/pull-request-build-lint-web-apps.yml
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-workspace.yaml : Use pnpm-workspace.yaml for monorepo workspace configuration

Applied to files:

  • turbo.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-lock.yaml : Use pnpm-lock.yaml as the lockfile for dependency management

Applied to files:

  • turbo.json
📚 Learning: 2025-08-29T08:45:15.953Z
Learnt from: sriramveeraghanta
Repo: makeplane/plane PR: 7672
File: pnpm-workspace.yaml:8-9
Timestamp: 2025-08-29T08:45:15.953Z
Learning: The makeplane/plane repository uses pnpm v10.12.1, which supports onlyBuiltDependencies configuration in pnpm-workspace.yaml files.

Applied to files:

  • turbo.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: check:format
  • GitHub Check: Agent
  • GitHub Check: CodeQL analysis (javascript-typescript)
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (6)
.github/workflows/pull-request-build-lint-web-apps.yml (2)

20-169: Workflow architecture is sound: good separation of concerns and appropriate caching strategy.

The restructuring into three parallel/serial jobs (check-format, build, check) with proper dependency management and Turbo/pnpm caching aligns well with the updated turbo.json task graph. Format checks run independently in parallel, build creates Turbo artifacts, and lint/type checks depend on build outputs. The Turbo cache restore/save pattern is correct (restore-only in check job, restore+save in build job).


99-119: Turbo cache keys and restore strategy are appropriate for pull_request events.

The multi-level fallback (exact match with both base.sha and current.sha → base.sha only → OS fallback) provides good cache reuse across PR updates while detecting code changes. This is a standard pattern for CI.

packages/shared-state/package.json (1)

7-17: ESM module configuration and exports field are correctly set up.

The migration from direct src/ references to dist/ artifacts with proper "type": "module", main/module/types pointing to compiled outputs, and a well-formed exports field with type/import entries is correct and aligns with modern Node.js packaging standards.

turbo.json (3)

4-37: globalEnv configuration is comprehensive and includes all expected build/check variables.

The global environment variables properly cover Sentry, PostHog, Vite app config, and development flags. All previously flagged unused variables (like ENABLE_EXPERIMENTAL_COREPACK) have been removed.


42-67: Task inputs and outputs are correctly configured for efficient caching.

The build task properly includes .env* files in inputs to detect environment-based build changes, and outputs cover dist/build artifacts. Check tasks appropriately exclude markdown files from inputs and have no outputs, since linting and type-checking produce no cacheable artifacts.


38-40: remoteCache is explicitly disabled, indicating local-only cache strategy.

This is appropriate for self-hosted CI without a shared cache backend. If remote caching is planned for the future, consider documenting the migration path and infrastructure requirements.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 8 changed files in this pull request and generated 1 comment.

Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@lifeiscontent lifeiscontent self-assigned this Dec 10, 2025
@sriramveeraghanta sriramveeraghanta merged commit ff544c9 into preview Dec 10, 2025
15 of 18 checks passed
@sriramveeraghanta sriramveeraghanta deleted the lifeiscontent/optimize-turborepo branch December 10, 2025 11:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants