@expo/steps 0.0.8 → 0.0.10
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_commonjs/BuildConfig.cjs +15 -11
- package/dist_commonjs/BuildConfig.d.ts +1 -2
- package/dist_commonjs/BuildConfig.js.map +1 -1
- package/dist_commonjs/BuildConfigParser.cjs +115 -79
- package/dist_commonjs/BuildConfigParser.d.ts +14 -5
- package/dist_commonjs/BuildConfigParser.js.map +1 -1
- package/dist_commonjs/BuildFunction.cjs +30 -13
- package/dist_commonjs/BuildFunction.d.ts +20 -15
- package/dist_commonjs/BuildFunction.js.map +1 -1
- package/dist_commonjs/BuildStep.cjs +83 -55
- package/dist_commonjs/BuildStep.d.ts +25 -11
- package/dist_commonjs/BuildStep.js.map +1 -1
- package/dist_commonjs/BuildStepContext.cjs +5 -2
- package/dist_commonjs/BuildStepContext.d.ts +4 -0
- package/dist_commonjs/BuildStepContext.js.map +1 -1
- package/dist_commonjs/BuildStepInput.cjs +19 -6
- package/dist_commonjs/BuildStepInput.d.ts +11 -4
- package/dist_commonjs/BuildStepInput.js.map +1 -1
- package/dist_commonjs/BuildStepOutput.cjs +19 -6
- package/dist_commonjs/BuildStepOutput.d.ts +10 -4
- package/dist_commonjs/BuildStepOutput.js.map +1 -1
- package/dist_commonjs/BuildTemporaryFiles.cjs +1 -59
- package/dist_commonjs/BuildTemporaryFiles.d.ts +0 -4
- package/dist_commonjs/BuildTemporaryFiles.js.map +1 -1
- package/dist_commonjs/BuildWorkflow.cjs +3 -16
- package/dist_commonjs/BuildWorkflow.d.ts +0 -3
- package/dist_commonjs/BuildWorkflow.js.map +1 -1
- package/dist_commonjs/BuildWorkflowValidator.cjs +18 -28
- package/dist_commonjs/BuildWorkflowValidator.js.map +1 -1
- package/dist_commonjs/cli/cli.cjs +0 -4
- package/dist_commonjs/cli/cli.js.map +1 -1
- package/dist_commonjs/errors.cjs +30 -0
- package/dist_commonjs/errors.d.ts +24 -0
- package/dist_commonjs/errors.js.map +1 -0
- package/dist_commonjs/index.cjs +33 -3
- package/dist_commonjs/index.d.ts +5 -1
- package/dist_commonjs/index.js.map +1 -1
- package/dist_commonjs/utils/expodash/duplicates.cjs +18 -0
- package/dist_commonjs/utils/expodash/duplicates.d.ts +1 -0
- package/dist_commonjs/utils/expodash/duplicates.js.map +1 -0
- package/dist_commonjs/utils/template.cjs +2 -2
- package/dist_commonjs/utils/template.js.map +1 -1
- package/dist_esm/BuildConfig.d.ts +1 -2
- package/dist_esm/BuildConfig.js +14 -10
- package/dist_esm/BuildConfig.js.map +1 -1
- package/dist_esm/BuildConfigParser.d.ts +14 -5
- package/dist_esm/BuildConfigParser.js +115 -79
- package/dist_esm/BuildConfigParser.js.map +1 -1
- package/dist_esm/BuildFunction.d.ts +20 -15
- package/dist_esm/BuildFunction.js +27 -13
- package/dist_esm/BuildFunction.js.map +1 -1
- package/dist_esm/BuildStep.d.ts +25 -11
- package/dist_esm/BuildStep.js +82 -54
- package/dist_esm/BuildStep.js.map +1 -1
- package/dist_esm/BuildStepContext.d.ts +4 -0
- package/dist_esm/BuildStepContext.js +4 -1
- package/dist_esm/BuildStepContext.js.map +1 -1
- package/dist_esm/BuildStepInput.d.ts +11 -4
- package/dist_esm/BuildStepInput.js +17 -5
- package/dist_esm/BuildStepInput.js.map +1 -1
- package/dist_esm/BuildStepOutput.d.ts +10 -4
- package/dist_esm/BuildStepOutput.js +17 -5
- package/dist_esm/BuildStepOutput.js.map +1 -1
- package/dist_esm/BuildTemporaryFiles.d.ts +0 -4
- package/dist_esm/BuildTemporaryFiles.js +0 -55
- package/dist_esm/BuildTemporaryFiles.js.map +1 -1
- package/dist_esm/BuildWorkflow.d.ts +0 -3
- package/dist_esm/BuildWorkflow.js +3 -16
- package/dist_esm/BuildWorkflow.js.map +1 -1
- package/dist_esm/BuildWorkflowValidator.js +17 -27
- package/dist_esm/BuildWorkflowValidator.js.map +1 -1
- package/dist_esm/cli/cli.js +0 -4
- package/dist_esm/cli/cli.js.map +1 -1
- package/dist_esm/errors.d.ts +24 -0
- package/dist_esm/errors.js +23 -0
- package/dist_esm/errors.js.map +1 -0
- package/dist_esm/index.d.ts +5 -1
- package/dist_esm/index.js +5 -1
- package/dist_esm/index.js.map +1 -1
- package/dist_esm/utils/expodash/duplicates.d.ts +1 -0
- package/dist_esm/utils/expodash/duplicates.js +14 -0
- package/dist_esm/utils/expodash/duplicates.js.map +1 -0
- package/dist_esm/utils/template.js +1 -1
- package/dist_esm/utils/template.js.map +1 -1
- package/package.json +2 -1
- package/bin/upload-artifact +0 -12
- package/dist_commonjs/BuildArtifacts.cjs +0 -9
- package/dist_commonjs/BuildArtifacts.d.ts +0 -5
- package/dist_commonjs/BuildArtifacts.js.map +0 -1
- package/dist_commonjs/bin/uploadArtifact.cjs +0 -30
- package/dist_commonjs/bin/uploadArtifact.d.ts +0 -1
- package/dist_commonjs/bin/uploadArtifact.js.map +0 -1
- package/dist_commonjs/errors/BuildConfigError.cjs +0 -8
- package/dist_commonjs/errors/BuildConfigError.d.ts +0 -3
- package/dist_commonjs/errors/BuildConfigError.js.map +0 -1
- package/dist_commonjs/errors/BuildInternalError.cjs +0 -7
- package/dist_commonjs/errors/BuildInternalError.d.ts +0 -2
- package/dist_commonjs/errors/BuildInternalError.js.map +0 -1
- package/dist_commonjs/errors/BuildStepRuntimeError.cjs +0 -8
- package/dist_commonjs/errors/BuildStepRuntimeError.d.ts +0 -3
- package/dist_commonjs/errors/BuildStepRuntimeError.js.map +0 -1
- package/dist_commonjs/errors/BuildWorkflowError.cjs +0 -13
- package/dist_commonjs/errors/BuildWorkflowError.d.ts +0 -10
- package/dist_commonjs/errors/BuildWorkflowError.js.map +0 -1
- package/dist_commonjs/errors/UserError.cjs +0 -14
- package/dist_commonjs/errors/UserError.d.ts +0 -9
- package/dist_commonjs/errors/UserError.js.map +0 -1
- package/dist_esm/BuildArtifacts.d.ts +0 -5
- package/dist_esm/BuildArtifacts.js +0 -6
- package/dist_esm/BuildArtifacts.js.map +0 -1
- package/dist_esm/bin/uploadArtifact.d.ts +0 -1
- package/dist_esm/bin/uploadArtifact.js +0 -25
- package/dist_esm/bin/uploadArtifact.js.map +0 -1
- package/dist_esm/errors/BuildConfigError.d.ts +0 -3
- package/dist_esm/errors/BuildConfigError.js +0 -4
- package/dist_esm/errors/BuildConfigError.js.map +0 -1
- package/dist_esm/errors/BuildInternalError.d.ts +0 -2
- package/dist_esm/errors/BuildInternalError.js +0 -3
- package/dist_esm/errors/BuildInternalError.js.map +0 -1
- package/dist_esm/errors/BuildStepRuntimeError.d.ts +0 -3
- package/dist_esm/errors/BuildStepRuntimeError.js +0 -4
- package/dist_esm/errors/BuildStepRuntimeError.js.map +0 -1
- package/dist_esm/errors/BuildWorkflowError.d.ts +0 -10
- package/dist_esm/errors/BuildWorkflowError.js +0 -9
- package/dist_esm/errors/BuildWorkflowError.js.map +0 -1
- package/dist_esm/errors/UserError.d.ts +0 -9
- package/dist_esm/errors/UserError.js +0 -10
- package/dist_esm/errors/UserError.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildStepOutput.js","sourceRoot":"","sources":["../src/BuildStepOutput.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"BuildStepOutput.js","sourceRoot":"","sources":["../src/BuildStepOutput.ts"],"names":[],"mappings":";;;AACA,2CAAoD;AAQpD,MAAa,eAAe;IAOnB,MAAM,CAAC,cAAc,CAAC,MAG5B;QACC,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED;IACE,wFAAwF;IACvE,GAAqB,EACtC,EACE,EAAE,EACF,eAAe,EACf,QAAQ,GAAG,IAAI,GAC6C;QAL7C,QAAG,GAAH,GAAG,CAAkB;QAOtC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC9C,MAAM,IAAI,iCAAqB,CAC7B,qBAAqB,IAAI,CAAC,EAAE,eAAe,IAAI,CAAC,eAAe,mCAAmC,CACnG,CAAC;SACH;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,KAAyB;QAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE;YACxC,MAAM,IAAI,iCAAqB,CAC7B,qBAAqB,IAAI,CAAC,EAAE,eAAe,IAAI,CAAC,eAAe,gBAAgB,CAChF,CAAC;SACH;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA9CD,0CA8CC;AAED,SAAgB,0BAA0B,CAAC,OAA2B;IACpE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,EAAE,CAAC;KACX;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACpC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAyB,CAAC,CAAC;AAChC,CAAC;AARD,gEAQC","sourcesContent":["import { BuildStepContext } from './BuildStepContext.js';\nimport { BuildStepRuntimeError } from './errors.js';\n\nexport type BuildStepOutputById = Record<string, BuildStepOutput>;\nexport type BuildStepOutputProvider = (\n ctx: BuildStepContext,\n stepDisplayName: string\n) => BuildStepOutput;\n\nexport class BuildStepOutput {\n public readonly id: string;\n public readonly stepDisplayName: string;\n public readonly required: boolean;\n\n private _value?: string;\n\n public static createProvider(params: {\n id: string;\n required?: boolean;\n }): BuildStepOutputProvider {\n return (ctx, stepDisplayName) => new BuildStepOutput(ctx, { ...params, stepDisplayName });\n }\n\n constructor(\n // @ts-expect-error ctx is not used in this class but let's keep it here for consistency\n private readonly ctx: BuildStepContext,\n {\n id,\n stepDisplayName,\n required = true,\n }: { id: string; stepDisplayName: string; required?: boolean }\n ) {\n this.id = id;\n this.stepDisplayName = stepDisplayName;\n this.required = required;\n }\n\n get value(): string | undefined {\n if (this.required && this._value === undefined) {\n throw new BuildStepRuntimeError(\n `Output parameter \"${this.id}\" for step \"${this.stepDisplayName}\" is required but it was not set.`\n );\n }\n return this._value;\n }\n\n set(value: string | undefined): BuildStepOutput {\n if (this.required && value === undefined) {\n throw new BuildStepRuntimeError(\n `Output parameter \"${this.id}\" for step \"${this.stepDisplayName}\" is required.`\n );\n }\n this._value = value;\n return this;\n }\n}\n\nexport function makeBuildStepOutputByIdMap(outputs?: BuildStepOutput[]): BuildStepOutputById {\n if (outputs === undefined) {\n return {};\n }\n return outputs.reduce((acc, output) => {\n acc[output.id] = output;\n return acc;\n }, {} as BuildStepOutputById);\n}\n"]}
|
|
@@ -3,12 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.cleanUpStepTemporaryDirectoriesAsync = exports.createTemporaryOutputsDirectoryAsync = exports.saveScriptToTemporaryFileAsync = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
|
-
const BuildArtifacts_js_1 = require("./BuildArtifacts.cjs");
|
|
11
|
-
const BuildInternalError_js_1 = require("./errors/BuildInternalError.cjs");
|
|
12
10
|
async function saveScriptToTemporaryFileAsync(ctx, stepId, scriptContents) {
|
|
13
11
|
const scriptsDir = getTemporaryScriptsDirPath(ctx, stepId);
|
|
14
12
|
await promises_1.default.mkdir(scriptsDir, { recursive: true });
|
|
@@ -17,49 +15,12 @@ async function saveScriptToTemporaryFileAsync(ctx, stepId, scriptContents) {
|
|
|
17
15
|
return temporaryScriptPath;
|
|
18
16
|
}
|
|
19
17
|
exports.saveScriptToTemporaryFileAsync = saveScriptToTemporaryFileAsync;
|
|
20
|
-
async function saveArtifactToTemporaryDirectoryAsync(ctx, type, artifactPath) {
|
|
21
|
-
let targetArtifactPath;
|
|
22
|
-
if (type === BuildArtifacts_js_1.BuildArtifactType.APPLICATION_ARCHIVE) {
|
|
23
|
-
targetArtifactPath = path_1.default.join(getTemporaryApplicationArchiveDirPath(ctx), path_1.default.basename(artifactPath));
|
|
24
|
-
}
|
|
25
|
-
else if (type === BuildArtifacts_js_1.BuildArtifactType.BUILD_ARTIFACT) {
|
|
26
|
-
targetArtifactPath = path_1.default.join(getTemporaryBuildArtifactsDirPath(ctx), path_1.default.basename(artifactPath));
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
throw new BuildInternalError_js_1.BuildInternalError(`Uploading artifacts of type "${type}" is not implemented.`);
|
|
30
|
-
}
|
|
31
|
-
await promises_1.default.mkdir(path_1.default.dirname(targetArtifactPath), { recursive: true });
|
|
32
|
-
await promises_1.default.copyFile(artifactPath, targetArtifactPath);
|
|
33
|
-
return targetArtifactPath;
|
|
34
|
-
}
|
|
35
|
-
exports.saveArtifactToTemporaryDirectoryAsync = saveArtifactToTemporaryDirectoryAsync;
|
|
36
18
|
async function createTemporaryOutputsDirectoryAsync(ctx, stepId) {
|
|
37
19
|
const directory = getTemporaryOutputsDirPath(ctx, stepId);
|
|
38
20
|
await promises_1.default.mkdir(directory, { recursive: true });
|
|
39
21
|
return directory;
|
|
40
22
|
}
|
|
41
23
|
exports.createTemporaryOutputsDirectoryAsync = createTemporaryOutputsDirectoryAsync;
|
|
42
|
-
async function findArtifactsByTypeAsync(ctx, type) {
|
|
43
|
-
let artifactsDirPath;
|
|
44
|
-
if (type === BuildArtifacts_js_1.BuildArtifactType.APPLICATION_ARCHIVE) {
|
|
45
|
-
artifactsDirPath = getTemporaryApplicationArchiveDirPath(ctx);
|
|
46
|
-
}
|
|
47
|
-
else if (type === BuildArtifacts_js_1.BuildArtifactType.BUILD_ARTIFACT) {
|
|
48
|
-
artifactsDirPath = getTemporaryBuildArtifactsDirPath(ctx);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
throw new BuildInternalError_js_1.BuildInternalError(`Finding artifacts of type "${type}" is not implemented.`);
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
const filenames = await promises_1.default.readdir(artifactsDirPath);
|
|
55
|
-
return filenames.map((filename) => path_1.default.join(artifactsDirPath, filename));
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
ctx.logger.debug({ err }, `Failed reading artifacts of type "${type}" from "${artifactsDirPath}". The directory probably doesn't exist.`);
|
|
59
|
-
return [];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
exports.findArtifactsByTypeAsync = findArtifactsByTypeAsync;
|
|
63
24
|
async function cleanUpStepTemporaryDirectoriesAsync(ctx, stepId) {
|
|
64
25
|
if (ctx.skipCleanup) {
|
|
65
26
|
return;
|
|
@@ -69,16 +30,6 @@ async function cleanUpStepTemporaryDirectoriesAsync(ctx, stepId) {
|
|
|
69
30
|
ctx.logger.debug({ stepTemporaryDirectory }, 'Removed step temporary directory');
|
|
70
31
|
}
|
|
71
32
|
exports.cleanUpStepTemporaryDirectoriesAsync = cleanUpStepTemporaryDirectoriesAsync;
|
|
72
|
-
async function cleanUpWorkflowTemporaryDirectoriesAsync(ctx) {
|
|
73
|
-
if (ctx.skipCleanup) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const temporaryDirectories = [getTemporaryArtifactsDirPath(ctx)];
|
|
77
|
-
const rmPromises = temporaryDirectories.map((dir) => promises_1.default.rm(dir, { recursive: true, force: true }));
|
|
78
|
-
await Promise.all(rmPromises);
|
|
79
|
-
ctx.logger.debug({ temporaryDirectories }, 'Removed temporary directories');
|
|
80
|
-
}
|
|
81
|
-
exports.cleanUpWorkflowTemporaryDirectoriesAsync = cleanUpWorkflowTemporaryDirectoriesAsync;
|
|
82
33
|
function getTemporaryStepDirPath(ctx, stepId) {
|
|
83
34
|
return path_1.default.join(ctx.baseWorkingDirectory, 'steps', stepId);
|
|
84
35
|
}
|
|
@@ -88,13 +39,4 @@ function getTemporaryScriptsDirPath(ctx, stepId) {
|
|
|
88
39
|
function getTemporaryOutputsDirPath(ctx, stepId) {
|
|
89
40
|
return path_1.default.join(getTemporaryStepDirPath(ctx, stepId), 'outputs');
|
|
90
41
|
}
|
|
91
|
-
function getTemporaryApplicationArchiveDirPath(ctx) {
|
|
92
|
-
return path_1.default.join(getTemporaryArtifactsDirPath(ctx), 'application-archive');
|
|
93
|
-
}
|
|
94
|
-
function getTemporaryBuildArtifactsDirPath(ctx) {
|
|
95
|
-
return path_1.default.join(getTemporaryArtifactsDirPath(ctx), 'build-artifacts');
|
|
96
|
-
}
|
|
97
|
-
function getTemporaryArtifactsDirPath(ctx) {
|
|
98
|
-
return path_1.default.join(ctx.baseWorkingDirectory, 'artifacts');
|
|
99
|
-
}
|
|
100
42
|
//# sourceMappingURL=BuildTemporaryFiles.js.map
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { BuildStepContext } from './BuildStepContext.js';
|
|
2
|
-
import { BuildArtifactType } from './BuildArtifacts.js';
|
|
3
2
|
export declare function saveScriptToTemporaryFileAsync(ctx: BuildStepContext, stepId: string, scriptContents: string): Promise<string>;
|
|
4
|
-
export declare function saveArtifactToTemporaryDirectoryAsync(ctx: BuildStepContext, type: BuildArtifactType, artifactPath: string): Promise<string>;
|
|
5
3
|
export declare function createTemporaryOutputsDirectoryAsync(ctx: BuildStepContext, stepId: string): Promise<string>;
|
|
6
|
-
export declare function findArtifactsByTypeAsync(ctx: BuildStepContext, type: BuildArtifactType): Promise<string[]>;
|
|
7
4
|
export declare function cleanUpStepTemporaryDirectoriesAsync(ctx: BuildStepContext, stepId: string): Promise<void>;
|
|
8
|
-
export declare function cleanUpWorkflowTemporaryDirectoriesAsync(ctx: BuildStepContext): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildTemporaryFiles.js","sourceRoot":"","sources":["../src/BuildTemporaryFiles.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,2DAA6B;AAE7B,+BAAoC;
|
|
1
|
+
{"version":3,"file":"BuildTemporaryFiles.js","sourceRoot":"","sources":["../src/BuildTemporaryFiles.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,2DAA6B;AAE7B,+BAAoC;AAI7B,KAAK,UAAU,8BAA8B,CAClD,GAAqB,EACrB,MAAc,EACd,cAAsB;IAEtB,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,kBAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAA,SAAM,GAAE,KAAK,CAAC,CAAC;IACpE,MAAM,kBAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACxD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAVD,wEAUC;AAEM,KAAK,UAAU,oCAAoC,CACxD,GAAqB,EACrB,MAAc;IAEd,MAAM,SAAS,GAAG,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,kBAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC;AACnB,CAAC;AAPD,oFAOC;AAEM,KAAK,UAAU,oCAAoC,CACxD,GAAqB,EACrB,MAAc;IAEd,IAAI,GAAG,CAAC,WAAW,EAAE;QACnB,OAAO;KACR;IACD,MAAM,sBAAsB,GAAG,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,kBAAE,CAAC,EAAE,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,sBAAsB,EAAE,EAAE,kCAAkC,CAAC,CAAC;AACnF,CAAC;AAVD,oFAUC;AACD,SAAS,uBAAuB,CAAC,GAAqB,EAAE,MAAc;IACpE,OAAO,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAqB,EAAE,MAAc;IACvE,OAAO,cAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAqB,EAAE,MAAc;IACvE,OAAO,cAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import path from 'path';\nimport fs from 'fs/promises';\n\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildStepContext } from './BuildStepContext.js';\n\nexport async function saveScriptToTemporaryFileAsync(\n ctx: BuildStepContext,\n stepId: string,\n scriptContents: string\n): Promise<string> {\n const scriptsDir = getTemporaryScriptsDirPath(ctx, stepId);\n await fs.mkdir(scriptsDir, { recursive: true });\n const temporaryScriptPath = path.join(scriptsDir, `${uuidv4()}.sh`);\n await fs.writeFile(temporaryScriptPath, scriptContents);\n return temporaryScriptPath;\n}\n\nexport async function createTemporaryOutputsDirectoryAsync(\n ctx: BuildStepContext,\n stepId: string\n): Promise<string> {\n const directory = getTemporaryOutputsDirPath(ctx, stepId);\n await fs.mkdir(directory, { recursive: true });\n return directory;\n}\n\nexport async function cleanUpStepTemporaryDirectoriesAsync(\n ctx: BuildStepContext,\n stepId: string\n): Promise<void> {\n if (ctx.skipCleanup) {\n return;\n }\n const stepTemporaryDirectory = getTemporaryStepDirPath(ctx, stepId);\n await fs.rm(stepTemporaryDirectory, { recursive: true, force: true });\n ctx.logger.debug({ stepTemporaryDirectory }, 'Removed step temporary directory');\n}\nfunction getTemporaryStepDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(ctx.baseWorkingDirectory, 'steps', stepId);\n}\n\nfunction getTemporaryScriptsDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(getTemporaryStepDirPath(ctx, stepId), 'scripts');\n}\n\nfunction getTemporaryOutputsDirPath(ctx: BuildStepContext, stepId: string): string {\n return path.join(getTemporaryStepDirPath(ctx, stepId), 'outputs');\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BuildWorkflow = void 0;
|
|
4
|
-
const BuildArtifacts_js_1 = require("./BuildArtifacts.cjs");
|
|
5
|
-
const BuildTemporaryFiles_js_1 = require("./BuildTemporaryFiles.cjs");
|
|
6
4
|
class BuildWorkflow {
|
|
7
|
-
constructor(
|
|
5
|
+
constructor(
|
|
6
|
+
// @ts-expect-error ctx is not used in this class but let's keep it here for consistency
|
|
7
|
+
ctx, { buildSteps, buildFunctions }) {
|
|
8
8
|
this.ctx = ctx;
|
|
9
9
|
this.buildSteps = buildSteps;
|
|
10
10
|
this.buildFunctions = buildFunctions;
|
|
@@ -14,19 +14,6 @@ class BuildWorkflow {
|
|
|
14
14
|
await step.executeAsync(env);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
async collectArtifactsAsync() {
|
|
18
|
-
const applicationArchives = await (0, BuildTemporaryFiles_js_1.findArtifactsByTypeAsync)(this.ctx, BuildArtifacts_js_1.BuildArtifactType.APPLICATION_ARCHIVE);
|
|
19
|
-
const buildArtifacts = await (0, BuildTemporaryFiles_js_1.findArtifactsByTypeAsync)(this.ctx, BuildArtifacts_js_1.BuildArtifactType.BUILD_ARTIFACT);
|
|
20
|
-
return {
|
|
21
|
-
...(applicationArchives.length > 0 && {
|
|
22
|
-
[BuildArtifacts_js_1.BuildArtifactType.APPLICATION_ARCHIVE]: applicationArchives,
|
|
23
|
-
}),
|
|
24
|
-
...(buildArtifacts.length > 0 && { [BuildArtifacts_js_1.BuildArtifactType.BUILD_ARTIFACT]: buildArtifacts }),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
async cleanUpAsync() {
|
|
28
|
-
await (0, BuildTemporaryFiles_js_1.cleanUpWorkflowTemporaryDirectoriesAsync)(this.ctx);
|
|
29
|
-
}
|
|
30
17
|
}
|
|
31
18
|
exports.BuildWorkflow = BuildWorkflow;
|
|
32
19
|
//# sourceMappingURL=BuildWorkflow.js.map
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BuildArtifacts } from './BuildArtifacts.js';
|
|
2
1
|
import { BuildFunctionById } from './BuildFunction.js';
|
|
3
2
|
import { BuildStep } from './BuildStep.js';
|
|
4
3
|
import { BuildStepContext } from './BuildStepContext.js';
|
|
@@ -12,6 +11,4 @@ export declare class BuildWorkflow {
|
|
|
12
11
|
buildFunctions: BuildFunctionById;
|
|
13
12
|
});
|
|
14
13
|
executeAsync(env?: BuildStepEnv): Promise<void>;
|
|
15
|
-
collectArtifactsAsync(): Promise<BuildArtifacts>;
|
|
16
|
-
cleanUpAsync(): Promise<void>;
|
|
17
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildWorkflow.js","sourceRoot":"","sources":["../src/BuildWorkflow.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"BuildWorkflow.js","sourceRoot":"","sources":["../src/BuildWorkflow.ts"],"names":[],"mappings":";;;AAKA,MAAa,aAAa;IAIxB;IACE,wFAAwF;IACvE,GAAqB,EACtC,EAAE,UAAU,EAAE,cAAc,EAAkE;QAD7E,QAAG,GAAH,GAAG,CAAkB;QAGtC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAoB,OAAO,CAAC,GAAG;QACvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC9B;IACH,CAAC;CACF;AAlBD,sCAkBC","sourcesContent":["import { BuildFunctionById } from './BuildFunction.js';\nimport { BuildStep } from './BuildStep.js';\nimport { BuildStepContext } from './BuildStepContext.js';\nimport { BuildStepEnv } from './BuildStepEnv.js';\n\nexport class BuildWorkflow {\n public readonly buildSteps: BuildStep[];\n public readonly buildFunctions: BuildFunctionById;\n\n constructor(\n // @ts-expect-error ctx is not used in this class but let's keep it here for consistency\n private readonly ctx: BuildStepContext,\n { buildSteps, buildFunctions }: { buildSteps: BuildStep[]; buildFunctions: BuildFunctionById }\n ) {\n this.buildSteps = buildSteps;\n this.buildFunctions = buildFunctions;\n }\n\n public async executeAsync(env: BuildStepEnv = process.env): Promise<void> {\n for (const step of this.buildSteps) {\n await step.executeAsync(env);\n }\n }\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BuildWorkflowValidator = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const errors_js_1 = require("./errors.cjs");
|
|
5
|
+
const duplicates_js_1 = require("./utils/expodash/duplicates.cjs");
|
|
6
6
|
const template_js_1 = require("./utils/template.cjs");
|
|
7
7
|
class BuildWorkflowValidator {
|
|
8
8
|
constructor(workflow) {
|
|
@@ -13,27 +13,17 @@ class BuildWorkflowValidator {
|
|
|
13
13
|
errors.push(...this.validateUniqueStepIds());
|
|
14
14
|
errors.push(...this.validateInputs());
|
|
15
15
|
if (errors.length !== 0) {
|
|
16
|
-
throw new
|
|
16
|
+
throw new errors_js_1.BuildWorkflowError('Build workflow is invalid.', errors);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
validateUniqueStepIds() {
|
|
20
20
|
const stepIds = this.workflow.buildSteps.map(({ id }) => id);
|
|
21
|
-
const
|
|
22
|
-
const duplicatedStepIdsSet = new Set();
|
|
23
|
-
for (const stepId of stepIds) {
|
|
24
|
-
if (visitedStepIdsSet.has(stepId)) {
|
|
25
|
-
duplicatedStepIdsSet.add(stepId);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
visitedStepIdsSet.add(stepId);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const duplicatedStepIds = [...duplicatedStepIdsSet];
|
|
21
|
+
const duplicatedStepIds = (0, duplicates_js_1.duplicates)(stepIds);
|
|
32
22
|
if (duplicatedStepIds.length === 0) {
|
|
33
23
|
return [];
|
|
34
24
|
}
|
|
35
25
|
else {
|
|
36
|
-
const error = new
|
|
26
|
+
const error = new errors_js_1.BuildConfigError(`Duplicated step IDs: ${duplicatedStepIds.map((i) => `"${i}"`).join(', ')}`);
|
|
37
27
|
return [error];
|
|
38
28
|
}
|
|
39
29
|
}
|
|
@@ -41,33 +31,33 @@ class BuildWorkflowValidator {
|
|
|
41
31
|
var _a;
|
|
42
32
|
const errors = [];
|
|
43
33
|
const allStepIds = new Set(this.workflow.buildSteps.map((s) => s.id));
|
|
44
|
-
const
|
|
45
|
-
for (const
|
|
46
|
-
for (const
|
|
47
|
-
if (
|
|
34
|
+
const visitedStepByStepId = {};
|
|
35
|
+
for (const currentStep of this.workflow.buildSteps) {
|
|
36
|
+
for (const currentStepInput of (_a = currentStep.inputs) !== null && _a !== void 0 ? _a : []) {
|
|
37
|
+
if (currentStepInput.defaultValue === undefined) {
|
|
48
38
|
continue;
|
|
49
39
|
}
|
|
50
|
-
const paths = (0, template_js_1.findOutputPaths)(
|
|
51
|
-
for (const { stepId, outputId } of paths) {
|
|
52
|
-
if (!(
|
|
53
|
-
if (allStepIds.has(
|
|
54
|
-
const error = new
|
|
40
|
+
const paths = (0, template_js_1.findOutputPaths)(currentStepInput.defaultValue);
|
|
41
|
+
for (const { stepId: referencedStepId, outputId: referencedStepOutputId } of paths) {
|
|
42
|
+
if (!(referencedStepId in visitedStepByStepId)) {
|
|
43
|
+
if (allStepIds.has(referencedStepId)) {
|
|
44
|
+
const error = new errors_js_1.BuildConfigError(`Input parameter "${currentStepInput.id}" for step "${currentStep.displayName}" uses an expression that references an output parameter from the future step "${referencedStepId}".`);
|
|
55
45
|
errors.push(error);
|
|
56
46
|
}
|
|
57
47
|
else {
|
|
58
|
-
const error = new
|
|
48
|
+
const error = new errors_js_1.BuildConfigError(`Input parameter "${currentStepInput.id}" for step "${currentStep.displayName}" uses an expression that references an output parameter from a non-existent step "${referencedStepId}".`);
|
|
59
49
|
errors.push(error);
|
|
60
50
|
}
|
|
61
51
|
}
|
|
62
52
|
else {
|
|
63
|
-
if (!
|
|
64
|
-
const error = new
|
|
53
|
+
if (!visitedStepByStepId[referencedStepId].hasOutputParameter(referencedStepOutputId)) {
|
|
54
|
+
const error = new errors_js_1.BuildConfigError(`Input parameter "${currentStepInput.id}" for step "${currentStep.displayName}" uses an expression that references an undefined output parameter "${referencedStepOutputId}" from step "${referencedStepId}".`);
|
|
65
55
|
errors.push(error);
|
|
66
56
|
}
|
|
67
57
|
}
|
|
68
58
|
}
|
|
69
59
|
}
|
|
70
|
-
|
|
60
|
+
visitedStepByStepId[currentStep.id] = currentStep;
|
|
71
61
|
}
|
|
72
62
|
return errors;
|
|
73
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildWorkflowValidator.js","sourceRoot":"","sources":["../src/BuildWorkflowValidator.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"BuildWorkflowValidator.js","sourceRoot":"","sources":["../src/BuildWorkflowValidator.ts"],"names":[],"mappings":"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","sourcesContent":["import { BuildStep } from './BuildStep.js';\nimport { BuildWorkflow } from './BuildWorkflow.js';\nimport { BuildConfigError, BuildWorkflowError } from './errors.js';\nimport { duplicates } from './utils/expodash/duplicates.js';\nimport { findOutputPaths } from './utils/template.js';\n\nexport class BuildWorkflowValidator {\n constructor(private readonly workflow: BuildWorkflow) {}\n\n public validate(): void {\n const errors: BuildConfigError[] = [];\n errors.push(...this.validateUniqueStepIds());\n errors.push(...this.validateInputs());\n if (errors.length !== 0) {\n throw new BuildWorkflowError('Build workflow is invalid.', errors);\n }\n }\n\n private validateUniqueStepIds(): BuildConfigError[] {\n const stepIds = this.workflow.buildSteps.map(({ id }) => id);\n const duplicatedStepIds = duplicates(stepIds);\n if (duplicatedStepIds.length === 0) {\n return [];\n } else {\n const error = new BuildConfigError(\n `Duplicated step IDs: ${duplicatedStepIds.map((i) => `\"${i}\"`).join(', ')}`\n );\n return [error];\n }\n }\n\n private validateInputs(): BuildConfigError[] {\n const errors: BuildConfigError[] = [];\n\n const allStepIds = new Set(this.workflow.buildSteps.map((s) => s.id));\n const visitedStepByStepId: Record<string, BuildStep> = {};\n for (const currentStep of this.workflow.buildSteps) {\n for (const currentStepInput of currentStep.inputs ?? []) {\n if (currentStepInput.defaultValue === undefined) {\n continue;\n }\n const paths = findOutputPaths(currentStepInput.defaultValue);\n for (const { stepId: referencedStepId, outputId: referencedStepOutputId } of paths) {\n if (!(referencedStepId in visitedStepByStepId)) {\n if (allStepIds.has(referencedStepId)) {\n const error = new BuildConfigError(\n `Input parameter \"${currentStepInput.id}\" for step \"${currentStep.displayName}\" uses an expression that references an output parameter from the future step \"${referencedStepId}\".`\n );\n errors.push(error);\n } else {\n const error = new BuildConfigError(\n `Input parameter \"${currentStepInput.id}\" for step \"${currentStep.displayName}\" uses an expression that references an output parameter from a non-existent step \"${referencedStepId}\".`\n );\n errors.push(error);\n }\n } else {\n if (!visitedStepByStepId[referencedStepId].hasOutputParameter(referencedStepOutputId)) {\n const error = new BuildConfigError(\n `Input parameter \"${currentStepInput.id}\" for step \"${currentStep.displayName}\" uses an expression that references an undefined output parameter \"${referencedStepOutputId}\" from step \"${referencedStepId}\".`\n );\n errors.push(error);\n }\n }\n }\n }\n visitedStepByStepId[currentStep.id] = currentStep;\n }\n\n return errors;\n }\n}\n"]}
|
|
@@ -18,10 +18,6 @@ async function runAsync(configPath, workingDirectory) {
|
|
|
18
18
|
const parser = new BuildConfigParser_js_1.BuildConfigParser(ctx, { configPath });
|
|
19
19
|
const workflow = await parser.parseAsync();
|
|
20
20
|
await workflow.executeAsync();
|
|
21
|
-
const artifacts = await workflow.collectArtifactsAsync();
|
|
22
|
-
if (Object.keys(artifacts).length > 0) {
|
|
23
|
-
logger.info({ artifacts }, 'The workflow produced artifacts');
|
|
24
|
-
}
|
|
25
21
|
}
|
|
26
22
|
const relativeConfigPath = process.argv[2];
|
|
27
23
|
const relativeWorkingDirectoryPath = process.argv[3];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,yCAA4C;AAC5C,+BAAoC;AAEpC,kEAA4D;AAC5D,gEAA0D;AAE1D,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC;IAC1B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,KAAK,UAAU,QAAQ,CAAC,UAAkB,EAAE,gBAAwB;IAClE,MAAM,WAAW,GAAG,IAAA,SAAM,GAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,sCAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,wCAAiB,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,yCAA4C;AAC5C,+BAAoC;AAEpC,kEAA4D;AAC5D,gEAA0D;AAE1D,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC;IAC1B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,MAAM;CACd,CAAC,CAAC;AAEH,KAAK,UAAU,QAAQ,CAAC,UAAkB,EAAE,gBAAwB;IAClE,MAAM,WAAW,GAAG,IAAA,SAAM,GAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,sCAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,wCAAiB,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C,MAAM,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErD,IAAI,CAAC,kBAAkB,IAAI,CAAC,4BAA4B,EAAE;IACxD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACjB;AAED,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACnE,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,4BAA4B,CAAC,CAAC;AAEnF,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnD,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC","sourcesContent":["import path from 'path';\n\nimport { createLogger } from '@expo/logger';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildConfigParser } from '../BuildConfigParser.js';\nimport { BuildStepContext } from '../BuildStepContext.js';\n\nconst logger = createLogger({\n name: 'steps-cli',\n level: 'info',\n});\n\nasync function runAsync(configPath: string, workingDirectory: string): Promise<void> {\n const fakeBuildId = uuidv4();\n const ctx = new BuildStepContext(fakeBuildId, logger, false, workingDirectory);\n const parser = new BuildConfigParser(ctx, { configPath });\n const workflow = await parser.parseAsync();\n await workflow.executeAsync();\n}\n\nconst relativeConfigPath = process.argv[2];\nconst relativeWorkingDirectoryPath = process.argv[3];\n\nif (!relativeConfigPath && !relativeWorkingDirectoryPath) {\n console.error('Usage: yarn cli config.yml path/to/working/directory');\n process.exit(1);\n}\n\nconst configPath = path.resolve(process.cwd(), relativeConfigPath);\nconst workingDirectory = path.resolve(process.cwd(), relativeWorkingDirectoryPath);\n\nrunAsync(configPath, workingDirectory).catch((err) => {\n logger.error({ err }, 'Build failed');\n});\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuildWorkflowError = exports.BuildStepRuntimeError = exports.BuildInternalError = exports.BuildConfigError = void 0;
|
|
4
|
+
class UserError extends Error {
|
|
5
|
+
constructor(message, extra) {
|
|
6
|
+
var _a;
|
|
7
|
+
super(message);
|
|
8
|
+
this.message = message;
|
|
9
|
+
this.metadata = (_a = extra === null || extra === void 0 ? void 0 : extra.cause) !== null && _a !== void 0 ? _a : {};
|
|
10
|
+
this.cause = extra === null || extra === void 0 ? void 0 : extra.cause;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
class BuildConfigError extends UserError {
|
|
14
|
+
}
|
|
15
|
+
exports.BuildConfigError = BuildConfigError;
|
|
16
|
+
class BuildInternalError extends Error {
|
|
17
|
+
}
|
|
18
|
+
exports.BuildInternalError = BuildInternalError;
|
|
19
|
+
class BuildStepRuntimeError extends UserError {
|
|
20
|
+
}
|
|
21
|
+
exports.BuildStepRuntimeError = BuildStepRuntimeError;
|
|
22
|
+
class BuildWorkflowError extends UserError {
|
|
23
|
+
constructor(message, errors, extra) {
|
|
24
|
+
super(message, extra);
|
|
25
|
+
this.message = message;
|
|
26
|
+
this.errors = errors;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.BuildWorkflowError = BuildWorkflowError;
|
|
30
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
declare abstract class UserError extends Error {
|
|
2
|
+
readonly message: string;
|
|
3
|
+
readonly cause?: Error;
|
|
4
|
+
readonly metadata: object;
|
|
5
|
+
constructor(message: string, extra?: {
|
|
6
|
+
metadata?: object;
|
|
7
|
+
cause?: Error;
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export declare class BuildConfigError extends UserError {
|
|
11
|
+
}
|
|
12
|
+
export declare class BuildInternalError extends Error {
|
|
13
|
+
}
|
|
14
|
+
export declare class BuildStepRuntimeError extends UserError {
|
|
15
|
+
}
|
|
16
|
+
export declare class BuildWorkflowError extends UserError {
|
|
17
|
+
readonly message: string;
|
|
18
|
+
readonly errors: BuildConfigError[];
|
|
19
|
+
constructor(message: string, errors: BuildConfigError[], extra?: {
|
|
20
|
+
metadata?: object;
|
|
21
|
+
cause?: Error;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,MAAe,SAAU,SAAQ,KAAK;IAIpC,YAC2B,OAAe,EACxC,KAGC;;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QANU,YAAO,GAAP,OAAO,CAAQ;QAOxC,IAAI,CAAC,QAAQ,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC;IAC5B,CAAC;CACF;AAED,MAAa,gBAAiB,SAAQ,SAAS;CAAG;AAAlD,4CAAkD;AAElD,MAAa,kBAAmB,SAAQ,KAAK;CAAG;AAAhD,gDAAgD;AAEhD,MAAa,qBAAsB,SAAQ,SAAS;CAAG;AAAvD,sDAAuD;AAEvD,MAAa,kBAAmB,SAAQ,SAAS;IAC/C,YAC2B,OAAe,EACxB,MAA0B,EAC1C,KAGC;QAED,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAPG,YAAO,GAAP,OAAO,CAAQ;QACxB,WAAM,GAAN,MAAM,CAAoB;IAO5C,CAAC;CACF;AAXD,gDAWC","sourcesContent":["abstract class UserError extends Error {\n public readonly cause?: Error;\n public readonly metadata: object;\n\n constructor(\n public override readonly message: string,\n extra?: {\n metadata?: object;\n cause?: Error;\n }\n ) {\n super(message);\n this.metadata = extra?.cause ?? {};\n this.cause = extra?.cause;\n }\n}\n\nexport class BuildConfigError extends UserError {}\n\nexport class BuildInternalError extends Error {}\n\nexport class BuildStepRuntimeError extends UserError {}\n\nexport class BuildWorkflowError extends UserError {\n constructor(\n public override readonly message: string,\n public readonly errors: BuildConfigError[],\n extra?: {\n metadata?: object;\n cause?: Error;\n }\n ) {\n super(message, extra);\n }\n}\n"]}
|
package/dist_commonjs/index.cjs
CHANGED
|
@@ -1,10 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BuildStepContext = exports.
|
|
4
|
-
var BuildArtifacts_js_1 = require("./BuildArtifacts.cjs");
|
|
5
|
-
Object.defineProperty(exports, "BuildArtifactType", { enumerable: true, get: function () { return BuildArtifacts_js_1.BuildArtifactType; } });
|
|
26
|
+
exports.errors = exports.BuildWorkflow = exports.BuildStepContext = exports.BuildStepOutput = exports.BuildStepInput = exports.BuildFunction = exports.BuildConfigParser = void 0;
|
|
6
27
|
var BuildConfigParser_js_1 = require("./BuildConfigParser.cjs");
|
|
7
28
|
Object.defineProperty(exports, "BuildConfigParser", { enumerable: true, get: function () { return BuildConfigParser_js_1.BuildConfigParser; } });
|
|
29
|
+
var BuildFunction_js_1 = require("./BuildFunction.cjs");
|
|
30
|
+
Object.defineProperty(exports, "BuildFunction", { enumerable: true, get: function () { return BuildFunction_js_1.BuildFunction; } });
|
|
31
|
+
var BuildStepInput_js_1 = require("./BuildStepInput.cjs");
|
|
32
|
+
Object.defineProperty(exports, "BuildStepInput", { enumerable: true, get: function () { return BuildStepInput_js_1.BuildStepInput; } });
|
|
33
|
+
var BuildStepOutput_js_1 = require("./BuildStepOutput.cjs");
|
|
34
|
+
Object.defineProperty(exports, "BuildStepOutput", { enumerable: true, get: function () { return BuildStepOutput_js_1.BuildStepOutput; } });
|
|
8
35
|
var BuildStepContext_js_1 = require("./BuildStepContext.cjs");
|
|
9
36
|
Object.defineProperty(exports, "BuildStepContext", { enumerable: true, get: function () { return BuildStepContext_js_1.BuildStepContext; } });
|
|
37
|
+
var BuildWorkflow_js_1 = require("./BuildWorkflow.cjs");
|
|
38
|
+
Object.defineProperty(exports, "BuildWorkflow", { enumerable: true, get: function () { return BuildWorkflow_js_1.BuildWorkflow; } });
|
|
39
|
+
exports.errors = __importStar(require("./errors.cjs"));
|
|
10
40
|
//# sourceMappingURL=index.js.map
|
package/dist_commonjs/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
export { BuildArtifactType } from './BuildArtifacts.js';
|
|
2
1
|
export { BuildConfigParser } from './BuildConfigParser.js';
|
|
2
|
+
export { BuildFunction } from './BuildFunction.js';
|
|
3
|
+
export { BuildStepInput } from './BuildStepInput.js';
|
|
4
|
+
export { BuildStepOutput } from './BuildStepOutput.js';
|
|
3
5
|
export { BuildStepContext } from './BuildStepContext.js';
|
|
6
|
+
export { BuildWorkflow } from './BuildWorkflow.js';
|
|
7
|
+
export * as errors from './errors.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA;AAC1B,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AACtB,yDAAqD;AAA5C,mHAAA,cAAc,OAAA;AACvB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AACxB,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AACzB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AACtB,sDAAsC","sourcesContent":["export { BuildConfigParser } from './BuildConfigParser.js';\nexport { BuildFunction } from './BuildFunction.js';\nexport { BuildStepInput } from './BuildStepInput.js';\nexport { BuildStepOutput } from './BuildStepOutput.js';\nexport { BuildStepContext } from './BuildStepContext.js';\nexport { BuildWorkflow } from './BuildWorkflow.js';\nexport * as errors from './errors.js';\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.duplicates = void 0;
|
|
4
|
+
function duplicates(items) {
|
|
5
|
+
const visitedItemsSet = new Set();
|
|
6
|
+
const duplicatedItemsSet = new Set();
|
|
7
|
+
for (const item of items) {
|
|
8
|
+
if (visitedItemsSet.has(item)) {
|
|
9
|
+
duplicatedItemsSet.add(item);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
visitedItemsSet.add(item);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return [...duplicatedItemsSet];
|
|
16
|
+
}
|
|
17
|
+
exports.duplicates = duplicates;
|
|
18
|
+
//# sourceMappingURL=duplicates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function duplicates<T = any>(items: T[]): T[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../../../src/utils/expodash/duplicates.ts"],"names":[],"mappings":";;;AAAA,SAAgB,UAAU,CAAU,KAAU;IAC5C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAK,CAAC;IACrC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAK,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7B,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC9B;aAAM;YACL,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC3B;KACF;IACD,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACjC,CAAC;AAXD,gCAWC","sourcesContent":["export function duplicates<T = any>(items: T[]): T[] {\n const visitedItemsSet = new Set<T>();\n const duplicatedItemsSet = new Set<T>();\n for (const item of items) {\n if (visitedItemsSet.has(item)) {\n duplicatedItemsSet.add(item);\n } else {\n visitedItemsSet.add(item);\n }\n }\n return [...duplicatedItemsSet];\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseOutputPath = exports.findOutputPaths = exports.interpolateWithOutputs = exports.interpolateWithInputs = exports.BUILD_STEP_OUTPUT_EXPRESSION_REGEXP = exports.BUILD_STEP_INPUT_EXPRESSION_REGEXP = void 0;
|
|
4
|
-
const
|
|
4
|
+
const errors_js_1 = require("../errors.cjs");
|
|
5
5
|
const nullthrows_js_1 = require("./nullthrows.cjs");
|
|
6
6
|
exports.BUILD_STEP_INPUT_EXPRESSION_REGEXP = /\${\s*inputs\.([\S]+)\s*}/;
|
|
7
7
|
exports.BUILD_STEP_OUTPUT_EXPRESSION_REGEXP = /\${\s*steps\.([\S]+)\s*}/;
|
|
@@ -38,7 +38,7 @@ exports.findOutputPaths = findOutputPaths;
|
|
|
38
38
|
function parseOutputPath(outputPath) {
|
|
39
39
|
const splits = outputPath.split('.');
|
|
40
40
|
if (splits.length !== 2) {
|
|
41
|
-
throw new
|
|
41
|
+
throw new errors_js_1.BuildConfigError(`Step output path must consist of two components joined with a dot, where first is the step ID, and second is the output name, e.g. "step3.output1". Passed: "${outputPath}"`);
|
|
42
42
|
}
|
|
43
43
|
const [stepId, outputId] = splits;
|
|
44
44
|
return { stepId, outputId };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEhD,mDAA6C;AAEhC,QAAA,kCAAkC,GAAG,2BAA2B,CAAC;AACjE,QAAA,mCAAmC,GAAG,0BAA0B,CAAC;AAE9E,SAAgB,qBAAqB,CACnC,cAAsB,EACtB,MAA8B;IAE9B,OAAO,WAAW,CAAC,cAAc,EAAE,0CAAkC,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AALD,sDAKC;AAED,SAAgB,sBAAsB,CACpC,cAAsB,EACtB,EAA4B;IAE5B,OAAO,WAAW,CAAC,cAAc,EAAE,2CAAmC,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AALD,wDAKC;AAED,SAAS,WAAW,CAClB,cAAsB,EACtB,KAAa,EACb,QAA4D;IAE5D,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,cAAc,CAAC;KACvB;IACD,IAAI,MAAM,GAAG,cAAc,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,IAAA,0BAAU,EAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACvC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,SAAgB,eAAe,CAAC,cAAsB;IACpD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,2CAAmC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAPD,0CAOC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,4BAAgB,CACxB,gKAAgK,UAAU,GAAG,CAC9K,CAAC;KACH;IACD,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC;IAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AATD,0CASC","sourcesContent":["import { BuildConfigError } from '../errors.js';\n\nimport { nullthrows } from './nullthrows.js';\n\nexport const BUILD_STEP_INPUT_EXPRESSION_REGEXP = /\\${\\s*inputs\\.([\\S]+)\\s*}/;\nexport const BUILD_STEP_OUTPUT_EXPRESSION_REGEXP = /\\${\\s*steps\\.([\\S]+)\\s*}/;\n\nexport function interpolateWithInputs(\n templateString: string,\n inputs: Record<string, string>\n): string {\n return interpolate(templateString, BUILD_STEP_INPUT_EXPRESSION_REGEXP, inputs);\n}\n\nexport function interpolateWithOutputs(\n templateString: string,\n fn: (path: string) => string\n): string {\n return interpolate(templateString, BUILD_STEP_OUTPUT_EXPRESSION_REGEXP, fn);\n}\n\nfunction interpolate(\n templateString: string,\n regex: RegExp,\n varsOrFn: Record<string, string> | ((key: string) => string)\n): string {\n const matched = templateString.match(new RegExp(regex, 'g'));\n if (!matched) {\n return templateString;\n }\n let result = templateString;\n for (const match of matched) {\n const [, key] = nullthrows(match.match(regex));\n const value = typeof varsOrFn === 'function' ? varsOrFn(key) : varsOrFn[key];\n result = result.replace(match, value);\n }\n return result;\n}\n\ninterface BuildOutputPath {\n stepId: string;\n outputId: string;\n}\n\nexport function findOutputPaths(templateString: string): BuildOutputPath[] {\n const result: BuildOutputPath[] = [];\n const matches = templateString.matchAll(new RegExp(BUILD_STEP_OUTPUT_EXPRESSION_REGEXP, 'g'));\n for (const match of matches) {\n result.push(parseOutputPath(match[1]));\n }\n return result;\n}\n\nexport function parseOutputPath(outputPath: string): BuildOutputPath {\n const splits = outputPath.split('.');\n if (splits.length !== 2) {\n throw new BuildConfigError(\n `Step output path must consist of two components joined with a dot, where first is the step ID, and second is the output name, e.g. \"step3.output1\". Passed: \"${outputPath}\"`\n );\n }\n const [stepId, outputId] = splits;\n return { stepId, outputId };\n}\n"]}
|
|
@@ -31,7 +31,6 @@ export type BuildFunctionCallConfig = {
|
|
|
31
31
|
export type BuildStepInputs = Record<string, string>;
|
|
32
32
|
export type BuildStepOutputs = BuildInputOutputParameters;
|
|
33
33
|
export interface BuildFunctionConfig {
|
|
34
|
-
id?: string;
|
|
35
34
|
inputs?: BuildFunctionInputs;
|
|
36
35
|
outputs?: BuildFunctionOutputs;
|
|
37
36
|
name?: string;
|
|
@@ -50,4 +49,4 @@ export declare function isBuildStepCommandRun(step: BuildStepConfig): step is Bu
|
|
|
50
49
|
export declare function isBuildStepBareCommandRun(step: BuildStepConfig): step is BuildStepBareCommandRun;
|
|
51
50
|
export declare function isBuildStepFunctionCall(step: BuildStepConfig): step is BuildStepFunctionCall;
|
|
52
51
|
export declare function isBuildStepBareFunctionCall(step: BuildStepConfig): step is BuildStepBareFunctionCall;
|
|
53
|
-
export declare function validateBuildConfig(rawConfig: object): BuildConfig;
|
|
52
|
+
export declare function validateBuildConfig(rawConfig: object, externalFunctionIds: string[]): BuildConfig;
|