Skip to content

Commit 87d6001

Browse files
committed
Merge branch 'preview' of https://github.com/makeplane/plane into chore-description-field-migration
2 parents 21ad06f + e3ba7c2 commit 87d6001

File tree

1,927 files changed

+31617
-26868
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,927 files changed

+31617
-26868
lines changed

.github/ISSUE_TEMPLATE/--bug-report.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Bug report
22
description: Create a bug report to help us improve Plane
33
title: "[bug]: "
4-
labels: [🐛bug]
4+
labels: [🐛bug, plane]
55
assignees: [vihar, pushya22]
66
body:
77
- type: markdown

.github/ISSUE_TEMPLATE/--feature-request.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Feature request
22
description: Suggest a feature to improve Plane
33
title: "[feature]: "
4-
labels: [✨feature]
4+
labels: [✨feature, plane]
55
assignees: [vihar, pushya22]
66
body:
77
- type: markdown

.github/workflows/pull-request-build-lint-api.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ jobs:
2727
github.event.pull_request.draft == false &&
2828
github.event.pull_request.requested_reviewers != null
2929
steps:
30-
- uses: actions/checkout@v4
30+
- uses: actions/checkout@v6
3131
- name: Set up Python
32-
uses: actions/setup-python@v5
32+
uses: actions/setup-python@v6
3333
with:
34-
python-version: "3.x"
34+
python-version: "3.12.x"
35+
cache: 'pip'
36+
cache-dependency-path: 'apps/api/requirements.txt'
3537
- name: Install Pylint
3638
run: python -m pip install ruff
3739
- name: Install API Dependencies

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

Lines changed: 125 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ concurrency:
1717
cancel-in-progress: true
1818

1919
jobs:
20-
build-and-lint:
21-
name: Build and lint web apps
20+
# Format check has no build dependencies - run immediately in parallel
21+
check-format:
22+
name: check:format
2223
runs-on: ubuntu-latest
23-
timeout-minutes: 25
24+
timeout-minutes: 10
2425
if: |
2526
github.event.pull_request.draft == false &&
2627
github.event.pull_request.requested_reviewers != null
@@ -29,28 +30,140 @@ jobs:
2930
TURBO_SCM_HEAD: ${{ github.sha }}
3031
steps:
3132
- name: Checkout code
32-
uses: actions/checkout@v4
33+
uses: actions/checkout@v6
3334
with:
3435
fetch-depth: 50
3536
filter: blob:none
3637

3738
- name: Set up Node.js
38-
uses: actions/setup-node@v4
39+
uses: actions/setup-node@v6
3940

4041
- name: Enable Corepack and pnpm
4142
run: corepack enable pnpm
4243

44+
- name: Get pnpm store directory
45+
shell: bash
46+
run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
47+
48+
- name: Cache pnpm store
49+
uses: actions/cache@v4
50+
with:
51+
path: ${{ env.STORE_PATH }}
52+
key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
53+
restore-keys: |
54+
pnpm-store-${{ runner.os }}-
55+
4356
- name: Install dependencies
4457
run: pnpm install --frozen-lockfile
4558

46-
- name: Lint Affected
47-
run: pnpm turbo run check:lint --affected
48-
49-
- name: Check Affected format
59+
- name: Check formatting
5060
run: pnpm turbo run check:format --affected
5161

52-
- name: Check Affected types
53-
run: pnpm turbo run check:types --affected
62+
# Build packages - required for lint and type checks
63+
build:
64+
name: Build packages
65+
runs-on: ubuntu-latest
66+
timeout-minutes: 15
67+
if: |
68+
github.event.pull_request.draft == false &&
69+
github.event.pull_request.requested_reviewers != null
70+
env:
71+
TURBO_SCM_BASE: ${{ github.event.pull_request.base.sha }}
72+
TURBO_SCM_HEAD: ${{ github.sha }}
73+
NODE_OPTIONS: "--max-old-space-size=4096"
74+
steps:
75+
- name: Checkout code
76+
uses: actions/checkout@v6
77+
with:
78+
fetch-depth: 50
79+
filter: blob:none
80+
81+
- name: Set up Node.js
82+
uses: actions/setup-node@v6
83+
84+
- name: Enable Corepack and pnpm
85+
run: corepack enable pnpm
86+
87+
- name: Get pnpm store directory
88+
shell: bash
89+
run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
90+
91+
- name: Cache pnpm store
92+
uses: actions/cache@v4
93+
with:
94+
path: ${{ env.STORE_PATH }}
95+
key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
96+
restore-keys: |
97+
pnpm-store-${{ runner.os }}-
5498
55-
- name: Build Affected
99+
- name: Restore Turbo cache
100+
uses: actions/cache/restore@v4
101+
with:
102+
path: .turbo
103+
key: turbo-${{ runner.os }}-${{ github.event.pull_request.base.sha }}-${{ github.sha }}
104+
restore-keys: |
105+
turbo-${{ runner.os }}-${{ github.event.pull_request.base.sha }}-
106+
turbo-${{ runner.os }}-
107+
108+
- name: Install dependencies
109+
run: pnpm install --frozen-lockfile
110+
111+
- name: Build packages
56112
run: pnpm turbo run build --affected
113+
114+
- name: Save Turbo cache
115+
uses: actions/cache/save@v4
116+
with:
117+
path: .turbo
118+
key: turbo-${{ runner.os }}-${{ github.event.pull_request.base.sha }}-${{ github.sha }}
119+
120+
# Lint and type checks depend on build artifacts
121+
check:
122+
name: ${{ matrix.task }}
123+
runs-on: ubuntu-latest
124+
needs: build
125+
timeout-minutes: 15
126+
strategy:
127+
fail-fast: false
128+
matrix:
129+
task: [check:lint, check:types]
130+
env:
131+
TURBO_SCM_BASE: ${{ github.event.pull_request.base.sha }}
132+
TURBO_SCM_HEAD: ${{ github.sha }}
133+
NODE_OPTIONS: "--max-old-space-size=4096"
134+
steps:
135+
- name: Checkout code
136+
uses: actions/checkout@v6
137+
with:
138+
fetch-depth: 50
139+
filter: blob:none
140+
141+
- name: Set up Node.js
142+
uses: actions/setup-node@v6
143+
144+
- name: Enable Corepack and pnpm
145+
run: corepack enable pnpm
146+
147+
- name: Get pnpm store directory
148+
shell: bash
149+
run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
150+
151+
- name: Cache pnpm store
152+
uses: actions/cache@v4
153+
with:
154+
path: ${{ env.STORE_PATH }}
155+
key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
156+
restore-keys: |
157+
pnpm-store-${{ runner.os }}-
158+
159+
- name: Restore Turbo cache
160+
uses: actions/cache/restore@v4
161+
with:
162+
path: .turbo
163+
key: turbo-${{ runner.os }}-${{ github.event.pull_request.base.sha }}-${{ github.sha }}
164+
165+
- name: Install dependencies
166+
run: pnpm install --frozen-lockfile
167+
168+
- name: Run ${{ matrix.task }}
169+
run: pnpm turbo run ${{ matrix.task }} --affected

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,8 @@ CLAUDE.md
105105

106106
build/
107107
.react-router/
108-
AGENTS.md
109108

110109
build/
111110
.react-router/
112-
AGENTS.md
113111
temp/
114112
scripts/

.husky/pre-commit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pnpm lint-staged

.npmrc

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,54 @@
1-
# Enforce pnpm workspace behavior and allow Turbo's lifecycle hooks if scripts are disabled
2-
# This repo uses pnpm with workspaces.
1+
# ------------------------------
2+
# Core Workspace Behavior
3+
# ------------------------------
34

4-
# Prefer linking local workspace packages when available
5-
prefer-workspace-packages=true
6-
link-workspace-packages=true
7-
shared-workspace-lockfile=true
5+
# Always prefer using local workspace packages when available
6+
prefer-workspace-packages = true
87

9-
# Make peer installs smoother across the monorepo
10-
auto-install-peers=true
11-
strict-peer-dependencies=false
8+
# Symlink workspace packages instead of duplicating them
9+
link-workspace-packages = true
1210

13-
# If scripts are disabled (e.g., CI with --ignore-scripts), allowlisted packages can still run their hooks
14-
# Turbo occasionally performs postinstall tasks for optimal performance
15-
# moved to pnpm-workspace.yaml: onlyBuiltDependencies (e.g., allow turbo)
11+
# Use a single lockfile across the whole monorepo
12+
shared-workspace-lockfile = true
1613

17-
public-hoist-pattern[]=*eslint*
18-
public-hoist-pattern[]=prettier
19-
public-hoist-pattern[]=typescript
14+
# Ensure packages added from workspace save using workspace: protocol
15+
save-workspace-protocol = true
2016

21-
# Reproducible installs across CI and dev
22-
prefer-frozen-lockfile=true
2317

24-
# Prefer resolving to highest versions in monorepo to reduce duplication
25-
resolution-mode=highest
18+
# ------------------------------
19+
# Dependency Resolution
20+
# ------------------------------
2621

27-
# Speed up native module builds by caching side effects
28-
side-effects-cache=true
22+
# Choose the highest compatible version across the workspace
23+
# → reduces fragmentation & node_modules bloat
24+
resolution-mode = highest
2925

30-
# Speed up local dev by reusing local store when possible
31-
prefer-offline=true
26+
# Automatically install peer dependencies instead of forcing every package to declare them
27+
auto-install-peers = true
3228

33-
# Ensure workspace protocol is used when adding internal deps
34-
save-workspace-protocol=true
29+
# Don't break the install if peers are missing
30+
strict-peer-dependencies = false
31+
32+
33+
# ------------------------------
34+
# Performance Optimizations
35+
# ------------------------------
36+
37+
# Use cached artifacts for native modules (sharp, esbuild, etc.)
38+
side-effects-cache = true
39+
40+
# Prefer local cached packages rather than hitting network
41+
prefer-offline = true
42+
43+
# In CI, refuse to modify lockfile (prevents drift)
44+
prefer-frozen-lockfile = true
45+
46+
# Use isolated linker (best compatibility with Node ecosystem tools)
47+
node-linker = isolated
48+
49+
# Hoist commonly used tools to the root to prevent duplicates and speed up resolution
50+
public-hoist-pattern[] = typescript
51+
public-hoist-pattern[] = eslint
52+
public-hoist-pattern[] = *@plane/*
53+
public-hoist-pattern[] = vite
54+
public-hoist-pattern[] = turbo

.prettierignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.next/
2+
.react-router/
3+
.turbo/
4+
.vite/
5+
build/
6+
dist/
7+
node_modules/
8+
out/
9+
pnpm-lock.yaml
10+
storybook-static/

.prettierrc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
{
2+
"$schema": "https://json.schemastore.org/prettierrc",
3+
"overrides": [
4+
{
5+
"files": ["packages/codemods/**/*"],
6+
"options": {
7+
"printWidth": 80
8+
}
9+
}
10+
],
11+
"plugins": ["@prettier/plugin-oxc"],
212
"printWidth": 120,
313
"tabWidth": 2,
4-
"trailingComma": "es5",
5-
"plugins": ["@prettier/plugin-oxc"]
14+
"trailingComma": "es5"
615
}

AGENTS.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Agent Development Guide
2+
3+
## Commands
4+
5+
- `pnpm dev` - Start all dev servers (web:3000, admin:3001)
6+
- `pnpm build` - Build all packages and apps
7+
- `pnpm check` - Run all checks (format, lint, types)
8+
- `pnpm check:lint` - ESLint across all packages
9+
- `pnpm check:types` - TypeScript type checking
10+
- `pnpm fix` - Auto-fix format and lint issues
11+
- `pnpm turbo run <command> --filter=<package>` - Target specific package/app
12+
- `pnpm --filter=@plane/ui storybook` - Start Storybook on port 6006
13+
14+
## Code Style
15+
16+
- **Imports**: Use `workspace:*` for internal packages, `catalog:` for external deps
17+
- **TypeScript**: Strict mode enabled, all files must be typed
18+
- **Formatting**: Prettier with Tailwind plugin, run `pnpm fix:format`
19+
- **Linting**: ESLint with shared config, max warnings vary by package
20+
- **Naming**: camelCase for variables/functions, PascalCase for components/types
21+
- **Error Handling**: Use try-catch with proper error types, log errors appropriately
22+
- **State Management**: MobX stores in `packages/shared-state`, reactive patterns
23+
- **Testing**: All features require unit tests, use existing test framework per package
24+
- **Components**: Build in `@plane/ui` with Storybook for isolated development

0 commit comments

Comments
 (0)