@travetto/pack 4.0.0-rc.7 → 4.0.0-rc.9
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 +11 -7
- package/package.json +4 -4
- package/src/config-util.ts +20 -15
- package/src/types.ts +1 -0
- package/support/bin/docker-operation.ts +12 -0
- package/support/cli.pack_docker.ts +2 -1
package/README.md
CHANGED
|
@@ -237,12 +237,22 @@ cd $TRV_OUT
|
|
|
237
237
|
npx rollup -c $TRV_OUT/node_modules/@travetto/pack/support/rollup/build.js
|
|
238
238
|
cd $ROOT
|
|
239
239
|
|
|
240
|
+
# Pulling Docker Base Image node:20-alpine
|
|
241
|
+
|
|
242
|
+
echo "Pulling Docker Base Image node:20-alpine"
|
|
243
|
+
|
|
244
|
+
docker pull node:20-alpine
|
|
245
|
+
|
|
246
|
+
# Detected Image OS node:20-alpine as alpine
|
|
247
|
+
|
|
248
|
+
echo "Detected Image OS node:20-alpine as alpine"
|
|
249
|
+
|
|
240
250
|
# Generating Docker File $DIST/Dockerfile @travetto/pack/support/pack.dockerfile
|
|
241
251
|
|
|
242
252
|
echo "Generating Docker File $DIST/Dockerfile @travetto/pack/support/pack.dockerfile"
|
|
243
253
|
|
|
244
254
|
echo "FROM node:20-alpine" > $DIST/Dockerfile
|
|
245
|
-
echo "RUN
|
|
255
|
+
echo "RUN addgroup -g 2000 app && adduser -D -G app -u 2000 app" >> $DIST/Dockerfile
|
|
246
256
|
echo "RUN mkdir /app && chown app:app /app" >> $DIST/Dockerfile
|
|
247
257
|
echo "COPY --chown=\"app:app\" . /app" >> $DIST/Dockerfile
|
|
248
258
|
echo "ENV NODE_OPTIONS=\"\"" >> $DIST/Dockerfile
|
|
@@ -250,12 +260,6 @@ echo "USER app" >> $DIST/Dockerfile
|
|
|
250
260
|
echo "WORKDIR /app" >> $DIST/Dockerfile
|
|
251
261
|
echo "ENTRYPOINT [\"/app/todo-app.sh\"]" >> $DIST/Dockerfile
|
|
252
262
|
|
|
253
|
-
# Pulling Docker Base Image node:20-alpine
|
|
254
|
-
|
|
255
|
-
echo "Pulling Docker Base Image node:20-alpine"
|
|
256
|
-
|
|
257
|
-
docker pull node:20-alpine
|
|
258
|
-
|
|
259
263
|
# Building Docker Container latest
|
|
260
264
|
|
|
261
265
|
echo "Building Docker Container latest"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@travetto/pack",
|
|
3
|
-
"version": "4.0.0-rc.
|
|
3
|
+
"version": "4.0.0-rc.9",
|
|
4
4
|
"description": "Code packing utilities",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"travetto",
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
"@rollup/plugin-json": "^6.1.0",
|
|
30
30
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
31
31
|
"@rollup/plugin-terser": "^0.4.4",
|
|
32
|
-
"@travetto/base": "^4.0.0-rc.
|
|
33
|
-
"@travetto/terminal": "^4.0.0-rc.
|
|
32
|
+
"@travetto/base": "^4.0.0-rc.8",
|
|
33
|
+
"@travetto/terminal": "^4.0.0-rc.8",
|
|
34
34
|
"rollup": "^4.9.6"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@travetto/cli": "^4.0.0-rc.
|
|
37
|
+
"@travetto/cli": "^4.0.0-rc.8"
|
|
38
38
|
},
|
|
39
39
|
"peerDependenciesMeta": {
|
|
40
40
|
"@travetto/cli": {
|
package/src/config-util.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { DockerPackConfig } from './types';
|
|
2
2
|
|
|
3
|
-
const ifElse = (check: string, succ: string, fail: string): string => `${check} && (${succ}) || (${fail})`;
|
|
4
|
-
|
|
5
3
|
/**
|
|
6
4
|
* Common utils for setting up pack config
|
|
7
5
|
*/
|
|
@@ -17,12 +15,15 @@ export class PackConfigUtil {
|
|
|
17
15
|
* Install docker pages in either apk or apt environments
|
|
18
16
|
*/
|
|
19
17
|
static dockerPackageInstall(cfg: DockerPackConfig): string {
|
|
20
|
-
const { packages } = cfg.dockerRuntime;
|
|
18
|
+
const { os, packages } = cfg.dockerRuntime;
|
|
21
19
|
if (packages?.length) {
|
|
22
|
-
|
|
23
|
-
`apk --update add ${packages.join(' ')} && rm -rf /var/cache/apk
|
|
24
|
-
`apt update && apt install -y ${packages.join(' ')} && rm -rf /var/lib/{apt,dpkg,cache,log}
|
|
25
|
-
|
|
20
|
+
switch (os) {
|
|
21
|
+
case 'alpine': return `RUN apk --update add ${packages.join(' ')} && rm -rf /var/cache/apk/*`;
|
|
22
|
+
case 'debian': return `RUN apt update && apt install -y ${packages.join(' ')} && rm -rf /var/lib/{apt,dpkg,cache,log}/`;
|
|
23
|
+
case 'centos': return `RUN yum -y install ${packages.join(' ')} && yum -y clean all && rm -fr /var/cache`;
|
|
24
|
+
case 'unknown':
|
|
25
|
+
default: throw new Error('Unable to install packages in an unknown os');
|
|
26
|
+
}
|
|
26
27
|
} else {
|
|
27
28
|
return '';
|
|
28
29
|
}
|
|
@@ -39,14 +40,18 @@ export class PackConfigUtil {
|
|
|
39
40
|
* Setup docker user
|
|
40
41
|
*/
|
|
41
42
|
static dockerUser(cfg: DockerPackConfig): string {
|
|
42
|
-
const { user, group, uid, gid } = cfg.dockerRuntime;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
`addgroup -g ${gid} ${group} && adduser -D -G ${group} -u ${uid} ${user}
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
const { os, user, group, uid, gid } = cfg.dockerRuntime;
|
|
44
|
+
if (user === 'root') {
|
|
45
|
+
return '';
|
|
46
|
+
} else {
|
|
47
|
+
switch (os) {
|
|
48
|
+
case 'alpine': return `RUN addgroup -g ${gid} ${group} && adduser -D -G ${group} -u ${uid} ${user}`;
|
|
49
|
+
case 'debian':
|
|
50
|
+
case 'centos': return `RUN groupadd --gid ${gid} ${group} && useradd -u ${uid} -g ${group} ${user}`;
|
|
51
|
+
case 'unknown':
|
|
52
|
+
default: throw new Error('Unable to add user/group for an unknown os');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
/**
|
package/src/types.ts
CHANGED
|
@@ -14,6 +14,18 @@ export class DockerPackOperation {
|
|
|
14
14
|
return (cfg.dockerTag ?? []).map(x => cfg.dockerRegistry ? `${cfg.dockerRegistry}/${cfg.dockerName}:${x}` : `${cfg.dockerName}:${x}`);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Detect image os
|
|
19
|
+
*/
|
|
20
|
+
static async* detectDockerImageOs(cfg: DockerPackConfig): AsyncIterable<string[]> {
|
|
21
|
+
// Read os before writing
|
|
22
|
+
cfg.dockerRuntime.os = await PackUtil.runCommand(
|
|
23
|
+
['docker', 'run', '--entrypoint', '/bin/sh', cfg.dockerImage, '-c', 'cat /etc/*release*']
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
25
|
+
).then(out => out.match(/\b(?:debian|alpine|centos)\b/i)?.[0].toLowerCase() as 'alpine' ?? 'unknown');
|
|
26
|
+
yield* PackOperation.title(cfg, cliTpl`${{ title: 'Detected Image OS' }} ${{ param: cfg.dockerImage }} as ${{ param: cfg.dockerRuntime.os }}`);
|
|
27
|
+
}
|
|
28
|
+
|
|
17
29
|
/**
|
|
18
30
|
* Write Docker File
|
|
19
31
|
*/
|
|
@@ -79,8 +79,9 @@ export class PackDockerCommand extends BasePackCommand {
|
|
|
79
79
|
getOperations(): PackOperationShape<this>[] {
|
|
80
80
|
return [
|
|
81
81
|
...super.getOperations(),
|
|
82
|
-
DockerPackOperation.writeDockerFile,
|
|
83
82
|
DockerPackOperation.pullDockerBaseImage,
|
|
83
|
+
DockerPackOperation.detectDockerImageOs,
|
|
84
|
+
DockerPackOperation.writeDockerFile,
|
|
84
85
|
DockerPackOperation.buildDockerContainer,
|
|
85
86
|
DockerPackOperation.pushDockerContainer
|
|
86
87
|
];
|