Skip to content

Commit dbde184

Browse files
authored
Refactor: optimize tools setup using a shared pnpm cache (#15)
Replaces repetitive dependency installations with a shared `node-tools` image and PNPM cache for efficiency. Updates Dockerfile, compose files, and workflows to streamline dependency management. Removes redundant install steps and simplifies Makefile targets.
1 parent fc1dd24 commit dbde184

File tree

6 files changed

+59
-32
lines changed

6 files changed

+59
-32
lines changed

.github/workflows/tools.yml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,16 @@ jobs:
2525
username: ${{ secrets.DOCKERHUB_USERNAME }}
2626
password: ${{ secrets.DOCKERHUB_PASSWORD }}
2727

28-
- name: Run lint
28+
- name: Build node-tools image
29+
run: docker build -t node-tools -f Dockerfile.tools .
30+
31+
- name: Install dependencies and run lint
2932
run: |
30-
docker compose -f ${{ env.COMPOSE_FILE_TOOLS }} run --rm install-node-deps
3133
docker compose -f ${{ env.COMPOSE_FILE_TOOLS }} run --rm biome-check
3234
35+
- name: Cleanup dangling volumes
36+
run: docker volume rm $(docker volume ls -q -f dangling=true) || true
37+
3338
typecheck:
3439
runs-on: ubuntu-latest
3540

@@ -42,9 +47,11 @@ jobs:
4247
username: ${{ secrets.DOCKERHUB_USERNAME }}
4348
password: ${{ secrets.DOCKERHUB_PASSWORD }}
4449

45-
- name: Run typecheck
50+
- name: Build node-tools image
51+
run: docker build -t node-tools -f Dockerfile.tools .
52+
53+
- name: Install dependencies and run typecheck
4654
run: |
47-
docker compose -f ${{ env.COMPOSE_FILE_TOOLS }} run --rm install-node-deps
4855
docker compose -f ${{ env.COMPOSE_FILE_TOOLS }} run --rm tsc
4956
5057
tests:
@@ -60,10 +67,15 @@ jobs:
6067
username: ${{ secrets.DOCKERHUB_USERNAME }}
6168
password: ${{ secrets.DOCKERHUB_PASSWORD }}
6269

70+
- name: Build node-tools image
71+
run: docker build -t node-tools -f Dockerfile.tools .
72+
6373
- name: Run tests
6474
run: |
6575
cp .env.ci .env
6676
docker compose -f ${{ env.COMPOSE_FILE }} up -d redis
67-
docker compose -f ${{ env.COMPOSE_FILE_TOOLS }} run --rm install-node-deps
6877
docker compose -f ${{ env.COMPOSE_FILE_TOOLS }} up -d postgres-test
6978
docker compose -f ${{ env.COMPOSE_FILE_TOOLS }} run --rm test
79+
80+
- name: Cleanup dangling volumes
81+
run: docker volume rm $(docker volume ls -q -f dangling=true) || true

Dockerfile

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
FROM node:23.0 AS base
22

3-
# All deps stage
3+
RUN npm install -g corepack@latest && corepack enable
4+
5+
# Dependency stage
46
FROM base AS deps
57
WORKDIR /app
68
ADD package.json pnpm-lock.yaml ./
7-
RUN npm install -g corepack@latest
8-
RUN corepack enable
9-
RUN pnpm install
9+
# Active le cache PNPM pour accélérer les builds
10+
RUN --mount=type=cache,target=/root/.pnpm-store pnpm install
1011

1112
# Production only deps stage
1213
FROM base AS production-deps
1314
WORKDIR /app
1415
ADD package.json pnpm-lock.yaml ./
15-
RUN npm install -g corepack@latest
16-
RUN corepack enable
17-
RUN pnpm install --frozen-lockfile --prod
16+
RUN --mount=type=cache,target=/root/.pnpm-store pnpm install --frozen-lockfile --prod
1817

1918
# Build stage
2019
FROM base AS build

Dockerfile.tools

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM node:23.0
2+
3+
RUN npm install -g pnpm
4+
5+
WORKDIR /app
6+
7+
COPY package.json pnpm-lock.yaml ./
8+
9+
RUN --mount=type=cache,target=/root/.pnpm-store pnpm install

Makefile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,26 +70,26 @@ db-test:
7070
$(DOCKER_COMPOSE_TOOLS) up -d postgres-test
7171

7272
.PHONY: test
73-
test: set-docker-node-deps db-test
73+
test: db-test
7474
$(DOCKER_COMPOSE_TOOLS) run --rm test && $(DOCKER_COMPOSE_TOOLS) down postgres-test
7575

7676
.PHONY: lint
77-
lint: set-docker-node-deps
77+
lint:
7878
$(DOCKER_COMPOSE_TOOLS) run --rm biome-check
7979

8080
.PHONY: lint-fix
81-
lint-fix: set-docker-node-deps
81+
lint-fix:
8282
$(DOCKER_COMPOSE_TOOLS) run --rm biome-check-fix
8383

8484
.PHONY: tsc
8585
tsc:
8686
$(DOCKER_COMPOSE_TOOLS) run --rm tsc
8787

8888
.PHONY: init-dev
89-
init-dev: install docker-dev migrate seed serve
89+
init-dev: docker-dev migrate seed serve
9090

9191
.PHONY: init-prod
92-
init-prod: install docker-prod migrate
92+
init-prod: docker-prod migrate
9393

9494
.PHONY: reset-db
9595
reset-db: rollback migrate seed

docker-compose.dev.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ services:
44
volumes:
55
- .:/app
66
- node_modules:/app/node_modules
7+
- pnpm-store:/root/.pnpm-store
78
environment:
89
- REDIS_HOST=redis
910
- DB_HOST=postgres
1011
working_dir: /app
1112
entrypoint: [ "sh", "-c" ]
12-
command: ["corepack enable && node ace scheduler:run"]
13+
command: ["node ace scheduler:run"]
1314
depends_on:
1415
- redis
1516

@@ -27,3 +28,4 @@ services:
2728

2829
volumes:
2930
node_modules:
31+
pnpm-store:

docker-compose.tools.yaml

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,61 @@
11
services:
22
install-node-deps:
3-
image: node:23.0
3+
image: node-tools
44
volumes:
55
- .:/app
66
- node_modules:/app/node_modules
7+
- pnpm-store:/root/.pnpm-store
78
entrypoint: [ "sh", "-c" ]
8-
command: ["npm install -g corepack@latest && corepack enable && pnpm install"]
9+
command: ["npm install -g pnpm && pnpm install"]
910
working_dir: /app
1011

1112
tsc:
12-
image: node:23.0
13+
image: node-tools
1314
volumes:
1415
- .:/app
1516
- node_modules:/app/node_modules
17+
- pnpm-store:/root/.pnpm-store
1618
working_dir: /app
1719
entrypoint: [ "sh", "-c" ]
18-
command: ["npm install -g corepack@latest && corepack enable && FORCE_COLOR=1 pnpm typecheck"]
20+
command: ["pnpm typecheck"]
1921

2022
biome-check:
21-
image: node:23.0
23+
image: node-tools
2224
volumes:
2325
- .:/app
2426
- node_modules:/app/node_modules
27+
- pnpm-store:/root/.pnpm-store
2528
working_dir: /app
2629
entrypoint: [ "sh", "-c" ]
27-
command: ["npm install -g corepack@latest && corepack enable && FORCE_COLOR=1 pnpm lint"]
30+
command: ["pnpm lint"]
2831

2932
biome-check-fix:
30-
image: node:23.0
33+
image: node-tools
3134
volumes:
3235
- .:/app
3336
- node_modules:/app/node_modules
37+
- pnpm-store:/root/.pnpm-store
3438
working_dir: /app
3539
entrypoint: [ "sh", "-c" ]
36-
command: ["npm install -g corepack@latest && corepack enable && FORCE_COLOR=1 pnpm lint --write"]
40+
command: ["pnpm lint --write"]
3741

3842
build:
39-
image: node:23.0
43+
image: node-tools
4044
volumes:
4145
- .:/app
4246
- node_modules:/app/node_modules
47+
- pnpm-store:/root/.pnpm-store
4348
- build:/app/build
4449
working_dir: /app
4550
entrypoint: [ "sh", "-c" ]
46-
command: ["npm install -g corepack@latest && corepack enable && FORCE_COLOR=1 pnpm build"]
51+
command: ["pnpm build"]
4752

4853
test:
49-
image: node:23.0
54+
image: node-tools
5055
volumes:
5156
- .:/app
5257
- node_modules:/app/node_modules
58+
- pnpm-store:/root/.pnpm-store
5359
working_dir: /app
5460
environment:
5561
- REDIS_HOST=redis
@@ -60,9 +66,7 @@ services:
6066
- DB_PORT=7357
6167
entrypoint: [ "sh", "-c" ]
6268
command: ["
63-
npm install -g corepack@latest
64-
&& corepack enable
65-
&& pnpm install
69+
pnpm install
6670
&& npx playwright install chromium
6771
&& npx playwright install-deps
6872
&& node ace test browser --force-exit
@@ -83,4 +87,5 @@ services:
8387

8488
volumes:
8589
node_modules:
90+
pnpm-store:
8691
build:

0 commit comments

Comments
 (0)