Skip to content

Commit 68a32b9

Browse files
committed
build: migrate workspace package manager to bun
Что: - Заменен pnpm workspace на Bun 1.3.14: добавлен bun.lock, packageManager/engines, workspaces и overrides перенесены в package.json. - Обновлены package scripts, Dockerfiles, GitHub Actions и CONTRIBUTING.md под bun install/run/filter. - Production Docker packaging переведен с pnpm deploy на bun production install с hoisted linker и явным копированием workspace server package. Зачем: - Упростить toolchain, ускорить install/script startup и проверить возможность отказаться от pnpm в AgentHits/Dokploy ветке. Риски: - Реальный docker build не запускался локально из-за отсутствующего Docker CLI; Docker path проверен через production-layout simulation и требует CI/image проверки перед merge/deploy. Проверки: - Команды и результаты: bun install --frozen-lockfile - passed; bun run typecheck - passed; bun run format-and-lint - exited 0 with existing Biome warnings/infos; bun run test -- --run __test__/env/shared.test.ts - 15 passed; POSTGRES_PASSWORD=build-time-postgres-password bun run build - passed; bun run server:script - restored source exports; git diff --check - passed; pnpm/Corepack residue scan in migration scope - no matches; temp production hoisted layout ESM resolution for @dokploy/server in dokploy/api/schedules - passed; independent reviewer re-check - pass. - Ограничения: local Docker CLI unavailable, so real image build and container runtime smoke were not run. What: - Replaced the pnpm workspace with Bun 1.3.14: added bun.lock, packageManager/engines, workspaces, and moved overrides into package.json. - Updated package scripts, Dockerfiles, GitHub Actions, and CONTRIBUTING.md to use bun install/run/filter. - Replaced pnpm deploy production Docker packaging with bun production install using the hoisted linker and explicit workspace server package copying. Why: - Simplify the toolchain, speed up install/script startup, and verify whether the AgentHits/Dokploy branch can move away from pnpm. Risks: - A real docker build was not run locally because Docker CLI is unavailable; the Docker path was checked through production-layout simulation and still needs CI/image validation before merge/deploy. Checks: - Commands and results: bun install --frozen-lockfile - passed; bun run typecheck - passed; bun run format-and-lint - exited 0 with existing Biome warnings/infos; bun run test -- --run __test__/env/shared.test.ts - 15 passed; POSTGRES_PASSWORD=build-time-postgres-password bun run build - passed; bun run server:script - restored source exports; git diff --check - passed; pnpm/Corepack residue scan in migration scope - no matches; temp production hoisted layout ESM resolution for @dokploy/server in dokploy/api/schedules - passed; independent reviewer re-check - pass. - Limitations: local Docker CLI unavailable, so real image build and container runtime smoke were not run.
1 parent 93732f8 commit 68a32b9

16 files changed

Lines changed: 3893 additions & 17047 deletions

.devcontainer/Dockerfile

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ RUN apt-get update && apt-get install -y \
99
&& apt-get clean \
1010
&& rm -rf /var/lib/apt/lists/*
1111

12-
# Set up PNPM
13-
ENV PNPM_HOME="/pnpm"
14-
ENV PATH="$PNPM_HOME:$PATH"
15-
RUN corepack enable && corepack prepare pnpm@10.22.0 --activate
12+
# Set up Bun
13+
ENV BUN_INSTALL="/home/node/.bun"
14+
ENV PATH="$BUN_INSTALL/bin:$PATH"
15+
RUN mkdir -p "$BUN_INSTALL" \
16+
&& chown -R node:node "$BUN_INSTALL" \
17+
&& su node -c "curl -fsSL https://bun.sh/install | bash -s -- bun-v1.3.14"
1618

1719
# Create workspace directory
1820
WORKDIR /workspaces/dokploy
1921

2022
# Set up user permissions
21-
USER node
23+
USER node

.github/workflows/pull-request.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ jobs:
1515
job: [build, test, typecheck]
1616
steps:
1717
- uses: actions/checkout@v4
18-
- uses: pnpm/action-setup@v4
18+
- uses: oven-sh/setup-bun@v2
19+
with:
20+
bun-version: 1.3.14
1921
- uses: actions/setup-node@v4
2022
with:
2123
node-version: 24.4.0
22-
cache: "pnpm"
2324

2425
- name: Install Nixpacks
2526
if: matrix.job == 'test'
@@ -46,6 +47,6 @@ jobs:
4647
docker network create --driver overlay dokploy-network || true
4748
echo "✅ Docker Swarm initialized"
4849
49-
- run: pnpm install --frozen-lockfile
50-
- run: pnpm server:build
51-
- run: pnpm ${{ matrix.job }}
50+
- run: bun install --frozen-lockfile
51+
- run: bun run server:build
52+
- run: bun run ${{ matrix.job }}

.github/workflows/sync-openapi-docs.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,19 @@ jobs:
2121
uses: actions/checkout@v4
2222
with:
2323
token: ${{ secrets.GITHUB_TOKEN }}
24-
- uses: pnpm/action-setup@v4
24+
- uses: oven-sh/setup-bun@v2
25+
with:
26+
bun-version: 1.3.14
2527
- uses: actions/setup-node@v4
2628
with:
2729
node-version: 24.4.0
28-
cache: "pnpm"
2930

3031
- name: Install dependencies
31-
run: pnpm install --frozen-lockfile
32+
run: bun install --frozen-lockfile
3233

3334
- name: Generate OpenAPI specification
3435
run: |
35-
pnpm generate:openapi
36+
bun run generate:openapi
3637
3738
# Verifica que se generó correctamente
3839
if [ ! -f openapi.json ]; then
@@ -130,4 +131,3 @@ jobs:
130131
git push
131132
132133
echo "✅ OpenAPI synced to SDK repository successfully"
133-

CONTRIBUTING.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ We use Node v24.4.0 and recommend this specific version. If you have nvm install
5858
```bash
5959
git clone https://github.com/dokploy/dokploy.git
6060
cd dokploy
61-
pnpm install
61+
bun install
6262
cp apps/dokploy/.env.example apps/dokploy/.env
6363
```
6464

@@ -71,19 +71,19 @@ cp apps/dokploy/.env.example apps/dokploy/.env
7171
Run the command that will spin up all the required services and files.
7272

7373
```bash
74-
pnpm run dokploy:setup
74+
bun run dokploy:setup
7575
```
7676

7777
Run this script
7878

7979
```bash
80-
pnpm run server:script
80+
bun run server:script
8181
```
8282

8383
Now run the development server.
8484

8585
```bash
86-
pnpm run dokploy:dev
86+
bun run dokploy:dev
8787
```
8888

8989
Go to http://localhost:3000 to see the development server
@@ -94,7 +94,7 @@ Go to http://localhost:3000 to see the development server
9494
## Build
9595

9696
```bash
97-
pnpm run dokploy:build
97+
bun run dokploy:build
9898
```
9999

100100
## Docker
@@ -109,27 +109,27 @@ cp apps/dokploy/.env.production.example apps/dokploy/.env.production
109109
then run build command
110110

111111
```bash
112-
pnpm run docker:build
112+
bun run --filter './apps/dokploy' docker:build
113113
```
114114

115115
To push the docker image
116116

117117
```bash
118-
pnpm run docker:push
118+
bun run --filter './apps/dokploy' docker:push
119119
```
120120

121121
## Password Reset
122122

123123
In the case you lost your password, you can reset it using the following command
124124

125125
```bash
126-
pnpm run reset-password
126+
bun run --filter './apps/dokploy' reset-password
127127
```
128128

129129
If you want to test the webhooks on development mode using localtunnel, make sure to install [`localtunnel`](https://localtunnel.app/)
130130

131131
```bash
132-
pnpm dlx localtunnel --port 3000
132+
bunx localtunnel --port 3000
133133
```
134134

135135
If you run into permission issues of docker run the following command

Dockerfile

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
# syntax=docker/dockerfile:1
2+
FROM oven/bun:1.3.14 AS bun
3+
24
FROM node:24.4.0-slim AS base
3-
ENV PNPM_HOME="/pnpm"
4-
ENV PATH="$PNPM_HOME/bin:$PNPM_HOME:$PATH"
5-
ENV PNPM_CONFIG_MINIMUM_RELEASE_AGE=0
6-
ENV PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN=false
7-
RUN npm install -g corepack@0.35.0 \
8-
&& corepack enable \
9-
&& corepack prepare pnpm@11.10.0 --activate
5+
COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
6+
ENV BUN_INSTALL="/root/.bun"
7+
ENV PATH="$BUN_INSTALL/bin:$PATH"
8+
RUN ln -s /usr/local/bin/bun /usr/local/bin/bunx
109

1110
FROM base AS build
1211
ARG DOKPLOY_OFFICIAL_VERSION=v0.29.8
@@ -19,15 +18,28 @@ WORKDIR /usr/src/app
1918
RUN apt-get update && apt-get install -y python3 make g++ git python3-pip pkg-config libsecret-1-dev && rm -rf /var/lib/apt/lists/*
2019

2120
# Install dependencies
22-
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
21+
RUN --mount=type=cache,id=bun,target=/root/.bun/install/cache bun install --frozen-lockfile
2322

2423
# Deploy only the dokploy app
2524

2625
ENV NODE_ENV=production
27-
RUN pnpm --filter=@dokploy/server build
28-
RUN pnpm --filter=./apps/dokploy run build
29-
30-
RUN pnpm --filter=./apps/dokploy --prod deploy --legacy /prod/dokploy
26+
RUN bun run --filter './packages/server' build
27+
RUN bun run --filter './apps/dokploy' build
28+
29+
RUN bun install --production --frozen-lockfile --linker hoisted
30+
31+
RUN mkdir -p /prod/dokploy \
32+
&& cp -R /usr/src/app/apps/dokploy/package.json /prod/dokploy/package.json \
33+
&& cp -R /usr/src/app/apps/dokploy/next.config.mjs /prod/dokploy/next.config.mjs \
34+
&& cp -R /usr/src/app/apps/dokploy/public /prod/dokploy/public \
35+
&& cp -R /usr/src/app/apps/dokploy/drizzle /prod/dokploy/drizzle \
36+
&& cp -R /usr/src/app/apps/dokploy/components.json /prod/dokploy/components.json \
37+
&& cp -R /usr/src/app/node_modules /prod/dokploy/node_modules \
38+
&& mkdir -p /prod/dokploy/packages \
39+
&& cp -R /usr/src/app/packages/server /prod/dokploy/packages/server \
40+
&& rm -f /prod/dokploy/node_modules/dokploy \
41+
&& rm -f /prod/dokploy/node_modules/@dokploy/api \
42+
&& rm -f /prod/dokploy/node_modules/@dokploy/schedules
3143

3244
RUN cp -R /usr/src/app/apps/dokploy/.next /prod/dokploy/.next
3345
RUN cp -R /usr/src/app/apps/dokploy/dist /prod/dokploy/dist
@@ -54,6 +66,7 @@ COPY --from=build /prod/dokploy/drizzle ./drizzle
5466
COPY .env.production ./.env
5567
COPY --from=build /prod/dokploy/components.json ./components.json
5668
COPY --from=build /prod/dokploy/node_modules ./node_modules
69+
COPY --from=build /prod/dokploy/packages ./packages
5770

5871

5972
# Install docker
@@ -67,7 +80,7 @@ RUN curl -sSL https://nixpacks.com/install.sh -o install.sh \
6780
&& chmod +x install.sh \
6881
&& NIXPACKS_VERSION="$NIXPACKS_VERSION" ./install.sh -y \
6982
&& rm install.sh \
70-
&& pnpm install -g tsx
83+
&& bun install -g tsx
7184

7285
# Install Railpack
7386
ARG RAILPACK_VERSION=0.15.4
@@ -91,4 +104,4 @@ EXPOSE 3000
91104
HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=5 \
92105
CMD curl -fs http://localhost:3000/api/trpc/settings.health || exit 1
93106

94-
CMD ["sh", "-c", "pnpm run wait-for-postgres && exec pnpm start"]
107+
CMD ["sh", "-c", "bun run wait-for-postgres && exec bun run start"]

Dockerfile.cloud

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# syntax=docker/dockerfile:1
2+
FROM oven/bun:1.3.14 AS bun
3+
24
FROM node:24.4.0-slim AS base
3-
ENV PNPM_HOME="/pnpm"
4-
ENV PATH="$PNPM_HOME:$PATH"
5-
RUN corepack enable
6-
RUN corepack prepare pnpm@10.22.0 --activate
5+
COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
6+
ENV BUN_INSTALL="/root/.bun"
7+
ENV PATH="$BUN_INSTALL/bin:$PATH"
8+
RUN ln -s /usr/local/bin/bun /usr/local/bin/bunx
79

810
FROM base AS build
911
COPY . /usr/src/app
@@ -12,7 +14,7 @@ WORKDIR /usr/src/app
1214
RUN apt-get update && apt-get install -y python3 make g++ git python3-pip pkg-config libsecret-1-dev && rm -rf /var/lib/apt/lists/*
1315

1416
# Install dependencies
15-
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm --filter=@dokploy/server --filter=./apps/dokploy install --frozen-lockfile
17+
RUN --mount=type=cache,id=bun,target=/root/.bun/install/cache bun install --frozen-lockfile
1618

1719

1820
# Deploy only the dokploy app
@@ -26,10 +28,23 @@ ARG NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
2628
ENV NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=$NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY
2729

2830
ENV NODE_ENV=production
29-
RUN pnpm --filter=@dokploy/server build
30-
RUN pnpm --filter=./apps/dokploy run build
31-
32-
RUN pnpm --filter=./apps/dokploy --prod deploy --legacy /prod/dokploy
31+
RUN bun run --filter './packages/server' build
32+
RUN bun run --filter './apps/dokploy' build
33+
34+
RUN bun install --production --frozen-lockfile --linker hoisted
35+
36+
RUN mkdir -p /prod/dokploy \
37+
&& cp -R /usr/src/app/apps/dokploy/package.json /prod/dokploy/package.json \
38+
&& cp -R /usr/src/app/apps/dokploy/next.config.mjs /prod/dokploy/next.config.mjs \
39+
&& cp -R /usr/src/app/apps/dokploy/public /prod/dokploy/public \
40+
&& cp -R /usr/src/app/apps/dokploy/drizzle /prod/dokploy/drizzle \
41+
&& cp -R /usr/src/app/apps/dokploy/components.json /prod/dokploy/components.json \
42+
&& cp -R /usr/src/app/node_modules /prod/dokploy/node_modules \
43+
&& mkdir -p /prod/dokploy/packages \
44+
&& cp -R /usr/src/app/packages/server /prod/dokploy/packages/server \
45+
&& rm -f /prod/dokploy/node_modules/dokploy \
46+
&& rm -f /prod/dokploy/node_modules/@dokploy/api \
47+
&& rm -f /prod/dokploy/node_modules/@dokploy/schedules
3348

3449
RUN cp -R /usr/src/app/apps/dokploy/.next /prod/dokploy/.next
3550
RUN cp -R /usr/src/app/apps/dokploy/dist /prod/dokploy/dist
@@ -51,13 +66,14 @@ COPY --from=build /prod/dokploy/package.json ./package.json
5166
COPY --from=build /prod/dokploy/drizzle ./drizzle
5267
COPY --from=build /prod/dokploy/components.json ./components.json
5368
COPY --from=build /prod/dokploy/node_modules ./node_modules
69+
COPY --from=build /prod/dokploy/packages ./packages
5470

5571

5672
# Install RCLONE
5773
RUN curl https://rclone.org/install.sh | bash
5874

5975
# tsx
60-
RUN pnpm install -g tsx
76+
RUN bun install -g tsx
6177

6278
EXPOSE 3000
63-
CMD [ "pnpm", "start" ]
79+
CMD ["bun", "run", "start"]

Dockerfile.schedule

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# syntax=docker/dockerfile:1
2+
FROM oven/bun:1.3.14 AS bun
3+
24
FROM node:24.4.0-slim AS base
3-
ENV PNPM_HOME="/pnpm"
4-
ENV PATH="$PNPM_HOME:$PATH"
5-
RUN corepack enable
6-
RUN corepack prepare pnpm@10.22.0 --activate
5+
COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
6+
ENV BUN_INSTALL="/root/.bun"
7+
ENV PATH="$BUN_INSTALL/bin:$PATH"
8+
RUN ln -s /usr/local/bin/bun /usr/local/bin/bunx
79

810
FROM base AS build
911
COPY . /usr/src/app
@@ -12,15 +14,24 @@ WORKDIR /usr/src/app
1214
RUN apt-get update && apt-get install -y python3 make g++ git python3-pip pkg-config libsecret-1-dev && rm -rf /var/lib/apt/lists/*
1315

1416
# Install dependencies
15-
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm --filter=@dokploy/server --filter=./apps/schedules install --frozen-lockfile
17+
RUN --mount=type=cache,id=bun,target=/root/.bun/install/cache bun install --frozen-lockfile
1618

1719
# Deploy only the dokploy app
1820

1921
ENV NODE_ENV=production
20-
RUN pnpm --filter=@dokploy/server build
21-
RUN pnpm --filter=./apps/schedules run build
22+
RUN bun run --filter './packages/server' build
23+
RUN bun run --filter './apps/schedules' build
24+
25+
RUN bun install --production --frozen-lockfile --linker hoisted
2226

23-
RUN pnpm --filter=./apps/schedules --prod deploy --legacy /prod/schedules
27+
RUN mkdir -p /prod/schedules \
28+
&& cp -R /usr/src/app/apps/schedules/package.json /prod/schedules/package.json \
29+
&& cp -R /usr/src/app/node_modules /prod/schedules/node_modules \
30+
&& mkdir -p /prod/schedules/packages \
31+
&& cp -R /usr/src/app/packages/server /prod/schedules/packages/server \
32+
&& rm -f /prod/schedules/node_modules/dokploy \
33+
&& rm -f /prod/schedules/node_modules/@dokploy/api \
34+
&& rm -f /prod/schedules/node_modules/@dokploy/schedules
2435

2536
RUN cp -R /usr/src/app/apps/schedules/dist /prod/schedules/dist
2637

@@ -34,6 +45,7 @@ ENV NODE_ENV=production
3445
COPY --from=build /prod/schedules/dist ./dist
3546
COPY --from=build /prod/schedules/package.json ./package.json
3647
COPY --from=build /prod/schedules/node_modules ./node_modules
48+
COPY --from=build /prod/schedules/packages ./packages
3749

3850
ENV HOSTNAME=0.0.0.0
39-
CMD ["pnpm", "start"]
51+
CMD ["bun", "run", "start"]

0 commit comments

Comments
 (0)