@git.zone/tsdocker 1.17.2 → 2.0.2
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/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.registrycopy.js +1 -1
- package/dist_ts/interfaces/index.d.ts +0 -7
- package/dist_ts/tsdocker.cli.js +62 -37
- package/dist_ts/tsdocker.config.d.ts +1 -4
- package/dist_ts/tsdocker.config.js +3 -22
- package/dist_ts/tsdocker.paths.d.ts +0 -1
- package/dist_ts/tsdocker.paths.js +1 -2
- package/dist_ts/tsdocker.plugins.d.ts +1 -5
- package/dist_ts/tsdocker.plugins.js +2 -6
- package/package.json +2 -14
- package/readme.hints.md +1 -10
- package/readme.md +163 -78
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.registrycopy.ts +1 -1
- package/ts/interfaces/index.ts +0 -8
- package/ts/tsdocker.cli.ts +62 -42
- package/ts/tsdocker.config.ts +4 -29
- package/ts/tsdocker.paths.ts +0 -1
- package/ts/tsdocker.plugins.ts +0 -8
- package/assets/Dockerfile +0 -6
- package/dist_ts/tsdocker.docker.d.ts +0 -2
- package/dist_ts/tsdocker.docker.js +0 -145
- package/dist_ts/tsdocker.snippets.d.ts +0 -5
- package/dist_ts/tsdocker.snippets.js +0 -26
- package/ts/tsdocker.docker.ts +0 -169
- package/ts/tsdocker.snippets.ts +0 -34
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
-
import * as paths from './tsdocker.paths.js';
|
|
3
|
-
import * as snippets from './tsdocker.snippets.js';
|
|
4
|
-
import { logger, ora } from './tsdocker.logging.js';
|
|
5
|
-
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
6
|
-
executor: 'bash'
|
|
7
|
-
});
|
|
8
|
-
let config;
|
|
9
|
-
/**
|
|
10
|
-
* the docker data used to build the internal testing container
|
|
11
|
-
*/
|
|
12
|
-
const dockerData = {
|
|
13
|
-
imageTag: 'npmdocker-temp-image:latest',
|
|
14
|
-
containerName: 'npmdocker-temp-container',
|
|
15
|
-
dockerProjectMountString: '',
|
|
16
|
-
dockerSockString: '',
|
|
17
|
-
dockerEnvString: ''
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* check if docker is available
|
|
21
|
-
*/
|
|
22
|
-
const checkDocker = () => {
|
|
23
|
-
const done = plugins.smartpromise.defer();
|
|
24
|
-
ora.text('checking docker...');
|
|
25
|
-
if (smartshellInstance.exec('which docker')) {
|
|
26
|
-
logger.log('ok', 'Docker found!');
|
|
27
|
-
done.resolve();
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
done.reject(new Error('docker not found on this machine'));
|
|
31
|
-
}
|
|
32
|
-
return done.promise;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* builds the Dockerfile according to the config in the project
|
|
36
|
-
*/
|
|
37
|
-
const buildDockerFile = async () => {
|
|
38
|
-
const done = plugins.smartpromise.defer();
|
|
39
|
-
ora.text('building Dockerfile...');
|
|
40
|
-
const dockerfile = snippets.dockerfileSnippet({
|
|
41
|
-
baseImage: config.baseImage,
|
|
42
|
-
command: config.command
|
|
43
|
-
});
|
|
44
|
-
logger.log('info', `Base image is: ${config.baseImage}`);
|
|
45
|
-
logger.log('info', `Command is: ${config.command}`);
|
|
46
|
-
await plugins.smartfs.file(plugins.path.join(paths.cwd, 'npmdocker')).write(dockerfile);
|
|
47
|
-
logger.log('ok', 'Dockerfile created!');
|
|
48
|
-
ora.stop();
|
|
49
|
-
done.resolve();
|
|
50
|
-
return done.promise;
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* builds the Dockerimage from the built Dockerfile
|
|
54
|
-
*/
|
|
55
|
-
const buildDockerImage = async () => {
|
|
56
|
-
logger.log('info', 'pulling latest base image from registry...');
|
|
57
|
-
await smartshellInstance.exec(`docker pull ${config.baseImage}`);
|
|
58
|
-
ora.text('building Dockerimage...');
|
|
59
|
-
const execResult = await smartshellInstance.execSilent(`docker build --load -f npmdocker -t ${dockerData.imageTag} ${paths.cwd}`);
|
|
60
|
-
if (execResult.exitCode !== 0) {
|
|
61
|
-
console.log(execResult.stdout);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
logger.log('ok', 'Dockerimage built!');
|
|
65
|
-
};
|
|
66
|
-
const buildDockerProjectMountString = async () => {
|
|
67
|
-
if (process.env.CI !== 'true') {
|
|
68
|
-
dockerData.dockerProjectMountString = `-v ${paths.cwd}:/workspace`;
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* builds an environment string that docker cli understands
|
|
73
|
-
*/
|
|
74
|
-
const buildDockerEnvString = async () => {
|
|
75
|
-
for (const key of Object.keys(config.keyValueObject)) {
|
|
76
|
-
const envString = (dockerData.dockerEnvString =
|
|
77
|
-
dockerData.dockerEnvString + `-e ${key}=${config.keyValueObject[key]} `);
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
/**
|
|
81
|
-
* creates string to mount the docker.sock inside the testcontainer
|
|
82
|
-
*/
|
|
83
|
-
const buildDockerSockString = async () => {
|
|
84
|
-
if (config.dockerSock) {
|
|
85
|
-
dockerData.dockerSockString = `-v /var/run/docker.sock:/var/run/docker.sock`;
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
/**
|
|
89
|
-
* creates a container by running the built Dockerimage
|
|
90
|
-
*/
|
|
91
|
-
const runDockerImage = async () => {
|
|
92
|
-
const done = plugins.smartpromise.defer();
|
|
93
|
-
ora.text('starting Container...');
|
|
94
|
-
ora.stop();
|
|
95
|
-
logger.log('info', 'now running Dockerimage');
|
|
96
|
-
config.exitCode = (await smartshellInstance.exec(`docker run ${dockerData.dockerProjectMountString} ${dockerData.dockerSockString} ${dockerData.dockerEnvString} --name ${dockerData.containerName} ${dockerData.imageTag}`)).exitCode;
|
|
97
|
-
};
|
|
98
|
-
/**
|
|
99
|
-
* cleans up: deletes the test container
|
|
100
|
-
*/
|
|
101
|
-
const deleteDockerContainer = async () => {
|
|
102
|
-
await smartshellInstance.execSilent(`docker rm -f ${dockerData.containerName}`);
|
|
103
|
-
};
|
|
104
|
-
/**
|
|
105
|
-
* cleans up deletes the test image
|
|
106
|
-
*/
|
|
107
|
-
const deleteDockerImage = async () => {
|
|
108
|
-
await smartshellInstance.execSilent(`docker rmi ${dockerData.imageTag}`).then(async (response) => {
|
|
109
|
-
if (response.exitCode !== 0) {
|
|
110
|
-
console.log(response.stdout);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
};
|
|
114
|
-
const preClean = async () => {
|
|
115
|
-
await deleteDockerImage()
|
|
116
|
-
.then(deleteDockerContainer)
|
|
117
|
-
.then(async () => {
|
|
118
|
-
logger.log('ok', 'ensured clean Docker environment!');
|
|
119
|
-
});
|
|
120
|
-
};
|
|
121
|
-
const postClean = async () => {
|
|
122
|
-
await deleteDockerContainer()
|
|
123
|
-
.then(deleteDockerImage)
|
|
124
|
-
.then(async () => {
|
|
125
|
-
logger.log('ok', 'cleaned up!');
|
|
126
|
-
});
|
|
127
|
-
await plugins.smartfs.file(paths.npmdockerFile).delete();
|
|
128
|
-
};
|
|
129
|
-
export let run = async (configArg) => {
|
|
130
|
-
config = configArg;
|
|
131
|
-
const resultConfig = await checkDocker()
|
|
132
|
-
.then(preClean)
|
|
133
|
-
.then(buildDockerFile)
|
|
134
|
-
.then(buildDockerImage)
|
|
135
|
-
.then(buildDockerProjectMountString)
|
|
136
|
-
.then(buildDockerEnvString)
|
|
137
|
-
.then(buildDockerSockString)
|
|
138
|
-
.then(runDockerImage)
|
|
139
|
-
.then(postClean)
|
|
140
|
-
.catch(err => {
|
|
141
|
-
console.log(err);
|
|
142
|
-
});
|
|
143
|
-
return config;
|
|
144
|
-
};
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkb2NrZXIuZG9ja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHNkb2NrZXIuZG9ja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssUUFBUSxNQUFNLHdCQUF3QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQzNELFFBQVEsRUFBRSxNQUFNO0NBQ2pCLENBQUMsQ0FBQztBQUtILElBQUksTUFBZSxDQUFDO0FBRXBCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEdBQUc7SUFDakIsUUFBUSxFQUFFLDZCQUE2QjtJQUN2QyxhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDLHdCQUF3QixFQUFFLEVBQUU7SUFDNUIsZ0JBQWdCLEVBQUUsRUFBRTtJQUNwQixlQUFlLEVBQUUsRUFBRTtDQUNwQixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUU7SUFDdkIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFL0IsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGtDQUFrQyxD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
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
-
let getMountSolutionString = (optionsArg) => {
|
|
3
|
-
if (process.env.CI) {
|
|
4
|
-
return 'COPY ./ /workspace';
|
|
5
|
-
}
|
|
6
|
-
else {
|
|
7
|
-
return '# not copying workspcae since not in CI';
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
let getGlobalPreparationString = (optionsArg) => {
|
|
11
|
-
// Always install tsdocker to ensure the latest version is available
|
|
12
|
-
return 'RUN npm install -g @git.zone/tsdocker';
|
|
13
|
-
};
|
|
14
|
-
export let dockerfileSnippet = (optionsArg) => {
|
|
15
|
-
return plugins.smartstring.indent.normalize(`
|
|
16
|
-
FROM ${optionsArg.baseImage}
|
|
17
|
-
# For info about what tsdocker does read the docs at https://gitzone.github.io/tsdocker
|
|
18
|
-
${getGlobalPreparationString(optionsArg)}
|
|
19
|
-
${getMountSolutionString(optionsArg)}
|
|
20
|
-
WORKDIR /workspace
|
|
21
|
-
ENV CI=true
|
|
22
|
-
ENTRYPOINT ["tsdocker"]
|
|
23
|
-
CMD ["runinside"]
|
|
24
|
-
`);
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkb2NrZXIuc25pcHBldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90c2RvY2tlci5zbmlwcGV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHVCQUF1QixDQUFDO0FBT2pELElBQUksc0JBQXNCLEdBQUcsQ0FBQyxVQUE4QixFQUFFLEVBQUU7SUFDOUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ25CLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLHlDQUF5QyxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixJQUFJLDBCQUEwQixHQUFHLENBQUMsVUFBOEIsRUFBRSxFQUFFO0lBQ2xFLG9FQUFvRTtJQUNwRSxPQUFPLHVDQUF1QyxDQUFDO0FBQ2pELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsVUFBOEIsRUFBVSxFQUFFO0lBQ3hFLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUN6QztPQUNHLFVBQVUsQ0FBQyxTQUFTOztFQUV6QiwwQkFBMEIsQ0FBQyxVQUFVLENBQUM7RUFDdEMsc0JBQXNCLENBQUMsVUFBVSxDQUFDOzs7OztDQUtuQyxDQUNFLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
package/ts/tsdocker.docker.ts
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
-
import * as paths from './tsdocker.paths.js';
|
|
3
|
-
import * as snippets from './tsdocker.snippets.js';
|
|
4
|
-
|
|
5
|
-
import { logger, ora } from './tsdocker.logging.js';
|
|
6
|
-
|
|
7
|
-
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
8
|
-
executor: 'bash'
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
// interfaces
|
|
12
|
-
import type { IConfig } from './tsdocker.config.js';
|
|
13
|
-
|
|
14
|
-
let config: IConfig;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* the docker data used to build the internal testing container
|
|
18
|
-
*/
|
|
19
|
-
const dockerData = {
|
|
20
|
-
imageTag: 'npmdocker-temp-image:latest',
|
|
21
|
-
containerName: 'npmdocker-temp-container',
|
|
22
|
-
dockerProjectMountString: '',
|
|
23
|
-
dockerSockString: '',
|
|
24
|
-
dockerEnvString: ''
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* check if docker is available
|
|
29
|
-
*/
|
|
30
|
-
const checkDocker = () => {
|
|
31
|
-
const done = plugins.smartpromise.defer();
|
|
32
|
-
ora.text('checking docker...');
|
|
33
|
-
|
|
34
|
-
if (smartshellInstance.exec('which docker')) {
|
|
35
|
-
logger.log('ok', 'Docker found!');
|
|
36
|
-
done.resolve();
|
|
37
|
-
} else {
|
|
38
|
-
done.reject(new Error('docker not found on this machine'));
|
|
39
|
-
}
|
|
40
|
-
return done.promise;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* builds the Dockerfile according to the config in the project
|
|
45
|
-
*/
|
|
46
|
-
const buildDockerFile = async () => {
|
|
47
|
-
const done = plugins.smartpromise.defer();
|
|
48
|
-
ora.text('building Dockerfile...');
|
|
49
|
-
const dockerfile: string = snippets.dockerfileSnippet({
|
|
50
|
-
baseImage: config.baseImage,
|
|
51
|
-
command: config.command
|
|
52
|
-
});
|
|
53
|
-
logger.log('info', `Base image is: ${config.baseImage}`);
|
|
54
|
-
logger.log('info', `Command is: ${config.command}`);
|
|
55
|
-
await plugins.smartfs.file(plugins.path.join(paths.cwd, 'npmdocker')).write(dockerfile);
|
|
56
|
-
logger.log('ok', 'Dockerfile created!');
|
|
57
|
-
ora.stop();
|
|
58
|
-
done.resolve();
|
|
59
|
-
return done.promise;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* builds the Dockerimage from the built Dockerfile
|
|
64
|
-
*/
|
|
65
|
-
const buildDockerImage = async () => {
|
|
66
|
-
logger.log('info', 'pulling latest base image from registry...');
|
|
67
|
-
await smartshellInstance.exec(`docker pull ${config.baseImage}`);
|
|
68
|
-
ora.text('building Dockerimage...');
|
|
69
|
-
const execResult = await smartshellInstance.execSilent(
|
|
70
|
-
`docker build --load -f npmdocker -t ${dockerData.imageTag} ${paths.cwd}`
|
|
71
|
-
);
|
|
72
|
-
if (execResult.exitCode !== 0) {
|
|
73
|
-
console.log(execResult.stdout);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
76
|
-
logger.log('ok', 'Dockerimage built!');
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
const buildDockerProjectMountString = async () => {
|
|
80
|
-
if (process.env.CI !== 'true') {
|
|
81
|
-
dockerData.dockerProjectMountString = `-v ${paths.cwd}:/workspace`;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* builds an environment string that docker cli understands
|
|
87
|
-
*/
|
|
88
|
-
const buildDockerEnvString = async () => {
|
|
89
|
-
for (const key of Object.keys(config.keyValueObject)) {
|
|
90
|
-
const envString = (dockerData.dockerEnvString =
|
|
91
|
-
dockerData.dockerEnvString + `-e ${key}=${config.keyValueObject[key]} `);
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* creates string to mount the docker.sock inside the testcontainer
|
|
97
|
-
*/
|
|
98
|
-
const buildDockerSockString = async () => {
|
|
99
|
-
if (config.dockerSock) {
|
|
100
|
-
dockerData.dockerSockString = `-v /var/run/docker.sock:/var/run/docker.sock`;
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* creates a container by running the built Dockerimage
|
|
106
|
-
*/
|
|
107
|
-
const runDockerImage = async () => {
|
|
108
|
-
const done = plugins.smartpromise.defer();
|
|
109
|
-
ora.text('starting Container...');
|
|
110
|
-
ora.stop();
|
|
111
|
-
logger.log('info', 'now running Dockerimage');
|
|
112
|
-
config.exitCode = (await smartshellInstance.exec(
|
|
113
|
-
`docker run ${dockerData.dockerProjectMountString} ${dockerData.dockerSockString} ${
|
|
114
|
-
dockerData.dockerEnvString
|
|
115
|
-
} --name ${dockerData.containerName} ${dockerData.imageTag}`
|
|
116
|
-
)).exitCode;
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* cleans up: deletes the test container
|
|
121
|
-
*/
|
|
122
|
-
const deleteDockerContainer = async () => {
|
|
123
|
-
await smartshellInstance.execSilent(`docker rm -f ${dockerData.containerName}`);
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* cleans up deletes the test image
|
|
128
|
-
*/
|
|
129
|
-
const deleteDockerImage = async () => {
|
|
130
|
-
await smartshellInstance.execSilent(`docker rmi ${dockerData.imageTag}`).then(async response => {
|
|
131
|
-
if (response.exitCode !== 0) {
|
|
132
|
-
console.log(response.stdout);
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
const preClean = async () => {
|
|
138
|
-
await deleteDockerImage()
|
|
139
|
-
.then(deleteDockerContainer)
|
|
140
|
-
.then(async () => {
|
|
141
|
-
logger.log('ok', 'ensured clean Docker environment!');
|
|
142
|
-
});
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
const postClean = async () => {
|
|
146
|
-
await deleteDockerContainer()
|
|
147
|
-
.then(deleteDockerImage)
|
|
148
|
-
.then(async () => {
|
|
149
|
-
logger.log('ok', 'cleaned up!');
|
|
150
|
-
});
|
|
151
|
-
await plugins.smartfs.file(paths.npmdockerFile).delete();
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
export let run = async (configArg: IConfig): Promise<IConfig> => {
|
|
155
|
-
config = configArg;
|
|
156
|
-
const resultConfig = await checkDocker()
|
|
157
|
-
.then(preClean)
|
|
158
|
-
.then(buildDockerFile)
|
|
159
|
-
.then(buildDockerImage)
|
|
160
|
-
.then(buildDockerProjectMountString)
|
|
161
|
-
.then(buildDockerEnvString)
|
|
162
|
-
.then(buildDockerSockString)
|
|
163
|
-
.then(runDockerImage)
|
|
164
|
-
.then(postClean)
|
|
165
|
-
.catch(err => {
|
|
166
|
-
console.log(err);
|
|
167
|
-
});
|
|
168
|
-
return config;
|
|
169
|
-
};
|
package/ts/tsdocker.snippets.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
-
|
|
3
|
-
export interface IDockerfileSnippet {
|
|
4
|
-
baseImage: string;
|
|
5
|
-
command: string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
let getMountSolutionString = (optionsArg: IDockerfileSnippet) => {
|
|
9
|
-
if (process.env.CI) {
|
|
10
|
-
return 'COPY ./ /workspace';
|
|
11
|
-
} else {
|
|
12
|
-
return '# not copying workspcae since not in CI';
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
let getGlobalPreparationString = (optionsArg: IDockerfileSnippet) => {
|
|
17
|
-
// Always install tsdocker to ensure the latest version is available
|
|
18
|
-
return 'RUN npm install -g @git.zone/tsdocker';
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export let dockerfileSnippet = (optionsArg: IDockerfileSnippet): string => {
|
|
22
|
-
return plugins.smartstring.indent.normalize(
|
|
23
|
-
`
|
|
24
|
-
FROM ${optionsArg.baseImage}
|
|
25
|
-
# For info about what tsdocker does read the docs at https://gitzone.github.io/tsdocker
|
|
26
|
-
${getGlobalPreparationString(optionsArg)}
|
|
27
|
-
${getMountSolutionString(optionsArg)}
|
|
28
|
-
WORKDIR /workspace
|
|
29
|
-
ENV CI=true
|
|
30
|
-
ENTRYPOINT ["tsdocker"]
|
|
31
|
-
CMD ["runinside"]
|
|
32
|
-
`
|
|
33
|
-
);
|
|
34
|
-
};
|