@git.zone/tsdocker 1.2.43 → 1.3.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/cli.js +1 -1
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +4 -0
- package/dist_ts/tsdocker.cli.d.ts +1 -0
- package/dist_ts/tsdocker.cli.js +72 -0
- package/dist_ts/tsdocker.config.d.ts +10 -0
- package/dist_ts/tsdocker.config.js +29 -0
- package/dist_ts/tsdocker.docker.d.ts +2 -0
- package/dist_ts/tsdocker.docker.js +145 -0
- package/dist_ts/tsdocker.logging.d.ts +3 -0
- package/dist_ts/tsdocker.logging.js +15 -0
- package/dist_ts/tsdocker.paths.d.ts +4 -0
- package/dist_ts/tsdocker.paths.js +13 -0
- package/dist_ts/tsdocker.plugins.d.ts +15 -0
- package/dist_ts/tsdocker.plugins.js +18 -0
- package/dist_ts/tsdocker.snippets.d.ts +5 -0
- package/dist_ts/tsdocker.snippets.js +26 -0
- package/npmextra.json +12 -6
- package/package.json +26 -21
- package/readme.md +32 -25
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +2 -2
- package/ts/tsdocker.cli.ts +6 -6
- package/ts/tsdocker.config.ts +3 -3
- package/ts/tsdocker.docker.ts +6 -6
- package/ts/tsdocker.logging.ts +1 -1
- package/ts/tsdocker.paths.ts +6 -1
- package/ts/tsdocker.snippets.ts +5 -8
package/cli.js
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autocreated commitinfo by @push.rocks/commitinfo
|
|
3
|
+
*/
|
|
4
|
+
export const commitinfo = {
|
|
5
|
+
name: '@git.zone/tsdocker',
|
|
6
|
+
version: '1.3.0',
|
|
7
|
+
description: 'develop npm modules cross platform with docker'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxvQkFBb0I7SUFDMUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGdEQUFnRDtDQUM5RCxDQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist_ts/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
+
import * as cli from './tsdocker.cli.js';
|
|
3
|
+
cli.run();
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sS0FBSyxHQUFHLE1BQU0sbUJBQW1CLENBQUM7QUFFekMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare let run: () => void;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
+
import * as paths from './tsdocker.paths.js';
|
|
3
|
+
// modules
|
|
4
|
+
import * as ConfigModule from './tsdocker.config.js';
|
|
5
|
+
import * as DockerModule from './tsdocker.docker.js';
|
|
6
|
+
import { logger, ora } from './tsdocker.logging.js';
|
|
7
|
+
const tsdockerCli = new plugins.smartcli.Smartcli();
|
|
8
|
+
export let run = () => {
|
|
9
|
+
tsdockerCli.standardCommand().subscribe(async (argvArg) => {
|
|
10
|
+
const configArg = await ConfigModule.run().then(DockerModule.run);
|
|
11
|
+
if (configArg.exitCode === 0) {
|
|
12
|
+
logger.log('success', 'container ended all right!');
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
logger.log('error', `container ended with error! Exit Code is ${configArg.exitCode}`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* this command is executed inside docker and meant for use from outside docker
|
|
21
|
+
*/
|
|
22
|
+
tsdockerCli.addCommand('runinside').subscribe(async (argvArg) => {
|
|
23
|
+
logger.log('ok', 'Allright. We are now in Docker!');
|
|
24
|
+
ora.text('now trying to run your specified command');
|
|
25
|
+
const configArg = await ConfigModule.run();
|
|
26
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
27
|
+
executor: 'bash'
|
|
28
|
+
});
|
|
29
|
+
ora.stop();
|
|
30
|
+
await smartshellInstance.exec(configArg.command).then(response => {
|
|
31
|
+
if (response.exitCode !== 0) {
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
tsdockerCli.addCommand('clean').subscribe(async (argvArg) => {
|
|
37
|
+
ora.text('cleaning up docker env...');
|
|
38
|
+
if (argvArg.all) {
|
|
39
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
40
|
+
executor: 'bash'
|
|
41
|
+
});
|
|
42
|
+
ora.text('killing any running docker containers...');
|
|
43
|
+
await smartshellInstance.exec(`docker kill $(docker ps -q)`);
|
|
44
|
+
ora.text('removing stopped containers...');
|
|
45
|
+
await smartshellInstance.exec(`docker rm $(docker ps -a -q)`);
|
|
46
|
+
ora.text('removing images...');
|
|
47
|
+
await smartshellInstance.exec(`docker rmi -f $(docker images -q -f dangling=true)`);
|
|
48
|
+
ora.text('removing all other images...');
|
|
49
|
+
await smartshellInstance.exec(`docker rmi $(docker images -a -q)`);
|
|
50
|
+
ora.text('removing all volumes...');
|
|
51
|
+
await smartshellInstance.exec(`docker volume rm $(docker volume ls -f dangling=true -q)`);
|
|
52
|
+
}
|
|
53
|
+
ora.finishSuccess('docker environment now is clean!');
|
|
54
|
+
});
|
|
55
|
+
tsdockerCli.addCommand('speedtest').subscribe(async (argvArg) => {
|
|
56
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
57
|
+
executor: 'bash'
|
|
58
|
+
});
|
|
59
|
+
logger.log('ok', 'Starting speedtest');
|
|
60
|
+
await smartshellInstance.exec(`docker pull tianon/speedtest && docker run --rm tianon/speedtest --accept-license --accept-gdpr`);
|
|
61
|
+
});
|
|
62
|
+
tsdockerCli.addCommand('vscode').subscribe(async (argvArg) => {
|
|
63
|
+
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
64
|
+
executor: 'bash'
|
|
65
|
+
});
|
|
66
|
+
logger.log('ok', `Starting vscode in cwd ${paths.cwd}`);
|
|
67
|
+
await smartshellInstance.execAndWaitForLine(`docker run -p 127.0.0.1:8443:8443 -v "${paths.cwd}:/home/coder/project" registry.gitlab.com/hosttoday/ht-docker-vscode --allow-http --no-auth`, /Connected to shared process/);
|
|
68
|
+
await plugins.smartopen.openUrl('testing-vscode.git.zone:8443');
|
|
69
|
+
});
|
|
70
|
+
tsdockerCli.startParse();
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkb2NrZXIuY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHNkb2NrZXIuY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxVQUFVO0FBQ1YsT0FBTyxLQUFLLFlBQVksTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssWUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBRXBELE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUU7SUFDcEIsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7UUFDdEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLDRDQUE0QyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN0RixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVIOztPQUVHO0lBQ0gsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFT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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
+
import * as paths from './tsdocker.paths.js';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
const getQenvKeyValueObject = async () => {
|
|
5
|
+
let qenvKeyValueObjectArray;
|
|
6
|
+
if (fs.existsSync(plugins.path.join(paths.cwd, 'qenv.yml'))) {
|
|
7
|
+
qenvKeyValueObjectArray = new plugins.qenv.Qenv(paths.cwd, '.nogit/').keyValueObject;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
qenvKeyValueObjectArray = {};
|
|
11
|
+
}
|
|
12
|
+
return qenvKeyValueObjectArray;
|
|
13
|
+
};
|
|
14
|
+
const buildConfig = async (qenvKeyValueObjectArg) => {
|
|
15
|
+
const npmextra = new plugins.npmextra.Npmextra(paths.cwd);
|
|
16
|
+
const config = npmextra.dataFor('@git.zone/tsdocker', {
|
|
17
|
+
baseImage: 'hosttoday/ht-docker-node:npmdocker',
|
|
18
|
+
init: 'rm -rf node_nodules/ && yarn install',
|
|
19
|
+
command: 'npmci npm test',
|
|
20
|
+
dockerSock: false,
|
|
21
|
+
keyValueObject: qenvKeyValueObjectArg
|
|
22
|
+
});
|
|
23
|
+
return config;
|
|
24
|
+
};
|
|
25
|
+
export let run = async () => {
|
|
26
|
+
const config = await getQenvKeyValueObject().then(buildConfig);
|
|
27
|
+
return config;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkb2NrZXIuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHNkb2NrZXIuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQVV6QixNQUFNLHFCQUFxQixHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ3ZDLElBQUksdUJBQTJELENBQUM7SUFDaEUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVELHVCQUF1QixHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDdkYsQ0FBQztTQUFNLENBQUM7UUFDTix1QkFBdUIsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sdUJBQXVCLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLHFCQUF5RCxFQUFFLEVBQUU7SUFDdEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBVSxvQkFBb0IsRUFBRTtRQUM3RCxTQUFTLEVBQUUsb0NBQW9DO1FBQy9DLElBQUksRUFBRSxzQ0FBc0M7UUFDNUMsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixVQUFVLEVBQUUsS0FBSztRQUNqQixjQUFjLEVBQUUscUJBQXFCO0tBQ3RDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLLElBQXNCLEVBQUU7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,145 @@
|
|
|
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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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
+
export const logger = new plugins.smartlog.Smartlog({
|
|
3
|
+
logContext: {
|
|
4
|
+
company: 'Some Company',
|
|
5
|
+
companyunit: 'Some CompanyUnit',
|
|
6
|
+
containerName: 'Some Containername',
|
|
7
|
+
environment: 'local',
|
|
8
|
+
runtime: 'node',
|
|
9
|
+
zone: 'gitzone'
|
|
10
|
+
},
|
|
11
|
+
minimumLogLevel: 'silly'
|
|
12
|
+
});
|
|
13
|
+
logger.addLogDestination(new plugins.smartlogDestinationLocal.DestinationLocal());
|
|
14
|
+
export const ora = new plugins.smartlogSouceOra.SmartlogSourceOra();
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkb2NrZXIubG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RzZG9ja2VyLmxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNsRCxVQUFVLEVBQUU7UUFDVixPQUFPLEVBQUUsY0FBYztRQUN2QixXQUFXLEVBQUUsa0JBQWtCO1FBQy9CLGFBQWEsRUFBRSxvQkFBb0I7UUFDbkMsV0FBVyxFQUFFLE9BQU87UUFDcEIsT0FBTyxFQUFFLE1BQU07UUFDZixJQUFJLEVBQUUsU0FBUztLQUNoQjtJQUNELGVBQWUsRUFBRSxPQUFPO0NBQ3pCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUMifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname } from 'path';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
// directories
|
|
8
|
+
export let cwd = process.cwd();
|
|
9
|
+
export let packageBase = plugins.path.join(__dirname, '../');
|
|
10
|
+
export let assets = plugins.path.join(packageBase, 'assets/');
|
|
11
|
+
fs.mkdirSync(assets, { recursive: true });
|
|
12
|
+
export let npmdockerFile = plugins.path.join(cwd, 'npmdocker');
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkb2NrZXIucGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90c2RvY2tlci5wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFdEMsY0FBYztBQUNkLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0IsTUFBTSxDQUFDLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RCxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlELEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUMsTUFBTSxDQUFDLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as npmextra from '@push.rocks/npmextra';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as projectinfo from '@push.rocks/projectinfo';
|
|
4
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
5
|
+
import * as qenv from '@push.rocks/qenv';
|
|
6
|
+
import * as smartcli from '@push.rocks/smartcli';
|
|
7
|
+
import { SmartFs } from '@push.rocks/smartfs';
|
|
8
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
9
|
+
import * as smartlogDestinationLocal from '@push.rocks/smartlog-destination-local';
|
|
10
|
+
import * as smartlogSouceOra from '@push.rocks/smartlog-source-ora';
|
|
11
|
+
import * as smartopen from '@push.rocks/smartopen';
|
|
12
|
+
import * as smartshell from '@push.rocks/smartshell';
|
|
13
|
+
import * as smartstring from '@push.rocks/smartstring';
|
|
14
|
+
export declare const smartfs: SmartFs;
|
|
15
|
+
export { npmextra, path, projectinfo, smartpromise, qenv, smartcli, smartlog, smartlogDestinationLocal, smartlogSouceOra, smartopen, smartshell, smartstring };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// push.rocks scope
|
|
2
|
+
import * as npmextra from '@push.rocks/npmextra';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as projectinfo from '@push.rocks/projectinfo';
|
|
5
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
6
|
+
import * as qenv from '@push.rocks/qenv';
|
|
7
|
+
import * as smartcli from '@push.rocks/smartcli';
|
|
8
|
+
import { SmartFs, SmartFsProviderNode } from '@push.rocks/smartfs';
|
|
9
|
+
import * as smartlog from '@push.rocks/smartlog';
|
|
10
|
+
import * as smartlogDestinationLocal from '@push.rocks/smartlog-destination-local';
|
|
11
|
+
import * as smartlogSouceOra from '@push.rocks/smartlog-source-ora';
|
|
12
|
+
import * as smartopen from '@push.rocks/smartopen';
|
|
13
|
+
import * as smartshell from '@push.rocks/smartshell';
|
|
14
|
+
import * as smartstring from '@push.rocks/smartstring';
|
|
15
|
+
// Create smartfs instance
|
|
16
|
+
export const smartfs = new SmartFs(new SmartFsProviderNode());
|
|
17
|
+
export { npmextra, path, projectinfo, smartpromise, qenv, smartcli, smartlog, smartlogDestinationLocal, smartlogSouceOra, smartopen, smartshell, smartstring };
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNkb2NrZXIucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RzZG9ja2VyLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxJQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkUsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssd0JBQXdCLE1BQU0sd0NBQXdDLENBQUM7QUFDbkYsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELDBCQUEwQjtBQUMxQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7QUFFOUQsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osV0FBVyxFQUNYLFlBQVksRUFDWixJQUFJLEVBQ0osUUFBUSxFQUNSLFFBQVEsRUFDUix3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNaLENBQUMifQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
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/npmextra.json
CHANGED
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
"mode": "default",
|
|
4
4
|
"cli": true
|
|
5
5
|
},
|
|
6
|
-
"
|
|
7
|
-
"npmGlobalTools": [],
|
|
8
|
-
"npmAccessLevel": "public"
|
|
9
|
-
},
|
|
10
|
-
"gitzone": {
|
|
6
|
+
"@git.zone/cli": {
|
|
11
7
|
"projectType": "npm",
|
|
12
8
|
"module": {
|
|
13
9
|
"githost": "gitlab.com",
|
|
@@ -16,6 +12,16 @@
|
|
|
16
12
|
"description": "develop npm modules cross platform with docker",
|
|
17
13
|
"npmPackagename": "@git.zone/tsdocker",
|
|
18
14
|
"license": "MIT"
|
|
15
|
+
},
|
|
16
|
+
"release": {
|
|
17
|
+
"accessLevel": "public",
|
|
18
|
+
"registries": [
|
|
19
|
+
"https://verdaccio.lossless.digital",
|
|
20
|
+
"https://registry.npmjs.org"
|
|
21
|
+
]
|
|
19
22
|
}
|
|
23
|
+
},
|
|
24
|
+
"@ship.zone/szci": {
|
|
25
|
+
"npmGlobalTools": []
|
|
20
26
|
}
|
|
21
|
-
}
|
|
27
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tsdocker",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "develop npm modules cross platform with docker",
|
|
6
|
-
"main": "
|
|
7
|
-
"typings": "
|
|
6
|
+
"main": "dist_ts/index.js",
|
|
7
|
+
"typings": "dist_ts/index.d.ts",
|
|
8
8
|
"bin": {
|
|
9
9
|
"tsdocker": "cli.js"
|
|
10
10
|
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"test": "(npm run build)",
|
|
13
|
+
"build": "(tsbuild)",
|
|
14
|
+
"testIntegration": "(npm run clean && npm run setupCheck && npm run testStandard)",
|
|
15
|
+
"testStandard": "(cd test/ && tsx ../ts/index.ts)",
|
|
16
|
+
"testSpeed": "(cd test/ && tsx ../ts/index.ts speedtest)",
|
|
17
|
+
"testClean": "(cd test/ && tsx ../ts/index.ts clean --all)",
|
|
18
|
+
"testVscode": "(cd test/ && tsx ../ts/index.ts vscode)",
|
|
19
|
+
"clean": "(rm -rf test/)",
|
|
20
|
+
"compile": "(npmts --notest)",
|
|
21
|
+
"setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
|
|
22
|
+
"buildDocs": "tsdoc"
|
|
23
|
+
},
|
|
11
24
|
"repository": {
|
|
12
25
|
"type": "git",
|
|
13
26
|
"url": "https://gitlab.com/gitzone/tsdocker.git"
|
|
@@ -22,18 +35,18 @@
|
|
|
22
35
|
},
|
|
23
36
|
"homepage": "https://gitlab.com/gitzone/tsdocker#readme",
|
|
24
37
|
"devDependencies": {
|
|
25
|
-
"@git.zone/tsbuild": "^
|
|
26
|
-
"@git.zone/tsrun": "^2.0.
|
|
27
|
-
"@git.zone/tstest": "^3.1.
|
|
28
|
-
"@types/node": "^
|
|
38
|
+
"@git.zone/tsbuild": "^4.1.2",
|
|
39
|
+
"@git.zone/tsrun": "^2.0.1",
|
|
40
|
+
"@git.zone/tstest": "^3.1.6",
|
|
41
|
+
"@types/node": "^25.0.9"
|
|
29
42
|
},
|
|
30
43
|
"dependencies": {
|
|
31
44
|
"@push.rocks/npmextra": "^5.3.3",
|
|
32
45
|
"@push.rocks/projectinfo": "^5.0.2",
|
|
33
46
|
"@push.rocks/qenv": "^6.1.3",
|
|
34
47
|
"@push.rocks/smartanalytics": "^2.0.15",
|
|
35
|
-
"@push.rocks/smartcli": "^4.0.
|
|
36
|
-
"@push.rocks/smartfs": "^1.1
|
|
48
|
+
"@push.rocks/smartcli": "^4.0.20",
|
|
49
|
+
"@push.rocks/smartfs": "^1.3.1",
|
|
37
50
|
"@push.rocks/smartlog": "^3.1.10",
|
|
38
51
|
"@push.rocks/smartlog-destination-local": "^9.0.2",
|
|
39
52
|
"@push.rocks/smartlog-source-ora": "^1.0.9",
|
|
@@ -42,6 +55,7 @@
|
|
|
42
55
|
"@push.rocks/smartshell": "^3.3.0",
|
|
43
56
|
"@push.rocks/smartstring": "^4.1.0"
|
|
44
57
|
},
|
|
58
|
+
"packageManager": "pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34",
|
|
45
59
|
"type": "module",
|
|
46
60
|
"files": [
|
|
47
61
|
"ts/**/*",
|
|
@@ -55,16 +69,7 @@
|
|
|
55
69
|
"npmextra.json",
|
|
56
70
|
"readme.md"
|
|
57
71
|
],
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"build": "(tsbuild)",
|
|
61
|
-
"testStandard": "(cd test/ && node ../cli.ts.js)",
|
|
62
|
-
"testSpeed": "(cd test/ && node ../cli.ts.js speedtest)",
|
|
63
|
-
"testClean": "(cd test/ && node ../cli.ts.js clean --all)",
|
|
64
|
-
"testVscode": "(cd test/ && node ../cli.ts.js vscode)",
|
|
65
|
-
"clean": "(rm -rf test/)",
|
|
66
|
-
"compile": "(npmts --notest)",
|
|
67
|
-
"setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
|
|
68
|
-
"buildDocs": "tsdoc"
|
|
72
|
+
"pnpm": {
|
|
73
|
+
"overrides": {}
|
|
69
74
|
}
|
|
70
|
-
}
|
|
75
|
+
}
|
package/readme.md
CHANGED
|
@@ -35,13 +35,13 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
|
|
|
35
35
|
|
|
36
36
|
- Full TypeScript support with excellent IntelliSense
|
|
37
37
|
- Type-safe configuration
|
|
38
|
-
- Modern async/await patterns throughout
|
|
38
|
+
- Modern ESM with async/await patterns throughout
|
|
39
39
|
|
|
40
40
|
## Installation
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
|
-
npm install
|
|
44
|
-
# or
|
|
43
|
+
npm install -g @git.zone/tsdocker
|
|
44
|
+
# or for project-local installation
|
|
45
45
|
pnpm install --save-dev @git.zone/tsdocker
|
|
46
46
|
```
|
|
47
47
|
|
|
@@ -53,9 +53,9 @@ Create an `npmextra.json` file in your project root:
|
|
|
53
53
|
|
|
54
54
|
```json
|
|
55
55
|
{
|
|
56
|
-
"
|
|
57
|
-
"baseImage": "
|
|
58
|
-
"command": "
|
|
56
|
+
"@git.zone/tsdocker": {
|
|
57
|
+
"baseImage": "node:20",
|
|
58
|
+
"command": "npm test",
|
|
59
59
|
"dockerSock": false
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -64,7 +64,7 @@ Create an `npmextra.json` file in your project root:
|
|
|
64
64
|
### 2. Run Your Tests
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
|
|
67
|
+
tsdocker
|
|
68
68
|
```
|
|
69
69
|
|
|
70
70
|
That's it! tsdocker will:
|
|
@@ -144,7 +144,7 @@ If you need to run Docker commands inside your test container (e.g., testing Doc
|
|
|
144
144
|
|
|
145
145
|
```json
|
|
146
146
|
{
|
|
147
|
-
"
|
|
147
|
+
"@git.zone/tsdocker": {
|
|
148
148
|
"baseImage": "docker:latest",
|
|
149
149
|
"command": "docker run hello-world",
|
|
150
150
|
"dockerSock": true
|
|
@@ -160,7 +160,7 @@ You can use any Docker image as your base:
|
|
|
160
160
|
|
|
161
161
|
```json
|
|
162
162
|
{
|
|
163
|
-
"
|
|
163
|
+
"@git.zone/tsdocker": {
|
|
164
164
|
"baseImage": "node:20-alpine",
|
|
165
165
|
"command": "npm test"
|
|
166
166
|
}
|
|
@@ -171,13 +171,13 @@ Popular choices:
|
|
|
171
171
|
|
|
172
172
|
- `node:20` — Official Node.js images
|
|
173
173
|
- `node:20-alpine` — Lightweight Alpine-based images
|
|
174
|
-
- `
|
|
174
|
+
- `node:lts` — Long-term support Node.js version
|
|
175
175
|
|
|
176
176
|
### CI Integration
|
|
177
177
|
|
|
178
178
|
tsdocker automatically detects CI environments (via `CI=true` env var) and adjusts behavior:
|
|
179
179
|
|
|
180
|
-
-
|
|
180
|
+
- Copies project files into container in CI (instead of mounting)
|
|
181
181
|
- Optimizes for CI execution patterns
|
|
182
182
|
|
|
183
183
|
## Why tsdocker?
|
|
@@ -207,7 +207,7 @@ tsdocker ensures every test run happens in a **clean, reproducible environment**
|
|
|
207
207
|
tsdocker is built with TypeScript and provides full type definitions:
|
|
208
208
|
|
|
209
209
|
```typescript
|
|
210
|
-
import { IConfig } from '@git.zone/tsdocker/
|
|
210
|
+
import type { IConfig } from '@git.zone/tsdocker/dist_ts/tsdocker.config.js';
|
|
211
211
|
|
|
212
212
|
const config: IConfig = {
|
|
213
213
|
baseImage: 'node:20',
|
|
@@ -222,7 +222,7 @@ const config: IConfig = {
|
|
|
222
222
|
## Requirements
|
|
223
223
|
|
|
224
224
|
- **Docker**: Docker must be installed and accessible via CLI
|
|
225
|
-
- **Node.js**: Version
|
|
225
|
+
- **Node.js**: Version 18 or higher (ESM support required)
|
|
226
226
|
|
|
227
227
|
## How It Works
|
|
228
228
|
|
|
@@ -271,20 +271,20 @@ sudo usermod -aG docker $USER
|
|
|
271
271
|
|
|
272
272
|
```json
|
|
273
273
|
{
|
|
274
|
-
"
|
|
274
|
+
"@git.zone/tsdocker": {
|
|
275
275
|
"baseImage": "node:20",
|
|
276
276
|
"command": "npm test"
|
|
277
277
|
}
|
|
278
278
|
}
|
|
279
279
|
```
|
|
280
280
|
|
|
281
|
-
###
|
|
281
|
+
### Running pnpm tests
|
|
282
282
|
|
|
283
283
|
```json
|
|
284
284
|
{
|
|
285
|
-
"
|
|
286
|
-
"baseImage": "
|
|
287
|
-
"command": "
|
|
285
|
+
"@git.zone/tsdocker": {
|
|
286
|
+
"baseImage": "node:20",
|
|
287
|
+
"command": "corepack enable && pnpm install && pnpm test"
|
|
288
288
|
}
|
|
289
289
|
}
|
|
290
290
|
```
|
|
@@ -293,7 +293,7 @@ sudo usermod -aG docker $USER
|
|
|
293
293
|
|
|
294
294
|
```json
|
|
295
295
|
{
|
|
296
|
-
"
|
|
296
|
+
"@git.zone/tsdocker": {
|
|
297
297
|
"baseImage": "docker:latest",
|
|
298
298
|
"command": "sh -c 'docker version && docker ps'",
|
|
299
299
|
"dockerSock": true
|
|
@@ -307,25 +307,32 @@ sudo usermod -aG docker $USER
|
|
|
307
307
|
🚀 **Layer caching**: Docker caches image layers — your base image only downloads once
|
|
308
308
|
🚀 **Prune regularly**: Run `docker system prune` periodically to reclaim disk space
|
|
309
309
|
|
|
310
|
-
## Migration from legacy npmdocker
|
|
310
|
+
## Migration from legacy npmdocker
|
|
311
311
|
|
|
312
|
-
This package was previously published under the `npmdocker` name
|
|
312
|
+
This package was previously published under the `npmdocker` name. It is now available as `@git.zone/tsdocker` with modernized ESM support and updated dependencies.
|
|
313
|
+
|
|
314
|
+
Key changes:
|
|
315
|
+
- Configuration key changed from `npmdocker` to `@git.zone/tsdocker` in `npmextra.json`
|
|
316
|
+
- CLI command is now `tsdocker` instead of `npmdocker`
|
|
317
|
+
- Full ESM support with `.js` extensions in imports
|
|
313
318
|
|
|
314
319
|
## License and Legal Information
|
|
315
320
|
|
|
316
|
-
This repository contains open-source code
|
|
321
|
+
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [LICENSE](./LICENSE) file.
|
|
317
322
|
|
|
318
323
|
**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
|
|
319
324
|
|
|
320
325
|
### Trademarks
|
|
321
326
|
|
|
322
|
-
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein.
|
|
327
|
+
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.
|
|
328
|
+
|
|
329
|
+
Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.
|
|
323
330
|
|
|
324
331
|
### Company Information
|
|
325
332
|
|
|
326
333
|
Task Venture Capital GmbH
|
|
327
|
-
Registered at District
|
|
334
|
+
Registered at District Court Bremen HRB 35230 HB, Germany
|
|
328
335
|
|
|
329
|
-
For any legal inquiries or
|
|
336
|
+
For any legal inquiries or further information, please contact us via email at hello@task.vc.
|
|
330
337
|
|
|
331
338
|
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/index.ts
CHANGED
package/ts/tsdocker.cli.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins';
|
|
2
|
-
import * as paths from './tsdocker.paths';
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
+
import * as paths from './tsdocker.paths.js';
|
|
3
3
|
|
|
4
4
|
// modules
|
|
5
|
-
import * as ConfigModule from './tsdocker.config';
|
|
6
|
-
import * as DockerModule from './tsdocker.docker';
|
|
5
|
+
import * as ConfigModule from './tsdocker.config.js';
|
|
6
|
+
import * as DockerModule from './tsdocker.docker.js';
|
|
7
7
|
|
|
8
|
-
import { logger, ora } from './tsdocker.logging';
|
|
8
|
+
import { logger, ora } from './tsdocker.logging.js';
|
|
9
9
|
|
|
10
10
|
const tsdockerCli = new plugins.smartcli.Smartcli();
|
|
11
11
|
|
|
12
12
|
export let run = () => {
|
|
13
|
-
tsdockerCli.
|
|
13
|
+
tsdockerCli.standardCommand().subscribe(async argvArg => {
|
|
14
14
|
const configArg = await ConfigModule.run().then(DockerModule.run);
|
|
15
15
|
if (configArg.exitCode === 0) {
|
|
16
16
|
logger.log('success', 'container ended all right!');
|
package/ts/tsdocker.config.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins';
|
|
2
|
-
import * as paths from './tsdocker.paths';
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
|
+
import * as paths from './tsdocker.paths.js';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
|
|
5
5
|
export interface IConfig {
|
|
@@ -22,7 +22,7 @@ const getQenvKeyValueObject = async () => {
|
|
|
22
22
|
|
|
23
23
|
const buildConfig = async (qenvKeyValueObjectArg: { [key: string]: string | number }) => {
|
|
24
24
|
const npmextra = new plugins.npmextra.Npmextra(paths.cwd);
|
|
25
|
-
const config = npmextra.dataFor<IConfig>('
|
|
25
|
+
const config = npmextra.dataFor<IConfig>('@git.zone/tsdocker', {
|
|
26
26
|
baseImage: 'hosttoday/ht-docker-node:npmdocker',
|
|
27
27
|
init: 'rm -rf node_nodules/ && yarn install',
|
|
28
28
|
command: 'npmci npm test',
|
package/ts/tsdocker.docker.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins';
|
|
2
|
-
import * as paths from './tsdocker.paths';
|
|
3
|
-
import * as snippets from './tsdocker.snippets';
|
|
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
4
|
|
|
5
|
-
import { logger, ora } from './tsdocker.logging';
|
|
5
|
+
import { logger, ora } from './tsdocker.logging.js';
|
|
6
6
|
|
|
7
7
|
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
8
8
|
executor: 'bash'
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
// interfaces
|
|
12
|
-
import { IConfig } from './tsdocker.config';
|
|
12
|
+
import type { IConfig } from './tsdocker.config.js';
|
|
13
13
|
|
|
14
14
|
let config: IConfig;
|
|
15
15
|
|
|
@@ -67,7 +67,7 @@ const buildDockerImage = async () => {
|
|
|
67
67
|
await smartshellInstance.exec(`docker pull ${config.baseImage}`);
|
|
68
68
|
ora.text('building Dockerimage...');
|
|
69
69
|
const execResult = await smartshellInstance.execSilent(
|
|
70
|
-
`docker build -f npmdocker -t ${dockerData.imageTag} ${paths.cwd}`
|
|
70
|
+
`docker build --load -f npmdocker -t ${dockerData.imageTag} ${paths.cwd}`
|
|
71
71
|
);
|
|
72
72
|
if (execResult.exitCode !== 0) {
|
|
73
73
|
console.log(execResult.stdout);
|
package/ts/tsdocker.logging.ts
CHANGED
package/ts/tsdocker.paths.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins';
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname } from 'path';
|
|
5
|
+
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
3
8
|
|
|
4
9
|
// directories
|
|
5
10
|
export let cwd = process.cwd();
|
package/ts/tsdocker.snippets.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as plugins from './tsdocker.plugins';
|
|
1
|
+
import * as plugins from './tsdocker.plugins.js';
|
|
2
2
|
|
|
3
3
|
export interface IDockerfileSnippet {
|
|
4
4
|
baseImage: string;
|
|
@@ -14,23 +14,20 @@ let getMountSolutionString = (optionsArg: IDockerfileSnippet) => {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
let getGlobalPreparationString = (optionsArg: IDockerfileSnippet) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} else {
|
|
20
|
-
return '# not installing npmdocker since it is included in the base image';
|
|
21
|
-
}
|
|
17
|
+
// Always install tsdocker to ensure the latest version is available
|
|
18
|
+
return 'RUN npm install -g @git.zone/tsdocker';
|
|
22
19
|
};
|
|
23
20
|
|
|
24
21
|
export let dockerfileSnippet = (optionsArg: IDockerfileSnippet): string => {
|
|
25
22
|
return plugins.smartstring.indent.normalize(
|
|
26
23
|
`
|
|
27
24
|
FROM ${optionsArg.baseImage}
|
|
28
|
-
# For info about what
|
|
25
|
+
# For info about what tsdocker does read the docs at https://gitzone.github.io/tsdocker
|
|
29
26
|
${getGlobalPreparationString(optionsArg)}
|
|
30
27
|
${getMountSolutionString(optionsArg)}
|
|
31
28
|
WORKDIR /workspace
|
|
32
29
|
ENV CI=true
|
|
33
|
-
ENTRYPOINT ["
|
|
30
|
+
ENTRYPOINT ["tsdocker"]
|
|
34
31
|
CMD ["runinside"]
|
|
35
32
|
`
|
|
36
33
|
);
|