|
1 | 1 | # ----------------------------
|
2 | 2 | # Stage 1
|
3 |
| -# Base image contains the node version and app user creation |
4 |
| -# It also configures the non-root user that will be given permission to copied files/folders in every subsequent stages |
5 | 3 | FROM node:20-alpine AS base-image
|
| 4 | + |
| 5 | +ARG INSTALL_NODEMON=false |
| 6 | + |
6 | 7 | RUN mkdir -p /usr/src/app/digital-form-builder-adapter && \
|
7 | 8 | addgroup -g 1001 appuser && \
|
8 | 9 | adduser -S -u 1001 -G appuser appuser && \
|
9 | 10 | chown -R appuser:appuser /usr/src/app/digital-form-builder-adapter && \
|
10 | 11 | chmod -R +x /usr/src/app/digital-form-builder-adapter && \
|
11 | 12 | apk update && \
|
12 | 13 | apk add --no-cache bash git
|
| 14 | +RUN if [ "$INSTALL_NODEMON" = "true" ]; then \ |
| 15 | + npm install -g nodemon --ignore-scripts; \ |
| 16 | + fi |
13 | 17 |
|
14 | 18 |
|
15 | 19 | # ----------------------------
|
16 | 20 | # Stage 2
|
17 |
| -# Cache layer contains yarn configurations |
18 |
| -# It will re-run only if there is a yarn configuration change |
19 |
| -FROM base-image AS yarn-build |
| 21 | +FROM base-image AS build-configuration |
20 | 22 | WORKDIR /usr/src/app/digital-form-builder-adapter
|
| 23 | +USER appuser |
| 24 | + |
21 | 25 | COPY --chown=appuser:appuser ../.yarn .yarn
|
22 | 26 | COPY --chown=appuser:appuser ../.yarnrc.yml .yarnrc.yml
|
23 |
| -USER 1001 |
24 |
| - |
25 |
| - |
26 |
| -# ---------------------------- |
27 |
| -# Stage 3 |
28 |
| -# Cache layer contains digital-form-builder-adapter configurations |
29 |
| -# It will re-run only if there is a configuration change |
30 |
| -FROM yarn-build AS digital-form-builder-adapter-pre-build |
31 |
| -WORKDIR /usr/src/app/digital-form-builder-adapter |
32 |
| -USER 1001 |
33 |
| -COPY --chown=appuser:appuser .git ./.git |
34 |
| -COPY --chown=appuser:appuser .gitmodules ./.gitmodules |
35 |
| -RUN git submodule update --init --recursive |
36 | 27 | COPY --chown=appuser:appuser ../package.json package.json
|
37 | 28 | COPY --chown=appuser:appuser ../tsconfig.json tsconfig.json
|
38 |
| -COPY --chown=appuser:appuser ../update-package.js update-package.js |
39 | 29 | COPY --chown=appuser:appuser ../yarn.lock yarn.lock
|
40 | 30 | COPY --chown=appuser:appuser ../designer/package.json ./designer/package.json
|
41 | 31 | COPY --chown=appuser:appuser ../runner/package.json ./runner/package.json
|
42 | 32 | COPY --chown=appuser:appuser ../model/package.json ./model/package.json
|
| 33 | +COPY --chown=appuser:appuser ../e2e-test/package.json ./e2e-test/package.json |
43 | 34 |
|
44 |
| - |
45 |
| -# ---------------------------- |
46 |
| -# Stage 4 |
47 |
| -# Cache layer contains digital-form-builder-adapter dependencies |
48 |
| -# It will re-run only if there is a dependency change |
49 |
| -FROM digital-form-builder-adapter-pre-build AS digital-form-builder-adapter-install |
50 |
| -WORKDIR /usr/src/app/digital-form-builder-adapter |
51 |
| -USER 1001 |
52 |
| -RUN --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-adapter-install \ |
53 |
| - node update-package.js && yarn setup && yarn install |
| 35 | +COPY --chown=appuser:appuser ../digital-form-builder/designer/package.json ./digital-form-builder/designer/package.json |
| 36 | +COPY --chown=appuser:appuser ../digital-form-builder/model/package.json ./digital-form-builder/model/package.json |
| 37 | +COPY --chown=appuser:appuser ../digital-form-builder/e2e/package.json ./digital-form-builder/e2e/package.json |
| 38 | +COPY --chown=appuser:appuser ../digital-form-builder/queue-model/package.json ./digital-form-builder/queue-model/package.json |
| 39 | +COPY --chown=appuser:appuser ../digital-form-builder/runner/package.json ./digital-form-builder/runner/package.json |
54 | 40 |
|
55 | 41 |
|
56 | 42 | # ----------------------------
|
57 |
| -# Stage 5 |
58 |
| -# Cache layer contains XGovFormBuilder with yarn build with dependencies |
59 |
| -# It will re-run only if there is a XGovFormBuilder change |
60 |
| -FROM digital-form-builder-adapter-install AS digital-form-builder-build |
| 43 | +# Stage 3 |
| 44 | +FROM build-configuration AS dependency-install |
61 | 45 | WORKDIR /usr/src/app/digital-form-builder-adapter
|
62 |
| -USER 1001 |
63 |
| -WORKDIR /usr/src/app/digital-form-builder-adapter/digital-form-builder |
64 |
| -RUN --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-build \ |
65 |
| - --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-adapter-install \ |
66 |
| - yarn && yarn model build && yarn queue-model build |
| 46 | +USER appuser |
| 47 | +RUN --mount=type=cache,target=/usr/src/app/digital-form-builder-adapter/.yarn/cache,uid=1001,mode=0755,id=yarn-cache \ |
| 48 | + yarn install --immutable |
67 | 49 |
|
68 | 50 |
|
69 | 51 | # ----------------------------
|
70 |
| -# Stage 6 |
71 |
| -# Cache layer contains model changes |
72 |
| -# It will re-run only if there is a model change |
73 |
| -FROM digital-form-builder-build AS digital-form-builder-adapter-model-pre-build |
| 52 | +# Stage 4 |
| 53 | +FROM dependency-install AS parent-configuration |
74 | 54 | WORKDIR /usr/src/app/digital-form-builder-adapter
|
75 |
| -USER 1001 |
76 |
| -COPY --chown=appuser:appuser ../model ./model |
| 55 | +USER appuser |
| 56 | +COPY --chown=appuser:appuser ../digital-form-builder/designer ./digital-form-builder/designer |
| 57 | +COPY --chown=appuser:appuser ../digital-form-builder/model ./digital-form-builder/model |
| 58 | +COPY --chown=appuser:appuser ../digital-form-builder/e2e ./digital-form-builder/e2e |
| 59 | +COPY --chown=appuser:appuser ../digital-form-builder/queue-model ./digital-form-builder/queue-model |
| 60 | +COPY --chown=appuser:appuser ../digital-form-builder/runner ./digital-form-builder/runner |
| 61 | +COPY --chown=appuser:appuser ../digital-form-builder/tsconfig.json ./digital-form-builder/tsconfig.json |
77 | 62 |
|
78 | 63 |
|
79 | 64 | # ----------------------------
|
80 |
| -# Stage 7 |
81 |
| -# Cache layer contains model build |
82 |
| -# It will re-run only if there is a model change and a build change |
83 |
| -FROM digital-form-builder-adapter-model-pre-build AS digital-form-builder-adapter-model-build |
| 65 | +# Stage 5 |
| 66 | +FROM parent-configuration AS model-build |
84 | 67 | WORKDIR /usr/src/app/digital-form-builder-adapter
|
85 |
| -USER 1001 |
86 |
| -RUN --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-build \ |
87 |
| - --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-adapter-install \ |
88 |
| - --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-adapter-model-build |
89 |
| -RUN yarn model build |
| 68 | +USER appuser |
| 69 | +COPY --chown=appuser:appuser ../model ./model |
| 70 | +RUN --mount=type=cache,target=/usr/src/app/digital-form-builder-adapter/.yarn/cache,uid=1001,mode=0755,id=yarn-cache \ |
| 71 | + yarn digital-form-builder/model build && yarn model build |
90 | 72 |
|
91 | 73 |
|
92 | 74 | # ----------------------------
|
93 |
| -# Stage 8 |
94 |
| -# Cache layer contains designer changes |
95 |
| -# It will re-run only if there is a designer change |
96 |
| -FROM digital-form-builder-adapter-model-build AS digital-form-builder-adapter-designer-pre-build |
| 75 | +# Stage 6 |
| 76 | +FROM model-build AS designer-configuration |
97 | 77 | WORKDIR /usr/src/app/digital-form-builder-adapter
|
98 | 78 | USER 1001
|
99 | 79 | COPY --chown=appuser:appuser ../designer ./designer
|
100 | 80 |
|
101 | 81 |
|
102 | 82 | # ----------------------------
|
103 |
| -# Stage 9 |
104 |
| -# Cache layer contains designer build |
105 |
| -# It will re-run only if there is a designer change and a build change |
106 |
| -FROM digital-form-builder-adapter-designer-pre-build AS digital-form-builder-adapter-designer-build |
| 83 | +# Stage 7 |
| 84 | +FROM designer-configuration AS designer-build |
107 | 85 | WORKDIR /usr/src/app/digital-form-builder-adapter
|
108 | 86 | USER 1001
|
109 |
| -RUN --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-build \ |
110 |
| - --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-adapter-install \ |
111 |
| - --mount=type=cache,target=.yarn/cache,uid=1001,mode=0755,id=digital-form-builder-adapter-model-build \ |
| 87 | +RUN --mount=type=cache,target=/usr/src/app/digital-form-builder-adapter/.yarn/cache,uid=1001,mode=0755,id=yarn-cache \ |
112 | 88 | yarn designer build
|
113 | 89 | CMD ["yarn", "designer", "production"]
|
114 |
| - |
115 |
| - |
116 |
| - |
117 |
| - |
118 |
| - |
119 |
| - |
120 |
| - |
121 |
| - |
0 commit comments