@git.zone/cli 3.0.2 → 3.2.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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/helpers.tsdocker.d.ts +3 -0
- package/dist_ts/helpers.tsdocker.js +16 -0
- package/dist_ts/helpers.workflow.d.ts +12 -0
- package/dist_ts/helpers.workflow.js +65 -1
- package/dist_ts/mod_config/index.js +92 -7
- package/dist_ts/mod_release/index.d.ts +4 -0
- package/dist_ts/mod_release/index.js +58 -4
- package/package.json +1 -1
- package/readme.md +23 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/helpers.tsdocker.ts +30 -0
- package/ts/helpers.workflow.ts +88 -0
- package/ts/mod_config/index.ts +124 -7
- package/ts/mod_release/index.ts +81 -2
|
@@ -3,8 +3,9 @@ import * as paths from "../paths.js";
|
|
|
3
3
|
import { logger } from "../gitzone.logging.js";
|
|
4
4
|
import { getCliMode, printJson } from "../helpers.climode.js";
|
|
5
5
|
import { inferVersionTypeFromPending, movePendingToVersion, readPendingChangelog, } from "../helpers.changelog.js";
|
|
6
|
-
import { resolveReleaseWorkflow, } from "../helpers.workflow.js";
|
|
6
|
+
import { formatTsdockerMinimumVersion, getDeclaredTsdockerRange, getTsdockerMinimumVersion, resolveReleaseWorkflow, supportsTsdockerMinimumVersion, } from "../helpers.workflow.js";
|
|
7
7
|
import * as commitHelpers from "../mod_commit/mod.helpers.js";
|
|
8
|
+
import { hasInstalledProjectTsdockerBinary } from "../helpers.tsdocker.js";
|
|
8
9
|
export const run = async (argvArg) => {
|
|
9
10
|
const mode = await getCliMode(argvArg);
|
|
10
11
|
const subcommand = argvArg._?.[1];
|
|
@@ -188,6 +189,40 @@ async function runDockerTarget(smartshellInstance, workflow) {
|
|
|
188
189
|
if (!workflow.dockerEnabled) {
|
|
189
190
|
return [{ target: "docker", status: "skipped", message: "disabled" }];
|
|
190
191
|
}
|
|
192
|
+
let packageJson;
|
|
193
|
+
try {
|
|
194
|
+
packageJson = JSON.parse(await plugins.fs.readFile(plugins.path.join(paths.cwd, "package.json"), "utf8"));
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
packageJson = undefined;
|
|
198
|
+
}
|
|
199
|
+
if (!getDeclaredTsdockerRange(packageJson)) {
|
|
200
|
+
return [{
|
|
201
|
+
target: "tsdocker",
|
|
202
|
+
status: "failed",
|
|
203
|
+
message: "Docker releases require @git.zone/tsdocker as a project dependency",
|
|
204
|
+
}];
|
|
205
|
+
}
|
|
206
|
+
if (!(await hasInstalledProjectTsdockerBinary(paths.cwd))) {
|
|
207
|
+
return [{
|
|
208
|
+
target: "tsdocker",
|
|
209
|
+
status: "failed",
|
|
210
|
+
message: "Docker releases require the installed project-local tSDocker binary",
|
|
211
|
+
}];
|
|
212
|
+
}
|
|
213
|
+
const minimumTsdockerVersion = getTsdockerMinimumVersion(workflow.dockerBuildRegistries.length > 0, workflow.dockerTest);
|
|
214
|
+
if (minimumTsdockerVersion) {
|
|
215
|
+
const versionResult = await smartshellInstance.exec("pnpm exec tsdocker --version");
|
|
216
|
+
if (versionResult.exitCode !== 0
|
|
217
|
+
|| !supportsTsdockerMinimumVersion(versionResult.combinedOutput, minimumTsdockerVersion)) {
|
|
218
|
+
const minimumVersion = formatTsdockerMinimumVersion(minimumTsdockerVersion);
|
|
219
|
+
return [{
|
|
220
|
+
target: "tsdocker",
|
|
221
|
+
status: "failed",
|
|
222
|
+
message: `Docker release options require project-local @git.zone/tsdocker >= ${minimumVersion}`,
|
|
223
|
+
}];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
191
226
|
const command = buildTsdockerPushCommand(workflow);
|
|
192
227
|
const result = await smartshellInstance.exec(command);
|
|
193
228
|
const output = result.combinedOutput;
|
|
@@ -199,8 +234,17 @@ async function runDockerTarget(smartshellInstance, workflow) {
|
|
|
199
234
|
message: result.exitCode === 0 ? undefined : firstMeaningfulLine(output),
|
|
200
235
|
}];
|
|
201
236
|
}
|
|
202
|
-
function buildTsdockerPushCommand(workflow) {
|
|
203
|
-
const commandParts = ["tsdocker", "push"];
|
|
237
|
+
export function buildTsdockerPushCommand(workflow) {
|
|
238
|
+
const commandParts = ["pnpm", "exec", "tsdocker", "push"];
|
|
239
|
+
if (workflow.dockerRegistry) {
|
|
240
|
+
commandParts.push(`--registry=${shellQuote(workflow.dockerRegistry)}`);
|
|
241
|
+
}
|
|
242
|
+
if (workflow.dockerBuildRegistries.length > 0) {
|
|
243
|
+
commandParts.push(`--build-registries=${shellQuote(workflow.dockerBuildRegistries.join(","))}`);
|
|
244
|
+
}
|
|
245
|
+
if (workflow.dockerTest) {
|
|
246
|
+
commandParts.push("--test");
|
|
247
|
+
}
|
|
204
248
|
if (workflow.dockerNoBuild) {
|
|
205
249
|
commandParts.push("--no-build");
|
|
206
250
|
}
|
|
@@ -245,6 +289,9 @@ function printReleasePlan(workflow) {
|
|
|
245
289
|
}
|
|
246
290
|
if (workflow.targets.includes("docker")) {
|
|
247
291
|
console.log(`docker engine: ${workflow.dockerEngine}`);
|
|
292
|
+
console.log(`docker registry: ${workflow.dockerRegistry || "all configured registries"}`);
|
|
293
|
+
console.log(`docker build authentication: ${workflow.dockerBuildRegistries.length > 0 ? workflow.dockerBuildRegistries.join(", ") : "all configured registries"}`);
|
|
294
|
+
console.log(`docker image tests: ${workflow.dockerTest ? "required before destination publication" : "not requested"}`);
|
|
248
295
|
console.log(`docker patterns: ${workflow.dockerPatterns.length > 0 ? workflow.dockerPatterns.join(", ") : "all Dockerfiles"}`);
|
|
249
296
|
console.log(`docker options: ${formatDockerOptions(workflow)}`);
|
|
250
297
|
}
|
|
@@ -252,6 +299,13 @@ function printReleasePlan(workflow) {
|
|
|
252
299
|
}
|
|
253
300
|
function formatDockerOptions(workflow) {
|
|
254
301
|
const options = [];
|
|
302
|
+
if (workflow.dockerRegistry)
|
|
303
|
+
options.push(`registry=${workflow.dockerRegistry}`);
|
|
304
|
+
if (workflow.dockerBuildRegistries.length > 0) {
|
|
305
|
+
options.push(`buildRegistries=${workflow.dockerBuildRegistries.join(",")}`);
|
|
306
|
+
}
|
|
307
|
+
if (workflow.dockerTest)
|
|
308
|
+
options.push("test");
|
|
255
309
|
if (workflow.dockerCached)
|
|
256
310
|
options.push("cached");
|
|
257
311
|
if (workflow.dockerParallel)
|
|
@@ -323,4 +377,4 @@ export function showHelp(mode) {
|
|
|
323
377
|
console.log(" --plan Show resolved workflow without mutating files");
|
|
324
378
|
console.log("");
|
|
325
379
|
}
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcmVsZWFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxzQkFBc0IsR0FFdkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEtBQUssYUFBYSxNQUFNLDhCQUE4QixDQUFDO0FBVTlELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLFNBQVMsQ0FBQztZQUNSLEVBQUUsRUFBRSxLQUFLO1lBQ1QsS0FBSyxFQUFFLDBIQUEwSDtTQUNsSSxDQUFDLENBQUM7UUFDSCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkQs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
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcmVsZWFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsOEJBQThCLEdBRS9CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxLQUFLLGFBQWEsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVUzRSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQVksRUFBRSxFQUFFO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxTQUFTLENBQUM7WUFDUixFQUFFLEVBQUUsS0FBSztZQUNULEtBQUssRUFBRSwwSEFB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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/cli",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "3.0
|
|
4
|
+
"version": "3.2.0",
|
|
5
5
|
"description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
7
7
|
"typings": "dist_ts/index.d.ts",
|
package/readme.md
CHANGED
|
@@ -243,6 +243,9 @@ CLI workflow config lives under `@git.zone/cli` in `.smartconfig.json`. Docker b
|
|
|
243
243
|
"docker": {
|
|
244
244
|
"enabled": true,
|
|
245
245
|
"engine": "tsdocker",
|
|
246
|
+
"registry": "registry.gitlab.com",
|
|
247
|
+
"buildRegistries": ["registry.gitlab.com"],
|
|
248
|
+
"test": true,
|
|
246
249
|
"patterns": [],
|
|
247
250
|
"cached": true,
|
|
248
251
|
"parallel": true
|
|
@@ -266,12 +269,31 @@ NPM registries belong only here:
|
|
|
266
269
|
@git.zone/cli.release.targets.npm.registries
|
|
267
270
|
```
|
|
268
271
|
|
|
269
|
-
Docker
|
|
272
|
+
Canonical Docker destinations and repository mappings belong here. Registry
|
|
273
|
+
values should be hosts without `http://` or `https://`:
|
|
270
274
|
|
|
271
275
|
```text
|
|
272
276
|
@git.zone/tsdocker.registries
|
|
273
277
|
```
|
|
274
278
|
|
|
279
|
+
The Docker release target runs the project's pinned `@git.zone/tsdocker` through
|
|
280
|
+
`pnpm exec`; install it in each Docker-producing project:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
pnpm add --save-dev @git.zone/tsdocker
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Set `release.targets.docker.registry` to select one destination already declared
|
|
287
|
+
by the tSDocker config when a release must not publish to every configured
|
|
288
|
+
registry.
|
|
289
|
+
Set `release.targets.docker.buildRegistries` when the build should authenticate
|
|
290
|
+
only the configured registries used by private base images; an empty list keeps
|
|
291
|
+
the compatibility default of authenticating every configured registry. Bounded
|
|
292
|
+
build authentication requires project-local `@git.zone/tsdocker` 3.3.0 or newer.
|
|
293
|
+
Set `release.targets.docker.test` to `true` to require every selected image test
|
|
294
|
+
to pass before destination publication. This requires project-local
|
|
295
|
+
`@git.zone/tsdocker` 3.4.0 or newer.
|
|
296
|
+
|
|
275
297
|
Useful config commands:
|
|
276
298
|
|
|
277
299
|
```bash
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '3.0
|
|
6
|
+
version: '3.2.0',
|
|
7
7
|
description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
|
|
8
8
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
|
|
3
|
+
export type TTsdockerBinaryAccess = (binaryPathArg: string) => Promise<void>;
|
|
4
|
+
|
|
5
|
+
export const getProjectTsdockerBinPath = (
|
|
6
|
+
projectRootArg: string,
|
|
7
|
+
platformArg: NodeJS.Platform = process.platform,
|
|
8
|
+
): string => {
|
|
9
|
+
return plugins.path.join(
|
|
10
|
+
projectRootArg,
|
|
11
|
+
'node_modules',
|
|
12
|
+
'.bin',
|
|
13
|
+
platformArg === 'win32' ? 'tsdocker.CMD' : 'tsdocker',
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const hasInstalledProjectTsdockerBinary = async (
|
|
18
|
+
projectRootArg: string,
|
|
19
|
+
platformArg: NodeJS.Platform = process.platform,
|
|
20
|
+
accessArg: TTsdockerBinaryAccess = async (binaryPathArg) => {
|
|
21
|
+
await plugins.fs.access(binaryPathArg);
|
|
22
|
+
},
|
|
23
|
+
): Promise<boolean> => {
|
|
24
|
+
try {
|
|
25
|
+
await accessArg(getProjectTsdockerBinPath(projectRootArg, platformArg));
|
|
26
|
+
return true;
|
|
27
|
+
} catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
};
|
package/ts/helpers.workflow.ts
CHANGED
|
@@ -53,6 +53,9 @@ export interface IReleaseNpmTargetConfig {
|
|
|
53
53
|
export interface IReleaseDockerTargetConfig {
|
|
54
54
|
enabled?: boolean;
|
|
55
55
|
engine?: "tsdocker";
|
|
56
|
+
registry?: string;
|
|
57
|
+
buildRegistries?: string[];
|
|
58
|
+
test?: boolean;
|
|
56
59
|
patterns?: string[];
|
|
57
60
|
cached?: boolean;
|
|
58
61
|
parallel?: boolean | number;
|
|
@@ -116,6 +119,9 @@ export interface IResolvedReleaseWorkflow {
|
|
|
116
119
|
npmAlreadyPublished: "success" | "error";
|
|
117
120
|
dockerEnabled: boolean;
|
|
118
121
|
dockerEngine: "tsdocker";
|
|
122
|
+
dockerRegistry?: string;
|
|
123
|
+
dockerBuildRegistries: string[];
|
|
124
|
+
dockerTest: boolean;
|
|
119
125
|
dockerPatterns: string[];
|
|
120
126
|
dockerCached: boolean;
|
|
121
127
|
dockerParallel: boolean | number;
|
|
@@ -145,6 +151,78 @@ const unique = <T>(items: T[]): T[] => {
|
|
|
145
151
|
return result;
|
|
146
152
|
};
|
|
147
153
|
|
|
154
|
+
export type TTsdockerMinimumVersion = readonly [number, number, number];
|
|
155
|
+
|
|
156
|
+
export const getTsdockerMinimumVersion = (
|
|
157
|
+
buildRegistriesRequestedArg: boolean,
|
|
158
|
+
imageTestsRequestedArg: boolean,
|
|
159
|
+
): TTsdockerMinimumVersion | undefined => {
|
|
160
|
+
if (imageTestsRequestedArg) {
|
|
161
|
+
return [3, 4, 0];
|
|
162
|
+
}
|
|
163
|
+
if (buildRegistriesRequestedArg) {
|
|
164
|
+
return [3, 3, 0];
|
|
165
|
+
}
|
|
166
|
+
return undefined;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export const formatTsdockerMinimumVersion = (
|
|
170
|
+
minimumVersionArg: TTsdockerMinimumVersion,
|
|
171
|
+
): string => minimumVersionArg.join(".");
|
|
172
|
+
|
|
173
|
+
export const supportsTsdockerMinimumVersion = (
|
|
174
|
+
versionOutputArg: string,
|
|
175
|
+
minimumVersionArg: TTsdockerMinimumVersion,
|
|
176
|
+
): boolean => {
|
|
177
|
+
const match = versionOutputArg.trim().match(
|
|
178
|
+
/(?:^|\s)(\d+)\.(\d+)\.(\d+)(?:\s|$)/,
|
|
179
|
+
);
|
|
180
|
+
if (!match) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
const actualVersion = [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
184
|
+
for (let index = 0; index < actualVersion.length; index += 1) {
|
|
185
|
+
if (actualVersion[index] > minimumVersionArg[index]) {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
if (actualVersion[index] < minimumVersionArg[index]) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return true;
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
export const resolveDockerTestSetting = (valueArg: unknown): boolean => {
|
|
196
|
+
if (valueArg === undefined) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (typeof valueArg !== "boolean") {
|
|
200
|
+
throw new Error("release.targets.docker.test must be true or false");
|
|
201
|
+
}
|
|
202
|
+
return valueArg;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
const isStringRecord = (valueArg: unknown): valueArg is Record<string, unknown> => {
|
|
206
|
+
return typeof valueArg === "object" && valueArg !== null && !Array.isArray(valueArg);
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
export const getDeclaredTsdockerRange = (packageJsonArg: unknown): string | undefined => {
|
|
210
|
+
if (!isStringRecord(packageJsonArg)) {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
for (const dependencyField of ["devDependencies", "dependencies"] as const) {
|
|
214
|
+
const dependencies = packageJsonArg[dependencyField];
|
|
215
|
+
if (!isStringRecord(dependencies)) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
const versionRange = dependencies["@git.zone/tsdocker"];
|
|
219
|
+
if (typeof versionRange === "string" && versionRange.trim()) {
|
|
220
|
+
return versionRange.trim();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return undefined;
|
|
224
|
+
};
|
|
225
|
+
|
|
148
226
|
const normalizeConfirmation = (
|
|
149
227
|
value: unknown,
|
|
150
228
|
fallback: TConfirmationMode,
|
|
@@ -395,6 +473,16 @@ export const resolveReleaseWorkflow = async (argvArg: any): Promise<IResolvedRel
|
|
|
395
473
|
npmAlreadyPublished: npmConfig.alreadyPublished || "success",
|
|
396
474
|
dockerEnabled,
|
|
397
475
|
dockerEngine: "tsdocker",
|
|
476
|
+
dockerRegistry: typeof dockerConfig.registry === "string" && dockerConfig.registry.trim()
|
|
477
|
+
? dockerConfig.registry.trim()
|
|
478
|
+
: undefined,
|
|
479
|
+
dockerBuildRegistries: Array.isArray(dockerConfig.buildRegistries)
|
|
480
|
+
? dockerConfig.buildRegistries
|
|
481
|
+
.filter((registryArg): registryArg is string => typeof registryArg === "string")
|
|
482
|
+
.map((registryArg) => registryArg.trim())
|
|
483
|
+
.filter(Boolean)
|
|
484
|
+
: [],
|
|
485
|
+
dockerTest: resolveDockerTestSetting(dockerConfig.test),
|
|
398
486
|
dockerPatterns: Array.isArray(dockerConfig.patterns) ? dockerConfig.patterns : [],
|
|
399
487
|
dockerCached: dockerConfig.cached ?? false,
|
|
400
488
|
dockerParallel: dockerConfig.parallel ?? false,
|
package/ts/mod_config/index.ts
CHANGED
|
@@ -19,6 +19,13 @@ import {
|
|
|
19
19
|
CURRENT_GITZONE_CLI_SCHEMA_VERSION,
|
|
20
20
|
migrateSmartconfigData,
|
|
21
21
|
} from "../helpers.smartconfigmigrations.js";
|
|
22
|
+
import {
|
|
23
|
+
formatTsdockerMinimumVersion,
|
|
24
|
+
getDeclaredTsdockerRange,
|
|
25
|
+
getTsdockerMinimumVersion,
|
|
26
|
+
supportsTsdockerMinimumVersion,
|
|
27
|
+
} from "../helpers.workflow.js";
|
|
28
|
+
import { hasInstalledProjectTsdockerBinary } from "../helpers.tsdocker.js";
|
|
22
29
|
|
|
23
30
|
export { ReleaseConfig, CommitConfig };
|
|
24
31
|
|
|
@@ -871,6 +878,20 @@ async function handleRelease(mode: ICliMode): Promise<void> {
|
|
|
871
878
|
}
|
|
872
879
|
|
|
873
880
|
if (enabledTargets.includes("docker")) {
|
|
881
|
+
const registry = await askValue<string>(interactInstance, {
|
|
882
|
+
type: "input",
|
|
883
|
+
name: "dockerRegistry",
|
|
884
|
+
message: "Single tsdocker registry target (empty means all configured registries):",
|
|
885
|
+
default: currentTargets.docker?.registry || "",
|
|
886
|
+
});
|
|
887
|
+
const buildRegistries = await askValue<string>(interactInstance, {
|
|
888
|
+
type: "input",
|
|
889
|
+
name: "dockerBuildRegistries",
|
|
890
|
+
message: "Registries to authenticate before Docker builds (comma-separated, empty means all):",
|
|
891
|
+
default: Array.isArray(currentTargets.docker?.buildRegistries)
|
|
892
|
+
? currentTargets.docker.buildRegistries.join(", ")
|
|
893
|
+
: "",
|
|
894
|
+
});
|
|
874
895
|
const patterns = await askValue<string>(interactInstance, {
|
|
875
896
|
type: "input",
|
|
876
897
|
name: "dockerPatterns",
|
|
@@ -879,6 +900,12 @@ async function handleRelease(mode: ICliMode): Promise<void> {
|
|
|
879
900
|
? currentTargets.docker.patterns.join(", ")
|
|
880
901
|
: "",
|
|
881
902
|
});
|
|
903
|
+
const test = await askValue<boolean>(interactInstance, {
|
|
904
|
+
type: "confirm",
|
|
905
|
+
name: "dockerTest",
|
|
906
|
+
message: "Run configured image tests before destination publication?",
|
|
907
|
+
default: currentTargets.docker?.test ?? false,
|
|
908
|
+
});
|
|
882
909
|
const cached = await askValue<boolean>(interactInstance, {
|
|
883
910
|
type: "confirm",
|
|
884
911
|
name: "dockerCached",
|
|
@@ -906,6 +933,9 @@ async function handleRelease(mode: ICliMode): Promise<void> {
|
|
|
906
933
|
releaseTargets.docker = {
|
|
907
934
|
enabled: true,
|
|
908
935
|
engine: "tsdocker",
|
|
936
|
+
registry: registry.trim() || undefined,
|
|
937
|
+
buildRegistries: parseCsv(buildRegistries),
|
|
938
|
+
test,
|
|
909
939
|
patterns: parseCsv(patterns),
|
|
910
940
|
cached,
|
|
911
941
|
parallel: parseDockerParallel(parallel),
|
|
@@ -1296,6 +1326,7 @@ function parseConfigValue(rawValue: string): any {
|
|
|
1296
1326
|
) {
|
|
1297
1327
|
return JSON.parse(trimmedValue);
|
|
1298
1328
|
}
|
|
1329
|
+
|
|
1299
1330
|
return rawValue;
|
|
1300
1331
|
}
|
|
1301
1332
|
|
|
@@ -1963,6 +1994,44 @@ async function validateDockerTarget(
|
|
|
1963
1994
|
});
|
|
1964
1995
|
}
|
|
1965
1996
|
|
|
1997
|
+
if (
|
|
1998
|
+
dockerTarget.registry !== undefined
|
|
1999
|
+
&& (typeof dockerTarget.registry !== "string"
|
|
2000
|
+
|| !dockerTarget.registry.trim()
|
|
2001
|
+
|| /^https?:\/\//.test(dockerTarget.registry))
|
|
2002
|
+
) {
|
|
2003
|
+
findings.push({
|
|
2004
|
+
level: "error",
|
|
2005
|
+
message: `Invalid tsdocker release registry: ${formatValue(dockerTarget.registry)}`,
|
|
2006
|
+
fix: "Use one configured registry host without a protocol, or remove release.targets.docker.registry.",
|
|
2007
|
+
});
|
|
2008
|
+
}
|
|
2009
|
+
|
|
2010
|
+
if (
|
|
2011
|
+
dockerTarget.buildRegistries !== undefined
|
|
2012
|
+
&& (!Array.isArray(dockerTarget.buildRegistries)
|
|
2013
|
+
|| dockerTarget.buildRegistries.some((registryArg: unknown) =>
|
|
2014
|
+
typeof registryArg !== "string"
|
|
2015
|
+
|| !registryArg.trim()
|
|
2016
|
+
|| /^https?:\/\//.test(registryArg)
|
|
2017
|
+
)
|
|
2018
|
+
|| new Set(dockerTarget.buildRegistries).size !== dockerTarget.buildRegistries.length)
|
|
2019
|
+
) {
|
|
2020
|
+
findings.push({
|
|
2021
|
+
level: "error",
|
|
2022
|
+
message: "Invalid tsdocker build registry authentication list",
|
|
2023
|
+
fix: "Use unique configured registry hosts without protocols, or remove release.targets.docker.buildRegistries.",
|
|
2024
|
+
});
|
|
2025
|
+
}
|
|
2026
|
+
|
|
2027
|
+
if (dockerTarget.test !== undefined && typeof dockerTarget.test !== "boolean") {
|
|
2028
|
+
findings.push({
|
|
2029
|
+
level: "error",
|
|
2030
|
+
message: `Invalid tsdocker image test setting: ${formatValue(dockerTarget.test)}`,
|
|
2031
|
+
fix: "Set release.targets.docker.test to true or false, or remove it.",
|
|
2032
|
+
});
|
|
2033
|
+
}
|
|
2034
|
+
|
|
1966
2035
|
if (!isValidDockerParallel(dockerTarget.parallel)) {
|
|
1967
2036
|
findings.push({
|
|
1968
2037
|
level: "error",
|
|
@@ -1982,7 +2051,11 @@ async function validateDockerTarget(
|
|
|
1982
2051
|
validateTsdockerProjectConfig(tsdockerConfig, findings);
|
|
1983
2052
|
}
|
|
1984
2053
|
|
|
1985
|
-
await validateTsdockerCommand(
|
|
2054
|
+
await validateTsdockerCommand(
|
|
2055
|
+
findings,
|
|
2056
|
+
dockerTarget.buildRegistries,
|
|
2057
|
+
dockerTarget.test === true,
|
|
2058
|
+
);
|
|
1986
2059
|
|
|
1987
2060
|
findings.push({
|
|
1988
2061
|
level: "ok",
|
|
@@ -2064,30 +2137,74 @@ function validateTsdockerProjectConfig(
|
|
|
2064
2137
|
});
|
|
2065
2138
|
}
|
|
2066
2139
|
|
|
2067
|
-
async function validateTsdockerCommand(
|
|
2140
|
+
async function validateTsdockerCommand(
|
|
2141
|
+
findings: IDoctorFinding[],
|
|
2142
|
+
buildRegistriesArg: unknown,
|
|
2143
|
+
imageTestsRequestedArg: boolean,
|
|
2144
|
+
): Promise<void> {
|
|
2145
|
+
let packageJson: unknown;
|
|
2146
|
+
try {
|
|
2147
|
+
packageJson = JSON.parse(
|
|
2148
|
+
await plugins.fs.readFile(plugins.path.join(process.cwd(), "package.json"), "utf8"),
|
|
2149
|
+
);
|
|
2150
|
+
} catch {
|
|
2151
|
+
packageJson = undefined;
|
|
2152
|
+
}
|
|
2153
|
+
if (!getDeclaredTsdockerRange(packageJson)) {
|
|
2154
|
+
findings.push({
|
|
2155
|
+
level: "error",
|
|
2156
|
+
message: "Docker release target requires project-local @git.zone/tsdocker",
|
|
2157
|
+
fix: "Run pnpm add --save-dev @git.zone/tsdocker.",
|
|
2158
|
+
});
|
|
2159
|
+
}
|
|
2160
|
+
if (!(await hasInstalledProjectTsdockerBinary(process.cwd()))) {
|
|
2161
|
+
findings.push({
|
|
2162
|
+
level: "error",
|
|
2163
|
+
message: "Project-local tSDocker binary is not installed",
|
|
2164
|
+
fix: "Run pnpm install after declaring @git.zone/tsdocker.",
|
|
2165
|
+
});
|
|
2166
|
+
}
|
|
2068
2167
|
const smartshellInstance = new plugins.smartshell.Smartshell({
|
|
2069
2168
|
executor: "bash",
|
|
2070
2169
|
sourceFilePaths: [],
|
|
2071
2170
|
});
|
|
2072
2171
|
try {
|
|
2073
2172
|
const result = await smartshellInstance.execSpawn(
|
|
2074
|
-
"
|
|
2075
|
-
["--version"],
|
|
2173
|
+
"pnpm",
|
|
2174
|
+
["exec", "tsdocker", "--version"],
|
|
2076
2175
|
{ silent: true, timeout: 8000 },
|
|
2077
2176
|
);
|
|
2078
2177
|
if (result.exitCode === 0) {
|
|
2079
2178
|
findings.push({ level: "ok", message: "tsdocker command is available" });
|
|
2179
|
+
const minimumTsdockerVersion = getTsdockerMinimumVersion(
|
|
2180
|
+
Array.isArray(buildRegistriesArg) && buildRegistriesArg.length > 0,
|
|
2181
|
+
imageTestsRequestedArg,
|
|
2182
|
+
);
|
|
2183
|
+
if (
|
|
2184
|
+
minimumTsdockerVersion
|
|
2185
|
+
&& !supportsTsdockerMinimumVersion(
|
|
2186
|
+
result.combinedOutput,
|
|
2187
|
+
minimumTsdockerVersion,
|
|
2188
|
+
)
|
|
2189
|
+
) {
|
|
2190
|
+
const minimumVersion = formatTsdockerMinimumVersion(minimumTsdockerVersion);
|
|
2191
|
+
findings.push({
|
|
2192
|
+
level: "error",
|
|
2193
|
+
message: `Docker release options require @git.zone/tsdocker >= ${minimumVersion}`,
|
|
2194
|
+
fix: `Upgrade the project's @git.zone/tsdocker dev dependency to at least ${minimumVersion}.`,
|
|
2195
|
+
});
|
|
2196
|
+
}
|
|
2080
2197
|
} else {
|
|
2081
2198
|
findings.push({
|
|
2082
2199
|
level: "error",
|
|
2083
|
-
message: "tsdocker command is not available",
|
|
2084
|
-
fix: "Install @git.zone/tsdocker
|
|
2200
|
+
message: "Project-local tsdocker command is not available",
|
|
2201
|
+
fix: "Install @git.zone/tsdocker as a project dev dependency.",
|
|
2085
2202
|
});
|
|
2086
2203
|
}
|
|
2087
2204
|
} catch (error) {
|
|
2088
2205
|
findings.push({
|
|
2089
2206
|
level: "error",
|
|
2090
|
-
message: "Could not execute tsdocker",
|
|
2207
|
+
message: "Could not execute project-local tsdocker",
|
|
2091
2208
|
fix: error instanceof Error ? error.message : String(error),
|
|
2092
2209
|
});
|
|
2093
2210
|
}
|