@ronas-it/nx-generators 0.13.5 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/generators.json +5 -0
- package/package.json +1 -1
- package/src/generators/dockerfile/files/Dockerfile.template +74 -0
- package/src/generators/dockerfile/generator.d.ts +2 -0
- package/src/generators/dockerfile/generator.js +25 -0
- package/src/generators/dockerfile/generator.js.map +1 -0
- package/src/generators/dockerfile/schema.d.ts +3 -0
- package/src/generators/dockerfile/schema.json +8 -0
package/README.md
CHANGED
|
@@ -300,3 +300,7 @@ Creates [Sentry](https://sentry.io/) integration for Expo/Next application.
|
|
|
300
300
|
1. `directory` (optional) - the application directory that uses Sentry
|
|
301
301
|
|
|
302
302
|
2. `dsn` (optional) - [Data Source Name](https://docs.sentry.io/concepts/key-terms/dsn-explainer/) of your Sentry project
|
|
303
|
+
|
|
304
|
+
### 14. `dockerfile`
|
|
305
|
+
|
|
306
|
+
Generates a deployment-ready Dockerfile for Next.js applications in the monorepo.
|
package/generators.json
CHANGED
|
@@ -79,6 +79,11 @@
|
|
|
79
79
|
"factory": "./src/shared/generators/auth/generator",
|
|
80
80
|
"schema": "./src/shared/generators/auth/schema.json",
|
|
81
81
|
"description": "Creates auth related api libs and configures redux store "
|
|
82
|
+
},
|
|
83
|
+
"dockerfile": {
|
|
84
|
+
"factory": "./src/generators/dockerfile/generator",
|
|
85
|
+
"schema": "./src/generators/dockerfile/schema.json",
|
|
86
|
+
"description": "Generates dockerfile"
|
|
82
87
|
}
|
|
83
88
|
}
|
|
84
89
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Builder stage
|
|
2
|
+
FROM node:22-alpine AS builder
|
|
3
|
+
|
|
4
|
+
ARG CI_COMMIT_REF_SLUG=development
|
|
5
|
+
ARG CI_NX_APP_NAME
|
|
6
|
+
ARG CI_TARGET_BRANCH_NAME
|
|
7
|
+
|
|
8
|
+
RUN if [ -z "$CI_COMMIT_REF_SLUG" ]; then echo "CI_COMMIT_REF_SLUG is not set"; exit 1; fi
|
|
9
|
+
RUN if [ -z "$CI_NX_APP_NAME" ]; then echo "CI_NX_APP_NAME is not set"; exit 1; fi
|
|
10
|
+
RUN echo "CI_COMMIT_REF_SLUG: $CI_COMMIT_REF_SLUG"
|
|
11
|
+
RUN echo "CI_NX_APP_NAME: $CI_NX_APP_NAME"
|
|
12
|
+
RUN echo "CI_TARGET_BRANCH_NAME: $CI_TARGET_BRANCH_NAME"
|
|
13
|
+
|
|
14
|
+
ENV CI_COMMIT_REF_SLUG=${CI_COMMIT_REF_SLUG}
|
|
15
|
+
ENV CI_NX_APP_NAME=${CI_NX_APP_NAME}
|
|
16
|
+
ENV NEXT_TELEMETRY_DISABLED=1
|
|
17
|
+
|
|
18
|
+
WORKDIR /app
|
|
19
|
+
|
|
20
|
+
# Copy package.json and package-lock.json (if available)
|
|
21
|
+
COPY package*.json ./
|
|
22
|
+
|
|
23
|
+
# Install all dependencies, including devDependencies
|
|
24
|
+
RUN npm ci
|
|
25
|
+
|
|
26
|
+
# Copy the rest of the application
|
|
27
|
+
COPY . .
|
|
28
|
+
|
|
29
|
+
ENV NEXT_SHARP_PATH=/app/node_modules/sharp
|
|
30
|
+
|
|
31
|
+
RUN if [ "$CI_COMMIT_REF_SLUG" != "production" ]; then \
|
|
32
|
+
if [ -n "$CI_TARGET_BRANCH_NAME" ] && [ -f "/app/apps/${CI_NX_APP_NAME}/.env.${CI_TARGET_BRANCH_NAME}" ]; then \
|
|
33
|
+
cp "/app/apps/${CI_NX_APP_NAME}/.env.${CI_TARGET_BRANCH_NAME}" "/app/apps/${CI_NX_APP_NAME}/.env.production"; \
|
|
34
|
+
elif [ -f "/app/apps/${CI_NX_APP_NAME}/.env.${CI_COMMIT_REF_SLUG}" ]; then \
|
|
35
|
+
cp "/app/apps/${CI_NX_APP_NAME}/.env.${CI_COMMIT_REF_SLUG}" "/app/apps/${CI_NX_APP_NAME}/.env.production"; \
|
|
36
|
+
fi \
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
RUN npx nx build ${CI_NX_APP_NAME} -c ${CI_COMMIT_REF_SLUG} --skip-nx-cache
|
|
40
|
+
|
|
41
|
+
# Runner stage
|
|
42
|
+
FROM node:22-alpine AS runner
|
|
43
|
+
|
|
44
|
+
ARG CI_COMMIT_REF_SLUG=development
|
|
45
|
+
ARG CI_NX_APP_NAME
|
|
46
|
+
|
|
47
|
+
RUN if [ -z "$CI_COMMIT_REF_SLUG" ]; then echo "CI_COMMIT_REF_SLUG is not set"; exit 1; fi
|
|
48
|
+
RUN if [ -z "$CI_NX_APP_NAME" ]; then echo "CI_NX_APP_NAME is not set"; exit 1; fi
|
|
49
|
+
RUN echo "CI_COMMIT_REF_SLUG: $CI_COMMIT_REF_SLUG"
|
|
50
|
+
RUN echo "CI_NX_APP_NAME: $CI_NX_APP_NAME"
|
|
51
|
+
|
|
52
|
+
ENV CI_COMMIT_REF_SLUG=${CI_COMMIT_REF_SLUG}
|
|
53
|
+
ENV CI_NX_APP_NAME=${CI_NX_APP_NAME}
|
|
54
|
+
ENV NODE_ENV=${CI_COMMIT_REF_SLUG}
|
|
55
|
+
ENV NEXT_TELEMETRY_DISABLED=1
|
|
56
|
+
ENV PORT=3000
|
|
57
|
+
|
|
58
|
+
WORKDIR /app
|
|
59
|
+
|
|
60
|
+
RUN addgroup --system --gid 1001 nodejs && \
|
|
61
|
+
adduser --system --uid 1001 nextjs
|
|
62
|
+
|
|
63
|
+
# Copy only the built application and necessary files
|
|
64
|
+
COPY --from=builder --chown=nextjs:nodejs /app/apps/${CI_NX_APP_NAME}/.next/standalone ./
|
|
65
|
+
COPY --from=builder --chown=nextjs:nodejs /app/apps/${CI_NX_APP_NAME}/.next/static ./apps/${CI_NX_APP_NAME}/.next/static/
|
|
66
|
+
COPY --from=builder --chown=nextjs:nodejs /app/apps/${CI_NX_APP_NAME}/public ./apps/${CI_NX_APP_NAME}/public
|
|
67
|
+
|
|
68
|
+
RUN chown -R nextjs:nodejs ./apps/${CI_NX_APP_NAME}/public
|
|
69
|
+
|
|
70
|
+
USER nextjs
|
|
71
|
+
|
|
72
|
+
EXPOSE 3000
|
|
73
|
+
|
|
74
|
+
CMD ["sh", "-c", "node apps/$CI_NX_APP_NAME/server.js"]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
|
6
|
+
function default_1(tree) {
|
|
7
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
8
|
+
const projectRoot = `.`;
|
|
9
|
+
const dockerfilePath = (0, devkit_1.joinPathFragments)(projectRoot, 'Dockerfile');
|
|
10
|
+
if (tree.exists(dockerfilePath)) {
|
|
11
|
+
tree.delete(dockerfilePath);
|
|
12
|
+
console.log(`Removed existing Dockerfile`);
|
|
13
|
+
}
|
|
14
|
+
const templateSource = path.join(__dirname, 'files');
|
|
15
|
+
(0, devkit_1.generateFiles)(tree, templateSource, projectRoot, {
|
|
16
|
+
tmpl: '',
|
|
17
|
+
});
|
|
18
|
+
yield (0, devkit_1.formatFiles)(tree);
|
|
19
|
+
return () => {
|
|
20
|
+
(0, devkit_1.installPackagesTask)(tree);
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
exports.default = default_1;
|
|
25
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/dockerfile/generator.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,uCAAsG;AAEtG,mBAA+B,IAAU;;QACvC,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,MAAM,cAAc,GAAG,IAAA,0BAAiB,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAErD,IAAA,sBAAa,EAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE;YAC/C,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QAEH,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;QAExB,OAAO,GAAS,EAAE;YAChB,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;CAAA;AApBD,4BAoBC"}
|