@expo/steps 1.0.263 → 1.0.271
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 → dist}/AbstractConfigParser.d.ts +5 -5
- package/{dist_commonjs/AbstractConfigParser.cjs → dist/AbstractConfigParser.js} +13 -13
- package/dist/AbstractConfigParser.js.map +1 -0
- package/{dist_commonjs → dist}/BuildConfig.d.ts +4 -3
- package/{dist_commonjs/BuildConfig.cjs → dist/BuildConfig.js} +24 -22
- package/dist/BuildConfig.js.map +1 -0
- package/{dist_esm → dist}/BuildConfigParser.d.ts +5 -5
- package/{dist_commonjs/BuildConfigParser.cjs → dist/BuildConfigParser.js} +33 -32
- package/dist/BuildConfigParser.js.map +1 -0
- package/{dist_esm → dist}/BuildFunction.d.ts +9 -7
- package/{dist_commonjs/BuildFunction.cjs → dist/BuildFunction.js} +9 -7
- package/dist/BuildFunction.js.map +1 -0
- package/{dist_commonjs → dist}/BuildFunctionGroup.d.ts +4 -4
- package/{dist_commonjs/BuildFunctionGroup.cjs → dist/BuildFunctionGroup.js} +4 -4
- package/dist/BuildFunctionGroup.js.map +1 -0
- package/{dist_esm → dist}/BuildStep.d.ts +8 -6
- package/{dist_commonjs/BuildStep.cjs → dist/BuildStep.js} +31 -30
- package/dist/BuildStep.js.map +1 -0
- package/{dist_commonjs → dist}/BuildStepContext.d.ts +7 -3
- package/{dist_commonjs/BuildStepContext.cjs → dist/BuildStepContext.js} +17 -10
- package/dist/BuildStepContext.js.map +1 -0
- package/{dist_esm → dist}/BuildStepInput.d.ts +1 -1
- package/{dist_commonjs/BuildStepInput.cjs → dist/BuildStepInput.js} +12 -12
- package/dist/BuildStepInput.js.map +1 -0
- package/{dist_commonjs → dist}/BuildStepOutput.d.ts +1 -1
- package/{dist_commonjs/BuildStepOutput.cjs → dist/BuildStepOutput.js} +3 -3
- package/dist/BuildStepOutput.js.map +1 -0
- package/{dist_commonjs → dist}/BuildTemporaryFiles.d.ts +1 -1
- package/{dist_commonjs → dist}/BuildTemporaryFiles.js.map +1 -1
- package/{dist_commonjs → dist}/BuildWorkflow.d.ts +4 -3
- package/{dist_commonjs/BuildWorkflow.cjs → dist/BuildWorkflow.js} +17 -0
- package/dist/BuildWorkflow.js.map +1 -0
- package/{dist_commonjs → dist}/BuildWorkflowValidator.d.ts +1 -1
- package/{dist_commonjs/BuildWorkflowValidator.cjs → dist/BuildWorkflowValidator.js} +19 -19
- package/dist/BuildWorkflowValidator.js.map +1 -0
- package/dist/StepMetrics.d.ts +10 -0
- package/dist/StepMetrics.js +3 -0
- package/dist/StepMetrics.js.map +1 -0
- package/{dist_commonjs → dist}/StepsConfigParser.d.ts +5 -5
- package/{dist_commonjs/StepsConfigParser.cjs → dist/StepsConfigParser.js} +14 -13
- package/dist/StepsConfigParser.js.map +1 -0
- package/{dist_esm → dist}/cli/cli.d.ts +3 -3
- package/{dist_commonjs/cli/cli.cjs → dist/cli/cli.js} +6 -6
- package/dist/cli/cli.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/{dist_commonjs/index.cjs → dist/index.js} +30 -30
- package/dist/index.js.map +1 -0
- package/{dist_commonjs/interpolation.cjs → dist/interpolation.js} +3 -3
- package/dist/interpolation.js.map +1 -0
- package/{dist_commonjs/scripts/runCustomFunction.cjs → dist/scripts/runCustomFunction.js} +9 -9
- package/dist/scripts/runCustomFunction.js.map +1 -0
- package/{dist_commonjs → dist}/utils/customFunction.d.ts +4 -4
- package/{dist_commonjs/utils/customFunction.cjs → dist/utils/customFunction.js} +4 -6
- package/dist/utils/customFunction.js.map +1 -0
- package/{dist_commonjs/utils/shell/bin.cjs → dist/utils/shell/bin.js} +1 -3
- package/dist/utils/shell/bin.js.map +1 -0
- package/{dist_commonjs/utils/template.cjs → dist/utils/template.js} +7 -7
- package/dist/utils/template.js.map +1 -0
- package/package.json +12 -24
- package/dist_commonjs/AbstractConfigParser.js.map +0 -1
- package/dist_commonjs/BuildConfig.js.map +0 -1
- package/dist_commonjs/BuildConfigParser.d.ts +0 -33
- package/dist_commonjs/BuildConfigParser.js.map +0 -1
- package/dist_commonjs/BuildFunction.d.ts +0 -43
- package/dist_commonjs/BuildFunction.js.map +0 -1
- package/dist_commonjs/BuildFunctionGroup.js.map +0 -1
- package/dist_commonjs/BuildStep.d.ts +0 -98
- package/dist_commonjs/BuildStep.js.map +0 -1
- package/dist_commonjs/BuildStepContext.js.map +0 -1
- package/dist_commonjs/BuildStepInput.d.ts +0 -47
- package/dist_commonjs/BuildStepInput.js.map +0 -1
- package/dist_commonjs/BuildStepOutput.js.map +0 -1
- package/dist_commonjs/BuildWorkflow.js.map +0 -1
- package/dist_commonjs/BuildWorkflowValidator.js.map +0 -1
- package/dist_commonjs/StepsConfigParser.js.map +0 -1
- package/dist_commonjs/cli/cli.d.ts +0 -18
- package/dist_commonjs/cli/cli.js.map +0 -1
- package/dist_commonjs/index.d.ts +0 -18
- package/dist_commonjs/index.js.map +0 -1
- package/dist_commonjs/interpolation.js.map +0 -1
- package/dist_commonjs/scripts/runCustomFunction.js.map +0 -1
- package/dist_commonjs/utils/customFunction.js.map +0 -1
- package/dist_commonjs/utils/shell/bin.js.map +0 -1
- package/dist_commonjs/utils/template.js.map +0 -1
- package/dist_esm/AbstractConfigParser.d.ts +0 -23
- package/dist_esm/AbstractConfigParser.js +0 -61
- package/dist_esm/AbstractConfigParser.js.map +0 -1
- package/dist_esm/BuildConfig.d.ts +0 -79
- package/dist_esm/BuildConfig.js +0 -279
- package/dist_esm/BuildConfig.js.map +0 -1
- package/dist_esm/BuildConfigParser.js +0 -232
- package/dist_esm/BuildConfigParser.js.map +0 -1
- package/dist_esm/BuildFunction.js +0 -60
- package/dist_esm/BuildFunction.js.map +0 -1
- package/dist_esm/BuildFunctionGroup.d.ts +0 -23
- package/dist_esm/BuildFunctionGroup.js +0 -36
- package/dist_esm/BuildFunctionGroup.js.map +0 -1
- package/dist_esm/BuildRuntimePlatform.d.ts +0 -4
- package/dist_esm/BuildRuntimePlatform.js +0 -6
- package/dist_esm/BuildRuntimePlatform.js.map +0 -1
- package/dist_esm/BuildStep.js +0 -353
- package/dist_esm/BuildStep.js.map +0 -1
- package/dist_esm/BuildStepContext.d.ts +0 -82
- package/dist_esm/BuildStepContext.js +0 -200
- package/dist_esm/BuildStepContext.js.map +0 -1
- package/dist_esm/BuildStepEnv.d.ts +0 -1
- package/dist_esm/BuildStepEnv.js +0 -2
- package/dist_esm/BuildStepEnv.js.map +0 -1
- package/dist_esm/BuildStepInput.js +0 -150
- package/dist_esm/BuildStepInput.js.map +0 -1
- package/dist_esm/BuildStepOutput.d.ts +0 -33
- package/dist_esm/BuildStepOutput.js +0 -57
- package/dist_esm/BuildStepOutput.js.map +0 -1
- package/dist_esm/BuildTemporaryFiles.d.ts +0 -5
- package/dist_esm/BuildTemporaryFiles.js +0 -31
- package/dist_esm/BuildTemporaryFiles.js.map +0 -1
- package/dist_esm/BuildWorkflow.d.ts +0 -13
- package/dist_esm/BuildWorkflow.js +0 -38
- package/dist_esm/BuildWorkflow.js.map +0 -1
- package/dist_esm/BuildWorkflowValidator.d.ts +0 -10
- package/dist_esm/BuildWorkflowValidator.js +0 -121
- package/dist_esm/BuildWorkflowValidator.js.map +0 -1
- package/dist_esm/StepsConfigParser.d.ts +0 -24
- package/dist_esm/StepsConfigParser.js +0 -132
- package/dist_esm/StepsConfigParser.js.map +0 -1
- package/dist_esm/cli/cli.js +0 -61
- package/dist_esm/cli/cli.js.map +0 -1
- package/dist_esm/errors.d.ts +0 -24
- package/dist_esm/errors.js +0 -24
- package/dist_esm/errors.js.map +0 -1
- package/dist_esm/index.d.ts +0 -18
- package/dist_esm/index.js +0 -18
- package/dist_esm/index.js.map +0 -1
- package/dist_esm/interpolation.d.ts +0 -5
- package/dist_esm/interpolation.js +0 -26
- package/dist_esm/interpolation.js.map +0 -1
- package/dist_esm/scripts/runCustomFunction.d.ts +0 -1
- package/dist_esm/scripts/runCustomFunction.js +0 -100
- package/dist_esm/scripts/runCustomFunction.js.map +0 -1
- package/dist_esm/utils/customFunction.d.ts +0 -18
- package/dist_esm/utils/customFunction.js +0 -49
- package/dist_esm/utils/customFunction.js.map +0 -1
- package/dist_esm/utils/expodash/duplicates.d.ts +0 -1
- package/dist_esm/utils/expodash/duplicates.js +0 -14
- package/dist_esm/utils/expodash/duplicates.js.map +0 -1
- package/dist_esm/utils/expodash/uniq.d.ts +0 -1
- package/dist_esm/utils/expodash/uniq.js +0 -5
- package/dist_esm/utils/expodash/uniq.js.map +0 -1
- package/dist_esm/utils/hashFiles.d.ts +0 -6
- package/dist_esm/utils/hashFiles.js +0 -31
- package/dist_esm/utils/hashFiles.js.map +0 -1
- package/dist_esm/utils/jsepEval.d.ts +0 -1
- package/dist_esm/utils/jsepEval.js +0 -169
- package/dist_esm/utils/jsepEval.js.map +0 -1
- package/dist_esm/utils/nullthrows.d.ts +0 -1
- package/dist_esm/utils/nullthrows.js +0 -7
- package/dist_esm/utils/nullthrows.js.map +0 -1
- package/dist_esm/utils/shell/bin.d.ts +0 -1
- package/dist_esm/utils/shell/bin.js +0 -5
- package/dist_esm/utils/shell/bin.js.map +0 -1
- package/dist_esm/utils/shell/command.d.ts +0 -4
- package/dist_esm/utils/shell/command.js +0 -13
- package/dist_esm/utils/shell/command.js.map +0 -1
- package/dist_esm/utils/shell/spawn.d.ts +0 -15
- package/dist_esm/utils/shell/spawn.js +0 -16
- package/dist_esm/utils/shell/spawn.js.map +0 -1
- package/dist_esm/utils/template.d.ts +0 -19
- package/dist_esm/utils/template.js +0 -106
- package/dist_esm/utils/template.js.map +0 -1
- /package/{dist_commonjs → dist}/BuildRuntimePlatform.d.ts +0 -0
- /package/{dist_commonjs/BuildRuntimePlatform.cjs → dist/BuildRuntimePlatform.js} +0 -0
- /package/{dist_commonjs → dist}/BuildRuntimePlatform.js.map +0 -0
- /package/{dist_commonjs → dist}/BuildStepEnv.d.ts +0 -0
- /package/{dist_commonjs/BuildStepEnv.cjs → dist/BuildStepEnv.js} +0 -0
- /package/{dist_commonjs → dist}/BuildStepEnv.js.map +0 -0
- /package/{dist_commonjs/BuildTemporaryFiles.cjs → dist/BuildTemporaryFiles.js} +0 -0
- /package/{dist_commonjs → dist}/errors.d.ts +0 -0
- /package/{dist_commonjs/errors.cjs → dist/errors.js} +0 -0
- /package/{dist_commonjs → dist}/errors.js.map +0 -0
- /package/{dist_commonjs → dist}/interpolation.d.ts +0 -0
- /package/{dist_commonjs → dist}/scripts/runCustomFunction.d.ts +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/duplicates.d.ts +0 -0
- /package/{dist_commonjs/utils/expodash/duplicates.cjs → dist/utils/expodash/duplicates.js} +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/duplicates.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/uniq.d.ts +0 -0
- /package/{dist_commonjs/utils/expodash/uniq.cjs → dist/utils/expodash/uniq.js} +0 -0
- /package/{dist_commonjs → dist}/utils/expodash/uniq.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/hashFiles.d.ts +0 -0
- /package/{dist_commonjs/utils/hashFiles.cjs → dist/utils/hashFiles.js} +0 -0
- /package/{dist_commonjs → dist}/utils/hashFiles.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/jsepEval.d.ts +0 -0
- /package/{dist_commonjs/utils/jsepEval.cjs → dist/utils/jsepEval.js} +0 -0
- /package/{dist_commonjs → dist}/utils/jsepEval.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/nullthrows.d.ts +0 -0
- /package/{dist_commonjs/utils/nullthrows.cjs → dist/utils/nullthrows.js} +0 -0
- /package/{dist_commonjs → dist}/utils/nullthrows.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/shell/bin.d.ts +0 -0
- /package/{dist_commonjs → dist}/utils/shell/command.d.ts +0 -0
- /package/{dist_commonjs/utils/shell/command.cjs → dist/utils/shell/command.js} +0 -0
- /package/{dist_commonjs → dist}/utils/shell/command.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/shell/spawn.d.ts +0 -0
- /package/{dist_commonjs/utils/shell/spawn.cjs → dist/utils/shell/spawn.js} +0 -0
- /package/{dist_commonjs → dist}/utils/shell/spawn.js.map +0 -0
- /package/{dist_commonjs → dist}/utils/template.d.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BuildFunction, BuildFunctionById } from './BuildFunction
|
|
2
|
-
import { BuildFunctionGroup } from './BuildFunctionGroup
|
|
3
|
-
import { BuildStep } from './BuildStep
|
|
4
|
-
import { BuildStepGlobalContext } from './BuildStepContext
|
|
5
|
-
import { BuildWorkflow } from './BuildWorkflow
|
|
1
|
+
import { BuildFunction, BuildFunctionById } from './BuildFunction';
|
|
2
|
+
import { BuildFunctionGroup } from './BuildFunctionGroup';
|
|
3
|
+
import { BuildStep } from './BuildStep';
|
|
4
|
+
import { BuildStepGlobalContext } from './BuildStepContext';
|
|
5
|
+
import { BuildWorkflow } from './BuildWorkflow';
|
|
6
6
|
export declare abstract class AbstractConfigParser {
|
|
7
7
|
protected readonly ctx: BuildStepGlobalContext;
|
|
8
8
|
protected readonly externalFunctions?: BuildFunction[];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractConfigParser = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
4
|
+
const BuildWorkflow_1 = require("./BuildWorkflow");
|
|
5
|
+
const BuildWorkflowValidator_1 = require("./BuildWorkflowValidator");
|
|
6
|
+
const errors_1 = require("./errors");
|
|
7
|
+
const duplicates_1 = require("./utils/expodash/duplicates");
|
|
8
|
+
const uniq_1 = require("./utils/expodash/uniq");
|
|
9
9
|
class AbstractConfigParser {
|
|
10
10
|
constructor(ctx, { externalFunctions, externalFunctionGroups, }) {
|
|
11
11
|
this.ctx = ctx;
|
|
@@ -16,8 +16,8 @@ class AbstractConfigParser {
|
|
|
16
16
|
}
|
|
17
17
|
async parseAsync() {
|
|
18
18
|
const { buildSteps, buildFunctionById } = await this.parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync();
|
|
19
|
-
const workflow = new
|
|
20
|
-
await new
|
|
19
|
+
const workflow = new BuildWorkflow_1.BuildWorkflow(this.ctx, { buildSteps, buildFunctions: buildFunctionById });
|
|
20
|
+
await new BuildWorkflowValidator_1.BuildWorkflowValidator(workflow).validateAsync();
|
|
21
21
|
return workflow;
|
|
22
22
|
}
|
|
23
23
|
validateExternalFunctions(externalFunctions) {
|
|
@@ -25,11 +25,11 @@ class AbstractConfigParser {
|
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
27
|
const externalFunctionIds = externalFunctions.map((f) => f.getFullId());
|
|
28
|
-
const duplicatedExternalFunctionIds = (0,
|
|
28
|
+
const duplicatedExternalFunctionIds = (0, duplicates_1.duplicates)(externalFunctionIds);
|
|
29
29
|
if (duplicatedExternalFunctionIds.length === 0) {
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
-
throw new
|
|
32
|
+
throw new errors_1.BuildConfigError(`Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds
|
|
33
33
|
.map((id) => `"${id}"`)
|
|
34
34
|
.join(', ')}`);
|
|
35
35
|
}
|
|
@@ -38,11 +38,11 @@ class AbstractConfigParser {
|
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
const externalFunctionGroupIds = externalFunctionGroups.map((f) => f.getFullId());
|
|
41
|
-
const duplicatedExternalFunctionGroupIds = (0,
|
|
41
|
+
const duplicatedExternalFunctionGroupIds = (0, duplicates_1.duplicates)(externalFunctionGroupIds);
|
|
42
42
|
if (duplicatedExternalFunctionGroupIds.length === 0) {
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
throw new
|
|
45
|
+
throw new errors_1.BuildConfigError(`Provided external function groups with duplicated IDs: ${duplicatedExternalFunctionGroupIds
|
|
46
46
|
.map((id) => `"${id}"`)
|
|
47
47
|
.join(', ')}`);
|
|
48
48
|
}
|
|
@@ -51,14 +51,14 @@ class AbstractConfigParser {
|
|
|
51
51
|
return [];
|
|
52
52
|
}
|
|
53
53
|
const ids = this.externalFunctions.map((f) => f.getFullId());
|
|
54
|
-
return (0,
|
|
54
|
+
return (0, uniq_1.uniq)(ids);
|
|
55
55
|
}
|
|
56
56
|
getExternalFunctionGroupFullIds() {
|
|
57
57
|
if (this.externalFunctionGroups === undefined) {
|
|
58
58
|
return [];
|
|
59
59
|
}
|
|
60
60
|
const ids = this.externalFunctionGroups.map((f) => f.getFullId());
|
|
61
|
-
return (0,
|
|
61
|
+
return (0, uniq_1.uniq)(ids);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
exports.AbstractConfigParser = AbstractConfigParser;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractConfigParser.js","sourceRoot":"","sources":["../src/AbstractConfigParser.ts"],"names":[],"mappings":"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","sourcesContent":["import { BuildFunction, BuildFunctionById } from './BuildFunction';\nimport { BuildFunctionGroup } from './BuildFunctionGroup';\nimport { BuildStep } from './BuildStep';\nimport { BuildStepGlobalContext } from './BuildStepContext';\nimport { BuildWorkflow } from './BuildWorkflow';\nimport { BuildWorkflowValidator } from './BuildWorkflowValidator';\nimport { BuildConfigError } from './errors';\nimport { duplicates } from './utils/expodash/duplicates';\nimport { uniq } from './utils/expodash/uniq';\n\nexport abstract class AbstractConfigParser {\n protected readonly externalFunctions?: BuildFunction[];\n protected readonly externalFunctionGroups?: BuildFunctionGroup[];\n\n constructor(\n protected readonly ctx: BuildStepGlobalContext,\n {\n externalFunctions,\n externalFunctionGroups,\n }: {\n externalFunctions?: BuildFunction[];\n externalFunctionGroups?: BuildFunctionGroup[];\n }\n ) {\n this.validateExternalFunctions(externalFunctions);\n this.validateExternalFunctionGroups(externalFunctionGroups);\n\n this.externalFunctions = externalFunctions;\n this.externalFunctionGroups = externalFunctionGroups;\n }\n\n public async parseAsync(): Promise<BuildWorkflow> {\n const { buildSteps, buildFunctionById } =\n await this.parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync();\n const workflow = new BuildWorkflow(this.ctx, { buildSteps, buildFunctions: buildFunctionById });\n await new BuildWorkflowValidator(workflow).validateAsync();\n return workflow;\n }\n\n protected abstract parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync(): Promise<{\n buildSteps: BuildStep[];\n buildFunctionById: BuildFunctionById;\n }>;\n\n private validateExternalFunctions(externalFunctions?: BuildFunction[]): void {\n if (externalFunctions === undefined) {\n return;\n }\n const externalFunctionIds = externalFunctions.map((f) => f.getFullId());\n const duplicatedExternalFunctionIds = duplicates(externalFunctionIds);\n if (duplicatedExternalFunctionIds.length === 0) {\n return;\n }\n throw new BuildConfigError(\n `Provided external functions with duplicated IDs: ${duplicatedExternalFunctionIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n private validateExternalFunctionGroups(externalFunctionGroups?: BuildFunctionGroup[]): void {\n if (externalFunctionGroups === undefined) {\n return;\n }\n const externalFunctionGroupIds = externalFunctionGroups.map((f) => f.getFullId());\n const duplicatedExternalFunctionGroupIds = duplicates(externalFunctionGroupIds);\n if (duplicatedExternalFunctionGroupIds.length === 0) {\n return;\n }\n throw new BuildConfigError(\n `Provided external function groups with duplicated IDs: ${duplicatedExternalFunctionGroupIds\n .map((id) => `\"${id}\"`)\n .join(', ')}`\n );\n }\n\n protected getExternalFunctionFullIds(): string[] {\n if (this.externalFunctions === undefined) {\n return [];\n }\n const ids = this.externalFunctions.map((f) => f.getFullId());\n return uniq(ids);\n }\n\n protected getExternalFunctionGroupFullIds(): string[] {\n if (this.externalFunctionGroups === undefined) {\n return [];\n }\n const ids = this.externalFunctionGroups.map((f) => f.getFullId());\n return uniq(ids);\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Joi from 'joi';
|
|
2
|
-
import { BuildRuntimePlatform } from './BuildRuntimePlatform
|
|
3
|
-
import { BuildStepInputValueTypeName, BuildStepInputValueType } from './BuildStepInput
|
|
4
|
-
import { BuildStepEnv } from './BuildStepEnv
|
|
2
|
+
import { BuildRuntimePlatform } from './BuildRuntimePlatform';
|
|
3
|
+
import { BuildStepInputValueTypeName, BuildStepInputValueType } from './BuildStepInput';
|
|
4
|
+
import { BuildStepEnv } from './BuildStepEnv';
|
|
5
5
|
export type BuildFunctions = Record<string, BuildFunctionConfig>;
|
|
6
6
|
interface BuildFunctionsConfigFile {
|
|
7
7
|
configFilesToImport?: string[];
|
|
@@ -36,6 +36,7 @@ export type BuildFunctionCallConfig = {
|
|
|
36
36
|
env?: BuildStepEnv;
|
|
37
37
|
if?: string;
|
|
38
38
|
timeout_minutes?: number;
|
|
39
|
+
__metrics_id?: string;
|
|
39
40
|
};
|
|
40
41
|
export type BuildStepInputs = Record<string, unknown>;
|
|
41
42
|
export type BuildStepOutputs = (string | {
|
|
@@ -19,10 +19,10 @@ const promises_1 = __importDefault(require("fs/promises"));
|
|
|
19
19
|
const path_1 = __importDefault(require("path"));
|
|
20
20
|
const joi_1 = __importDefault(require("joi"));
|
|
21
21
|
const yaml_1 = __importDefault(require("yaml"));
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const
|
|
22
|
+
const errors_1 = require("./errors");
|
|
23
|
+
const BuildRuntimePlatform_1 = require("./BuildRuntimePlatform");
|
|
24
|
+
const BuildStepInput_1 = require("./BuildStepInput");
|
|
25
|
+
const template_1 = require("./utils/template");
|
|
26
26
|
const BuildFunctionInputsSchema = joi_1.default.array().items(joi_1.default.alternatives().conditional(joi_1.default.ref('.'), {
|
|
27
27
|
is: joi_1.default.string(),
|
|
28
28
|
then: joi_1.default.string().required(),
|
|
@@ -35,46 +35,46 @@ const BuildFunctionInputsSchema = joi_1.default.array().items(joi_1.default.alte
|
|
|
35
35
|
}),
|
|
36
36
|
})
|
|
37
37
|
.when('allowedValueType', {
|
|
38
|
-
is:
|
|
38
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.STRING,
|
|
39
39
|
then: joi_1.default.string().allow(''),
|
|
40
40
|
})
|
|
41
41
|
.when('allowedValueType', {
|
|
42
|
-
is:
|
|
43
|
-
then: joi_1.default.alternatives(joi_1.default.boolean(), joi_1.default.string().pattern(
|
|
42
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.BOOLEAN,
|
|
43
|
+
then: joi_1.default.alternatives(joi_1.default.boolean(), joi_1.default.string().pattern(template_1.BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX, 'context or output reference regex pattern')).messages({
|
|
44
44
|
'alternatives.types': '{{#label}} must be a boolean or reference to output or context value',
|
|
45
45
|
}),
|
|
46
46
|
})
|
|
47
47
|
.when('allowedValueType', {
|
|
48
|
-
is:
|
|
49
|
-
then: joi_1.default.alternatives(joi_1.default.number(), joi_1.default.string().pattern(
|
|
48
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.NUMBER,
|
|
49
|
+
then: joi_1.default.alternatives(joi_1.default.number(), joi_1.default.string().pattern(template_1.BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX, 'context or output reference regex pattern')).messages({
|
|
50
50
|
'alternatives.types': '{{#label}} must be a number or reference to output or context value',
|
|
51
51
|
}),
|
|
52
52
|
})
|
|
53
53
|
.when('allowedValueType', {
|
|
54
|
-
is:
|
|
55
|
-
then: joi_1.default.alternatives(joi_1.default.object(), joi_1.default.string().pattern(
|
|
54
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.JSON,
|
|
55
|
+
then: joi_1.default.alternatives(joi_1.default.object(), joi_1.default.string().pattern(template_1.BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX, 'context or output reference regex pattern')).messages({
|
|
56
56
|
'alternatives.types': '{{#label}} must be a object or reference to output or context value',
|
|
57
57
|
}),
|
|
58
58
|
}),
|
|
59
59
|
allowedValues: joi_1.default.when('allowedValueType', {
|
|
60
|
-
is:
|
|
60
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.STRING,
|
|
61
61
|
then: joi_1.default.array().items(joi_1.default.string().allow('')),
|
|
62
62
|
})
|
|
63
63
|
.when('allowedValueType', {
|
|
64
|
-
is:
|
|
64
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.BOOLEAN,
|
|
65
65
|
then: joi_1.default.array().items(joi_1.default.boolean()),
|
|
66
66
|
})
|
|
67
67
|
.when('allowedValueType', {
|
|
68
|
-
is:
|
|
68
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.NUMBER,
|
|
69
69
|
then: joi_1.default.array().items(joi_1.default.number()),
|
|
70
70
|
})
|
|
71
71
|
.when('allowedValueType', {
|
|
72
|
-
is:
|
|
72
|
+
is: BuildStepInput_1.BuildStepInputValueTypeName.JSON,
|
|
73
73
|
then: joi_1.default.array().items(joi_1.default.object()),
|
|
74
74
|
}),
|
|
75
75
|
allowedValueType: joi_1.default.string()
|
|
76
|
-
.valid(...Object.values(
|
|
77
|
-
.default(
|
|
76
|
+
.valid(...Object.values(BuildStepInput_1.BuildStepInputValueTypeName))
|
|
77
|
+
.default(BuildStepInput_1.BuildStepInputValueTypeName.STRING),
|
|
78
78
|
required: joi_1.default.boolean(),
|
|
79
79
|
})
|
|
80
80
|
.rename('allowed_values', 'allowedValues')
|
|
@@ -95,6 +95,8 @@ const BuildFunctionCallSchema = joi_1.default.object({
|
|
|
95
95
|
env: joi_1.default.object().pattern(joi_1.default.string(), joi_1.default.string().allow('')),
|
|
96
96
|
if: joi_1.default.string(),
|
|
97
97
|
timeout_minutes: joi_1.default.number().positive(),
|
|
98
|
+
// Internal field for metrics collection. Not documented publicly.
|
|
99
|
+
__metrics_id: joi_1.default.string(),
|
|
98
100
|
}).rename('working_directory', 'workingDirectory');
|
|
99
101
|
const BuildStepConfigSchema = joi_1.default.any()
|
|
100
102
|
.invalid(null)
|
|
@@ -119,7 +121,7 @@ const BuildStepConfigSchema = joi_1.default.any()
|
|
|
119
121
|
});
|
|
120
122
|
const BuildFunctionConfigSchema = joi_1.default.object({
|
|
121
123
|
name: joi_1.default.string(),
|
|
122
|
-
supportedRuntimePlatforms: joi_1.default.array().items(...Object.values(
|
|
124
|
+
supportedRuntimePlatforms: joi_1.default.array().items(...Object.values(BuildRuntimePlatform_1.BuildRuntimePlatform)),
|
|
123
125
|
inputs: BuildFunctionInputsSchema,
|
|
124
126
|
outputs: BuildStepOutputsSchema,
|
|
125
127
|
command: joi_1.default.string(),
|
|
@@ -193,7 +195,7 @@ async function importFunctionsAsync(baseConfigPath, configPathsToImport) {
|
|
|
193
195
|
}
|
|
194
196
|
}
|
|
195
197
|
catch (err) {
|
|
196
|
-
if (err instanceof
|
|
198
|
+
if (err instanceof errors_1.BuildConfigError) {
|
|
197
199
|
errors.push(err);
|
|
198
200
|
}
|
|
199
201
|
else {
|
|
@@ -202,7 +204,7 @@ async function importFunctionsAsync(baseConfigPath, configPathsToImport) {
|
|
|
202
204
|
}
|
|
203
205
|
}
|
|
204
206
|
if (errors.length > 0) {
|
|
205
|
-
throw new
|
|
207
|
+
throw new errors_1.BuildWorkflowError(`Detected build config errors in imported files.`, errors);
|
|
206
208
|
}
|
|
207
209
|
return importedFunctions;
|
|
208
210
|
}
|
|
@@ -221,7 +223,7 @@ function validateConfig(schema, config, configFilePath) {
|
|
|
221
223
|
});
|
|
222
224
|
if (error) {
|
|
223
225
|
const errorMessage = error.details.map(({ message }) => message).join(', ');
|
|
224
|
-
throw new
|
|
226
|
+
throw new errors_1.BuildConfigError(errorMessage, {
|
|
225
227
|
cause: error,
|
|
226
228
|
...(configFilePath && { metadata: { configFilePath } }),
|
|
227
229
|
});
|
|
@@ -278,7 +280,7 @@ function validateAllFunctionsExist(config, { externalFunctionIds = [], externalF
|
|
|
278
280
|
!externalFunctionGroupsIdsSet.has(calledFunctionOrFunctionGroup));
|
|
279
281
|
});
|
|
280
282
|
if (nonExistentFunctionsOrFunctionGroups.length > 0) {
|
|
281
|
-
throw new
|
|
283
|
+
throw new errors_1.BuildConfigError(`Calling non-existent functions: ${nonExistentFunctionsOrFunctionGroups
|
|
282
284
|
.map((f) => `"${f}"`)
|
|
283
285
|
.join(', ')}.`);
|
|
284
286
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuildConfig.js","sourceRoot":"","sources":["../src/BuildConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport Joi from 'joi';\nimport YAML from 'yaml';\n\nimport { BuildConfigError, BuildWorkflowError } from './errors';\nimport { BuildRuntimePlatform } from './BuildRuntimePlatform';\nimport { BuildStepInputValueTypeName, BuildStepInputValueType } from './BuildStepInput';\nimport { BuildStepEnv } from './BuildStepEnv';\nimport { BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX } from './utils/template';\n\nexport type BuildFunctions = Record<string, BuildFunctionConfig>;\n\ninterface BuildFunctionsConfigFile {\n configFilesToImport?: string[];\n functions?: BuildFunctions;\n}\n\nexport interface BuildConfig extends BuildFunctionsConfigFile {\n build: {\n name?: string;\n steps: BuildStepConfig[];\n };\n}\n\nexport type BuildStepConfig =\n | BuildStepCommandRun\n | BuildStepBareCommandRun\n | BuildStepFunctionCall\n | BuildStepBareFunctionOrFunctionGroupCall;\n\nexport type BuildStepCommandRun = {\n run: BuildFunctionCallConfig & {\n outputs?: BuildStepOutputs;\n command: string;\n };\n};\nexport type BuildStepBareCommandRun = { run: string };\nexport type BuildStepFunctionCall = {\n [functionId: string]: BuildFunctionCallConfig;\n};\nexport type BuildStepBareFunctionOrFunctionGroupCall = string;\n\nexport type BuildFunctionCallConfig = {\n id?: string;\n inputs?: BuildStepInputs;\n name?: string;\n workingDirectory?: string;\n shell?: string;\n env?: BuildStepEnv;\n if?: string;\n timeout_minutes?: number;\n // Internal field for metrics collection. Not documented publicly.\n __metrics_id?: string;\n};\n\nexport type BuildStepInputs = Record<string, unknown>;\nexport type BuildStepOutputs = (\n | string\n | {\n name: string;\n required?: boolean;\n }\n)[];\n\nexport interface BuildFunctionConfig {\n inputs?: BuildFunctionInputs;\n outputs?: BuildFunctionOutputs;\n name?: string;\n supportedRuntimePlatforms?: BuildRuntimePlatform[];\n shell?: string;\n command?: string;\n path?: string;\n}\n\nexport type BuildFunctionInputs = (\n | string\n | {\n name: string;\n defaultValue?: BuildStepInputValueType;\n allowedValues?: BuildStepInputValueType[];\n required?: boolean;\n allowedValueType: BuildStepInputValueTypeName;\n }\n)[];\nexport type BuildFunctionOutputs = BuildStepOutputs;\n\nconst BuildFunctionInputsSchema = Joi.array().items(\n Joi.alternatives().conditional(Joi.ref('.'), {\n is: Joi.string(),\n then: Joi.string().required(),\n otherwise: Joi.object({\n name: Joi.string().required(),\n defaultValue: Joi.when('allowedValues', {\n is: Joi.exist(),\n then: Joi.valid(Joi.in('allowedValues')).messages({\n 'any.only': '{{#label}} must be one of allowed values',\n }),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.STRING,\n then: Joi.string().allow(''),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.BOOLEAN,\n then: Joi.alternatives(\n Joi.boolean(),\n Joi.string().pattern(\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n 'context or output reference regex pattern'\n )\n ).messages({\n 'alternatives.types':\n '{{#label}} must be a boolean or reference to output or context value',\n }),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.NUMBER,\n then: Joi.alternatives(\n Joi.number(),\n Joi.string().pattern(\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n 'context or output reference regex pattern'\n )\n ).messages({\n 'alternatives.types':\n '{{#label}} must be a number or reference to output or context value',\n }),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.JSON,\n then: Joi.alternatives(\n Joi.object(),\n Joi.string().pattern(\n BUILD_STEP_OR_BUILD_GLOBAL_CONTEXT_REFERENCE_REGEX,\n 'context or output reference regex pattern'\n )\n ).messages({\n 'alternatives.types':\n '{{#label}} must be a object or reference to output or context value',\n }),\n }),\n allowedValues: Joi.when('allowedValueType', {\n is: BuildStepInputValueTypeName.STRING,\n then: Joi.array().items(Joi.string().allow('')),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.BOOLEAN,\n then: Joi.array().items(Joi.boolean()),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.NUMBER,\n then: Joi.array().items(Joi.number()),\n })\n .when('allowedValueType', {\n is: BuildStepInputValueTypeName.JSON,\n then: Joi.array().items(Joi.object()),\n }),\n allowedValueType: Joi.string()\n .valid(...Object.values(BuildStepInputValueTypeName))\n .default(BuildStepInputValueTypeName.STRING),\n required: Joi.boolean(),\n })\n .rename('allowed_values', 'allowedValues')\n .rename('default_value', 'defaultValue')\n .rename('type', 'allowedValueType')\n .required(),\n })\n);\n\nconst BuildStepOutputsSchema = Joi.array().items(\n Joi.alternatives().try(\n Joi.string().required(),\n Joi.object({\n name: Joi.string().required(),\n required: Joi.boolean(),\n }).required()\n )\n);\n\nconst BuildFunctionCallSchema = Joi.object({\n id: Joi.string(),\n inputs: Joi.object().pattern(\n Joi.string(),\n Joi.alternatives().try(Joi.string().allow(''), Joi.boolean(), Joi.number(), Joi.object())\n ),\n name: Joi.string(),\n workingDirectory: Joi.string(),\n shell: Joi.string(),\n env: Joi.object().pattern(Joi.string(), Joi.string().allow('')),\n if: Joi.string(),\n timeout_minutes: Joi.number().positive(),\n // Internal field for metrics collection. Not documented publicly.\n __metrics_id: Joi.string(),\n}).rename('working_directory', 'workingDirectory');\n\nconst BuildStepConfigSchema = Joi.any<BuildStepConfig>()\n .invalid(null)\n .when(\n Joi.object().pattern(\n Joi.string().disallow('run').required(),\n Joi.object().unknown().required()\n ),\n {\n then: Joi.object().pattern(\n Joi.string().disallow('run').min(1).required(),\n BuildFunctionCallSchema.required(),\n { matches: Joi.array().length(1) }\n ),\n }\n )\n .when(Joi.object({ run: Joi.object().unknown().required() }), {\n then: Joi.object({\n run: BuildFunctionCallSchema.keys({\n outputs: BuildStepOutputsSchema,\n command: Joi.string().required(),\n }),\n }),\n })\n .when(Joi.object({ run: Joi.string().required() }), {\n then: Joi.object({\n run: Joi.string().min(1).required(),\n }),\n })\n .when(Joi.string(), {\n then: Joi.string().min(1),\n });\n\nconst BuildFunctionConfigSchema = Joi.object({\n name: Joi.string(),\n supportedRuntimePlatforms: Joi.array().items(...Object.values(BuildRuntimePlatform)),\n inputs: BuildFunctionInputsSchema,\n outputs: BuildStepOutputsSchema,\n command: Joi.string(),\n path: Joi.string(),\n shell: Joi.string(),\n})\n .rename('supported_platforms', 'supportedRuntimePlatforms')\n .xor('command', 'path')\n .nand('command', 'path');\n\nexport const BuildFunctionsConfigFileSchema = Joi.object<BuildFunctionsConfigFile>({\n configFilesToImport: Joi.array().items(Joi.string().pattern(/\\.y(a)?ml$/)),\n functions: Joi.object().pattern(\n Joi.string()\n .pattern(/^[\\w-]+$/, 'function names')\n .min(1)\n .required()\n .disallow('run'),\n BuildFunctionConfigSchema.required()\n ),\n})\n .rename('import', 'configFilesToImport')\n .required();\n\nexport const BuildConfigSchema = BuildFunctionsConfigFileSchema.append<BuildConfig>({\n build: Joi.object({\n name: Joi.string(),\n steps: Joi.array().items(BuildStepConfigSchema.required()).required(),\n }).required(),\n}).required();\n\ninterface BuildConfigValidationParams {\n externalFunctionIds?: string[];\n externalFunctionGroupsIds?: string[];\n skipNamespacedFunctionsOrFunctionGroupsCheck?: boolean;\n}\n\nexport async function readAndValidateBuildConfigFromPathAsync(\n configPath: string,\n params: BuildConfigValidationParams = {}\n): Promise<BuildConfig> {\n const rawConfig = await readRawBuildConfigAsync(configPath);\n\n const config = validateConfig(BuildConfigSchema, rawConfig);\n for (const functionName in config.functions) {\n const customFunctionPath = config.functions[functionName].path;\n if (customFunctionPath) {\n config.functions[functionName].path = maybeResolveCustomFunctionRelativePath(\n path.dirname(configPath),\n customFunctionPath\n );\n }\n }\n\n const importedFunctions = await importFunctionsAsync(configPath, config.configFilesToImport);\n mergeConfigWithImportedFunctions(config, importedFunctions);\n validateAllFunctionsExist(config, params);\n return config;\n}\n\nasync function importFunctionsAsync(\n baseConfigPath: string,\n configPathsToImport?: string[]\n): Promise<BuildFunctions> {\n if (!configPathsToImport) {\n return {};\n }\n\n const baseConfigDir = path.dirname(baseConfigPath);\n\n const errors: BuildConfigError[] = [];\n const importedFunctions: BuildFunctions = {};\n // this is a set of visited files identified by ABSOLUTE paths\n const visitedFiles = new Set<string>([baseConfigPath]);\n const configFilesToVisit = (configPathsToImport ?? []).map((childConfigRelativePath) =>\n path.resolve(baseConfigDir, childConfigRelativePath)\n );\n while (configFilesToVisit.length > 0) {\n const childConfigPath = configFilesToVisit.shift();\n assert(childConfigPath, 'Guaranteed by loop condition');\n if (visitedFiles.has(childConfigPath)) {\n continue;\n }\n visitedFiles.add(childConfigPath);\n try {\n const childConfig = await readAndValidateBuildFunctionsConfigFileAsync(childConfigPath);\n const childDir = path.dirname(childConfigPath);\n for (const functionName in childConfig.functions) {\n if (!(functionName in importedFunctions)) {\n const f = childConfig.functions[functionName];\n if (f.path) {\n f.path = maybeResolveCustomFunctionRelativePath(childDir, f.path);\n }\n importedFunctions[functionName] = f;\n }\n }\n if (childConfig.configFilesToImport) {\n configFilesToVisit.push(\n ...childConfig.configFilesToImport.map((relativePath) =>\n path.resolve(childDir, relativePath)\n )\n );\n }\n } catch (err) {\n if (err instanceof BuildConfigError) {\n errors.push(err);\n } else {\n throw err;\n }\n }\n }\n if (errors.length > 0) {\n throw new BuildWorkflowError(`Detected build config errors in imported files.`, errors);\n }\n return importedFunctions;\n}\n\nexport async function readAndValidateBuildFunctionsConfigFileAsync(\n configPath: string\n): Promise<BuildFunctionsConfigFile> {\n const rawConfig = await readRawBuildConfigAsync(configPath);\n return validateConfig(BuildFunctionsConfigFileSchema, rawConfig);\n}\n\nexport async function readRawBuildConfigAsync(configPath: string): Promise<any> {\n const contents = await fs.readFile(configPath, 'utf-8');\n return YAML.parse(contents);\n}\n\nexport function validateConfig<T>(\n schema: Joi.ObjectSchema<T>,\n config: object,\n configFilePath?: string\n): T {\n const { error, value } = schema.validate(config, {\n allowUnknown: false,\n abortEarly: false,\n });\n if (error) {\n const errorMessage = error.details.map(({ message }) => message).join(', ');\n throw new BuildConfigError(errorMessage, {\n cause: error,\n ...(configFilePath && { metadata: { configFilePath } }),\n });\n }\n return value;\n}\n\nexport function mergeConfigWithImportedFunctions(\n config: BuildConfig,\n importedFunctions: BuildFunctions\n): void {\n if (Object.keys(importedFunctions).length === 0) {\n return;\n }\n config.functions = config.functions ?? {};\n for (const functionName in importedFunctions) {\n if (!(functionName in config.functions)) {\n config.functions[functionName] = importedFunctions[functionName];\n }\n }\n}\n\nexport function isBuildStepCommandRun(step: BuildStepConfig): step is BuildStepCommandRun {\n return Boolean(step) && typeof step === 'object' && typeof step.run === 'object';\n}\n\nexport function isBuildStepBareCommandRun(step: BuildStepConfig): step is BuildStepBareCommandRun {\n return Boolean(step) && typeof step === 'object' && typeof step.run === 'string';\n}\n\nexport function isBuildStepFunctionCall(step: BuildStepConfig): step is BuildStepFunctionCall {\n return Boolean(step) && typeof step === 'object' && !('run' in step);\n}\n\nexport function isBuildStepBareFunctionOrFunctionGroupCall(\n step: BuildStepConfig\n): step is BuildStepBareFunctionOrFunctionGroupCall {\n return typeof step === 'string';\n}\n\nexport function validateAllFunctionsExist(\n config: BuildConfig,\n {\n externalFunctionIds = [],\n externalFunctionGroupsIds = [],\n skipNamespacedFunctionsOrFunctionGroupsCheck,\n }: BuildConfigValidationParams\n): void {\n const calledFunctionsOrFunctionGroupsSet = new Set<string>();\n for (const step of config.build.steps) {\n if (typeof step === 'string') {\n calledFunctionsOrFunctionGroupsSet.add(step);\n } else if (step !== null && !('run' in step)) {\n const keys = Object.keys(step);\n assert(\n keys.length === 1,\n 'There must be at most one function call in the step (enforced by joi).'\n );\n calledFunctionsOrFunctionGroupsSet.add(keys[0]);\n }\n }\n const calledFunctionsOrFunctionGroup = Array.from(calledFunctionsOrFunctionGroupsSet);\n const externalFunctionIdsSet = new Set(externalFunctionIds);\n const externalFunctionGroupsIdsSet = new Set(externalFunctionGroupsIds);\n const nonExistentFunctionsOrFunctionGroups = calledFunctionsOrFunctionGroup.filter(\n (calledFunctionOrFunctionGroup) => {\n if (\n isFullIdNamespaced(calledFunctionOrFunctionGroup) &&\n skipNamespacedFunctionsOrFunctionGroupsCheck\n ) {\n return false;\n }\n return (\n !(calledFunctionOrFunctionGroup in (config.functions ?? {})) &&\n !externalFunctionIdsSet.has(calledFunctionOrFunctionGroup) &&\n !externalFunctionGroupsIdsSet.has(calledFunctionOrFunctionGroup)\n );\n }\n );\n if (nonExistentFunctionsOrFunctionGroups.length > 0) {\n throw new BuildConfigError(\n `Calling non-existent functions: ${nonExistentFunctionsOrFunctionGroups\n .map((f) => `\"${f}\"`)\n .join(', ')}.`\n );\n }\n}\n\nfunction maybeResolveCustomFunctionRelativePath(dir: string, customFunctionPath: string): string {\n if (!path.isAbsolute(customFunctionPath)) {\n return path.resolve(dir, customFunctionPath);\n }\n return customFunctionPath;\n}\n\nfunction isFullIdNamespaced(fullId: string): boolean {\n return fullId.includes('/');\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BuildFunction, BuildFunctionById } from './BuildFunction
|
|
2
|
-
import { BuildStep } from './BuildStep
|
|
3
|
-
import { BuildStepGlobalContext } from './BuildStepContext
|
|
4
|
-
import { BuildFunctionGroup } from './BuildFunctionGroup
|
|
5
|
-
import { AbstractConfigParser } from './AbstractConfigParser
|
|
1
|
+
import { BuildFunction, BuildFunctionById } from './BuildFunction';
|
|
2
|
+
import { BuildStep } from './BuildStep';
|
|
3
|
+
import { BuildStepGlobalContext } from './BuildStepContext';
|
|
4
|
+
import { BuildFunctionGroup } from './BuildFunctionGroup';
|
|
5
|
+
import { AbstractConfigParser } from './AbstractConfigParser';
|
|
6
6
|
export declare class BuildConfigParser extends AbstractConfigParser {
|
|
7
7
|
private readonly configPath;
|
|
8
8
|
constructor(ctx: BuildStepGlobalContext, { configPath, externalFunctions, externalFunctionGroups, }: {
|
|
@@ -5,15 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.BuildConfigParser = void 0;
|
|
7
7
|
const assert_1 = __importDefault(require("assert"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
class BuildConfigParser extends
|
|
8
|
+
const BuildConfig_1 = require("./BuildConfig");
|
|
9
|
+
const BuildFunction_1 = require("./BuildFunction");
|
|
10
|
+
const BuildStep_1 = require("./BuildStep");
|
|
11
|
+
const BuildStepInput_1 = require("./BuildStepInput");
|
|
12
|
+
const BuildStepOutput_1 = require("./BuildStepOutput");
|
|
13
|
+
const errors_1 = require("./errors");
|
|
14
|
+
const BuildFunctionGroup_1 = require("./BuildFunctionGroup");
|
|
15
|
+
const AbstractConfigParser_1 = require("./AbstractConfigParser");
|
|
16
|
+
class BuildConfigParser extends AbstractConfigParser_1.AbstractConfigParser {
|
|
17
17
|
constructor(ctx, { configPath, externalFunctions, externalFunctionGroups, }) {
|
|
18
18
|
super(ctx, {
|
|
19
19
|
externalFunctions,
|
|
@@ -23,13 +23,13 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
23
23
|
}
|
|
24
24
|
async parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync() {
|
|
25
25
|
var _a;
|
|
26
|
-
const config = await (0,
|
|
26
|
+
const config = await (0, BuildConfig_1.readAndValidateBuildConfigFromPathAsync)(this.configPath, {
|
|
27
27
|
externalFunctionIds: this.getExternalFunctionFullIds(),
|
|
28
28
|
externalFunctionGroupsIds: this.getExternalFunctionGroupFullIds(),
|
|
29
29
|
});
|
|
30
30
|
const configBuildFunctions = this.createBuildFunctionsFromConfig(config.functions);
|
|
31
31
|
const buildFunctions = this.mergeBuildFunctionsWithExternal(configBuildFunctions, this.externalFunctions);
|
|
32
|
-
const buildFunctionGroups = (0,
|
|
32
|
+
const buildFunctionGroups = (0, BuildFunctionGroup_1.createBuildFunctionGroupByIdMapping)((_a = this.externalFunctionGroups) !== null && _a !== void 0 ? _a : []);
|
|
33
33
|
const buildSteps = [];
|
|
34
34
|
for (const stepConfig of config.build.steps) {
|
|
35
35
|
buildSteps.push(...this.createBuildStepFromConfig(stepConfig, buildFunctions, buildFunctionGroups));
|
|
@@ -40,30 +40,30 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
createBuildStepFromConfig(buildStepConfig, buildFunctions, buildFunctionGroups) {
|
|
43
|
-
if ((0,
|
|
43
|
+
if ((0, BuildConfig_1.isBuildStepCommandRun)(buildStepConfig)) {
|
|
44
44
|
return [this.createBuildStepFromBuildStepCommandRun(buildStepConfig)];
|
|
45
45
|
}
|
|
46
|
-
else if ((0,
|
|
46
|
+
else if ((0, BuildConfig_1.isBuildStepBareCommandRun)(buildStepConfig)) {
|
|
47
47
|
return [this.createBuildStepFromBuildStepBareCommandRun(buildStepConfig)];
|
|
48
48
|
}
|
|
49
|
-
else if ((0,
|
|
49
|
+
else if ((0, BuildConfig_1.isBuildStepBareFunctionOrFunctionGroupCall)(buildStepConfig)) {
|
|
50
50
|
return this.createBuildStepsFromBareBuildStepFunctionOrBareBuildStepFunctionGroupCall(buildFunctions, buildFunctionGroups, buildStepConfig);
|
|
51
51
|
}
|
|
52
52
|
else if (buildStepConfig !== null) {
|
|
53
53
|
return this.createBuildStepsFromBuildStepFunctionOrBuildStepFunctionGroupCall(buildFunctions, buildFunctionGroups, buildStepConfig);
|
|
54
54
|
}
|
|
55
55
|
else {
|
|
56
|
-
throw new
|
|
56
|
+
throw new errors_1.BuildConfigError('Invalid build step configuration detected. Build step cannot be empty.');
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
createBuildStepFromBuildStepCommandRun({ run }) {
|
|
60
|
-
const { id: maybeId, inputs: inputsConfig, outputs: outputsConfig, name, workingDirectory, shell, command, env, if: ifCondition, timeout_minutes, } = run;
|
|
61
|
-
const id =
|
|
62
|
-
const displayName =
|
|
60
|
+
const { id: maybeId, inputs: inputsConfig, outputs: outputsConfig, name, workingDirectory, shell, command, env, if: ifCondition, timeout_minutes, __metrics_id, } = run;
|
|
61
|
+
const id = BuildStep_1.BuildStep.getNewId(maybeId);
|
|
62
|
+
const displayName = BuildStep_1.BuildStep.getDisplayName({ id, name, command });
|
|
63
63
|
const inputs = inputsConfig && this.createBuildStepInputsFromDefinition(inputsConfig, displayName);
|
|
64
64
|
const outputs = outputsConfig && this.createBuildStepOutputsFromDefinition(outputsConfig, displayName);
|
|
65
65
|
const timeoutMs = timeout_minutes !== undefined ? timeout_minutes * 60 * 1000 : undefined;
|
|
66
|
-
return new
|
|
66
|
+
return new BuildStep_1.BuildStep(this.ctx, {
|
|
67
67
|
id,
|
|
68
68
|
inputs,
|
|
69
69
|
outputs,
|
|
@@ -75,12 +75,13 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
75
75
|
env,
|
|
76
76
|
ifCondition,
|
|
77
77
|
timeoutMs,
|
|
78
|
+
__metricsId: __metrics_id,
|
|
78
79
|
});
|
|
79
80
|
}
|
|
80
81
|
createBuildStepFromBuildStepBareCommandRun({ run: command, }) {
|
|
81
|
-
const id =
|
|
82
|
-
const displayName =
|
|
83
|
-
return new
|
|
82
|
+
const id = BuildStep_1.BuildStep.getNewId();
|
|
83
|
+
const displayName = BuildStep_1.BuildStep.getDisplayName({ id, command });
|
|
84
|
+
return new BuildStep_1.BuildStep(this.ctx, {
|
|
84
85
|
id,
|
|
85
86
|
displayName,
|
|
86
87
|
command,
|
|
@@ -155,7 +156,7 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
155
156
|
createBuildFunctionFromConfig({ id, name, inputs: inputsConfig, outputs: outputsConfig, shell, command, supportedRuntimePlatforms, path: customFunctionModulePath, }) {
|
|
156
157
|
const inputProviders = inputsConfig && this.createBuildStepInputProvidersFromBuildFunctionInputs(inputsConfig);
|
|
157
158
|
const outputProviders = outputsConfig && this.createBuildStepOutputProvidersFromBuildFunctionOutputs(outputsConfig);
|
|
158
|
-
return new
|
|
159
|
+
return new BuildFunction_1.BuildFunction({
|
|
159
160
|
id,
|
|
160
161
|
name,
|
|
161
162
|
inputProviders,
|
|
@@ -167,13 +168,13 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
167
168
|
});
|
|
168
169
|
}
|
|
169
170
|
createBuildStepInputsFromDefinition(buildStepInputs, stepDisplayName) {
|
|
170
|
-
return Object.entries(buildStepInputs).map(([key, value]) => new
|
|
171
|
+
return Object.entries(buildStepInputs).map(([key, value]) => new BuildStepInput_1.BuildStepInput(this.ctx, {
|
|
171
172
|
id: key,
|
|
172
173
|
stepDisplayName,
|
|
173
174
|
defaultValue: value,
|
|
174
175
|
required: true,
|
|
175
176
|
allowedValueTypeName: typeof value === 'object'
|
|
176
|
-
?
|
|
177
|
+
? BuildStepInput_1.BuildStepInputValueTypeName.JSON
|
|
177
178
|
: typeof value,
|
|
178
179
|
}));
|
|
179
180
|
}
|
|
@@ -181,12 +182,12 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
181
182
|
return buildFunctionInputs.map((entry) => {
|
|
182
183
|
var _a;
|
|
183
184
|
return typeof entry === 'string'
|
|
184
|
-
?
|
|
185
|
+
? BuildStepInput_1.BuildStepInput.createProvider({
|
|
185
186
|
id: entry,
|
|
186
187
|
required: true,
|
|
187
|
-
allowedValueTypeName:
|
|
188
|
+
allowedValueTypeName: BuildStepInput_1.BuildStepInputValueTypeName.STRING,
|
|
188
189
|
})
|
|
189
|
-
:
|
|
190
|
+
: BuildStepInput_1.BuildStepInput.createProvider({
|
|
190
191
|
id: entry.name,
|
|
191
192
|
required: (_a = entry.required) !== null && _a !== void 0 ? _a : true,
|
|
192
193
|
defaultValue: entry.defaultValue,
|
|
@@ -199,8 +200,8 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
199
200
|
return buildStepOutputs.map((entry) => {
|
|
200
201
|
var _a;
|
|
201
202
|
return typeof entry === 'string'
|
|
202
|
-
? new
|
|
203
|
-
: new
|
|
203
|
+
? new BuildStepOutput_1.BuildStepOutput(this.ctx, { id: entry, stepDisplayName, required: true })
|
|
204
|
+
: new BuildStepOutput_1.BuildStepOutput(this.ctx, {
|
|
204
205
|
id: entry.name,
|
|
205
206
|
stepDisplayName,
|
|
206
207
|
required: (_a = entry.required) !== null && _a !== void 0 ? _a : true,
|
|
@@ -211,8 +212,8 @@ class BuildConfigParser extends AbstractConfigParser_js_1.AbstractConfigParser {
|
|
|
211
212
|
return buildFunctionOutputs.map((entry) => {
|
|
212
213
|
var _a;
|
|
213
214
|
return typeof entry === 'string'
|
|
214
|
-
?
|
|
215
|
-
:
|
|
215
|
+
? BuildStepOutput_1.BuildStepOutput.createProvider({ id: entry, required: true })
|
|
216
|
+
: BuildStepOutput_1.BuildStepOutput.createProvider({ id: entry.name, required: (_a = entry.required) !== null && _a !== void 0 ? _a : true });
|
|
216
217
|
});
|
|
217
218
|
}
|
|
218
219
|
mergeBuildFunctionsWithExternal(configFunctions, externalFunctions) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuildConfigParser.js","sourceRoot":"","sources":["../src/BuildConfigParser.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,+CAgBuB;AACvB,mDAAmE;AACnE,2CAAwC;AACxC,qDAI0B;AAE1B,uDAA6E;AAC7E,qCAA4C;AAC5C,6DAI8B;AAC9B,iEAA8D;AAE9D,MAAa,iBAAkB,SAAQ,2CAAoB;IAEzD,YACE,GAA2B,EAC3B,EACE,UAAU,EACV,iBAAiB,EACjB,sBAAsB,GAKvB;QAED,KAAK,CAAC,GAAG,EAAE;YACT,iBAAiB;YACjB,sBAAsB;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAES,KAAK,CAAC,uDAAuD;;QAIrE,MAAM,MAAM,GAAG,MAAM,IAAA,qDAAuC,EAAC,IAAI,CAAC,UAAU,EAAE;YAC5E,mBAAmB,EAAE,IAAI,CAAC,0BAA0B,EAAE;YACtD,yBAAyB,EAAE,IAAI,CAAC,+BAA+B,EAAE;SAClE,CAAC,CAAC;QACH,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnF,MAAM,cAAc,GAAG,IAAI,CAAC,+BAA+B,CACzD,oBAAoB,EACpB,IAAI,CAAC,iBAAiB,CACvB,CAAC;QACF,MAAM,mBAAmB,GAAG,IAAA,wDAAmC,EAC7D,MAAA,IAAI,CAAC,sBAAsB,mCAAI,EAAE,CAClC,CAAC;QACF,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5C,UAAU,CAAC,IAAI,CACb,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,CAAC,CACnF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,UAAU;YACV,iBAAiB,EAAE,cAAc;SAClC,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,eAAgC,EAChC,cAAiC,EACjC,mBAA2C;QAE3C,IAAI,IAAA,mCAAqB,EAAC,eAAe,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,eAAe,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,IAAA,uCAAyB,EAAC,eAAe,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,eAAe,CAAC,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,IAAA,wDAA0C,EAAC,eAAe,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC,yEAAyE,CACnF,cAAc,EACd,mBAAmB,EACnB,eAAe,CAChB,CAAC;QACJ,CAAC;aAAM,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,iEAAiE,CAC3E,cAAc,EACd,mBAAmB,EACnB,eAAe,CAChB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,yBAAgB,CACxB,wEAAwE,CACzE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,sCAAsC,CAAC,EAAE,GAAG,EAAuB;QACzE,MAAM,EACJ,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,EACtB,IAAI,EACJ,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,GAAG,EACH,EAAE,EAAE,WAAW,EACf,eAAe,EACf,YAAY,GACb,GAAG,GAAG,CAAC;QACR,MAAM,EAAE,GAAG,qBAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,qBAAS,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,GACV,YAAY,IAAI,IAAI,CAAC,mCAAmC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACtF,MAAM,OAAO,GACX,aAAa,IAAI,IAAI,CAAC,oCAAoC,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACzF,MAAM,SAAS,GAAG,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,OAAO,IAAI,qBAAS,CAAC,IAAI,CAAC,GAAG,EAAE;YAC7B,EAAE;YACF,MAAM;YACN,OAAO;YACP,IAAI;YACJ,WAAW;YACX,gBAAgB;YAChB,KAAK;YACL,OAAO;YACP,GAAG;YACH,WAAW;YACX,SAAS;YACT,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAC;IACL,CAAC;IAEO,0CAA0C,CAAC,EACjD,GAAG,EAAE,OAAO,GACY;QACxB,MAAM,EAAE,GAAG,qBAAS,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,qBAAS,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,qBAAS,CAAC,IAAI,CAAC,GAAG,EAAE;YAC7B,EAAE;YACF,WAAW;YACX,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAEO,8CAA8C,CACpD,mBAA2C,EAC3C,qBAA4C;QAE5C,MAAM,UAAU,GAAG,sCAAsC,CAAC,qBAAqB,CAAC,CAAC;QACjF,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAA,gBAAM,EAAC,kBAAkB,EAAE,iCAAiC,UAAU,mBAAmB,CAAC,CAAC;QAC3F,OAAO,kBAAkB,CAAC,qCAAqC,CAAC,IAAI,CAAC,GAAG,EAAE;YACxE,UAAU,EAAE,qBAAqB,CAAC,UAAU,CAAC,CAAC,MAAM;SACrD,CAAC,CAAC;IACL,CAAC;IAEO,kDAAkD,CACxD,mBAA2C,EAC3C,eAAuB;QAEvB,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAChE,IAAA,gBAAM,EAAC,kBAAkB,EAAE,iCAAiC,eAAe,mBAAmB,CAAC,CAAC;QAChG,OAAO,kBAAkB,CAAC,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC;IAEO,4CAA4C,CAClD,cAAiC,EACjC,UAAoD;QAEpD,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,aAAa,CAAC,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAEO,yEAAyE,CAC/E,cAAiC,EACjC,mBAA2C,EAC3C,yBAAiC;QAEjC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;QAC1E,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,kDAAkD,CAC5D,mBAAmB,EACnB,yBAAyB,CAC1B,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,CAAC,4CAA4C,CAAC,cAAc,EAAE,yBAAyB,CAAC;SAC7F,CAAC;IACJ,CAAC;IAEO,iEAAiE,CACvE,cAAiC,EACjC,mBAA2C,EAC3C,qBAA4C;QAE5C,MAAM,UAAU,GAAG,sCAAsC,CAAC,qBAAqB,CAAC,CAAC;QAEjF,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,8CAA8C,CACxD,mBAAmB,EACnB,qBAAqB,CACtB,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAChG,CAAC;IAEO,wCAAwC,CAC9C,cAAiC,EACjC,qBAA4C;QAE5C,MAAM,UAAU,GAAG,sCAAsC,CAAC,qBAAqB,CAAC,CAAC;QACjF,MAAM,uBAAuB,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,SAAS,GACb,uBAAuB,CAAC,eAAe,KAAK,SAAS;YACnD,CAAC,CAAC,uBAAuB,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI;YACrD,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,aAAa,CAAC,+BAA+B,CAAC,IAAI,CAAC,GAAG,EAAE;YAC7D,EAAE,EAAE,uBAAuB,CAAC,EAAE;YAC9B,IAAI,EAAE,uBAAuB,CAAC,IAAI;YAClC,UAAU,EAAE,uBAAuB,CAAC,MAAM;YAC1C,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB;YAC1D,KAAK,EAAE,uBAAuB,CAAC,KAAK;YACpC,GAAG,EAAE,uBAAuB,CAAC,GAAG;YAChC,WAAW,EAAE,uBAAuB,CAAC,EAAE;YACvC,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEO,8BAA8B,CACpC,oBAA8C;QAE9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrF,MAAM,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC;gBACvD,EAAE,EAAE,UAAU;gBACd,GAAG,mBAAmB;aACvB,CAAC,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC;QACpD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,6BAA6B,CAAC,EACpC,EAAE,EACF,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,EACtB,KAAK,EACL,OAAO,EACP,yBAAyB,EACzB,IAAI,EAAE,wBAAwB,GACO;QACrC,MAAM,cAAc,GAClB,YAAY,IAAI,IAAI,CAAC,oDAAoD,CAAC,YAAY,CAAC,CAAC;QAC1F,MAAM,eAAe,GACnB,aAAa,IAAI,IAAI,CAAC,sDAAsD,CAAC,aAAa,CAAC,CAAC;QAC9F,OAAO,IAAI,6BAAa,CAAC;YACvB,EAAE;YACF,IAAI;YACJ,cAAc;YACd,eAAe;YACf,KAAK;YACL,OAAO;YACP,wBAAwB;YACxB,yBAAyB;SAC1B,CAAC,CAAC;IACL,CAAC;IAEO,mCAAmC,CACzC,eAAgC,EAChC,eAAuB;QAEvB,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CACxC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACf,IAAI,+BAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC3B,EAAE,EAAE,GAAG;YACP,eAAe;YACf,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,IAAI;YACd,oBAAoB,EAClB,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,4CAA2B,CAAC,IAAI;gBAClC,CAAC,CAAE,OAAO,KAAqC;SACpD,CAAC,CACL,CAAC;IACJ,CAAC;IAEO,oDAAoD,CAC1D,mBAAwC;QAExC,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;YACvC,OAAO,OAAO,KAAK,KAAK,QAAQ;gBAC9B,CAAC,CAAC,+BAAc,CAAC,cAAc,CAAC;oBAC5B,EAAE,EAAE,KAAK;oBACT,QAAQ,EAAE,IAAI;oBACd,oBAAoB,EAAE,4CAA2B,CAAC,MAAM;iBACzD,CAAC;gBACJ,CAAC,CAAC,+BAAc,CAAC,cAAc,CAAC;oBAC5B,EAAE,EAAE,KAAK,CAAC,IAAI;oBACd,QAAQ,EAAE,MAAA,KAAK,CAAC,QAAQ,mCAAI,IAAI;oBAChC,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,oBAAoB,EAAE,KAAK,CAAC,gBAAgB;iBAC7C,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,oCAAoC,CAC1C,gBAAkC,EAClC,eAAuB;QAEvB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;YACpC,OAAA,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,IAAI,iCAAe,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC/E,CAAC,CAAC,IAAI,iCAAe,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC5B,EAAE,EAAE,KAAK,CAAC,IAAI;oBACd,eAAe;oBACf,QAAQ,EAAE,MAAA,KAAK,CAAC,QAAQ,mCAAI,IAAI;iBACjC,CAAC,CAAA;SAAA,CACP,CAAC;IACJ,CAAC;IAEO,sDAAsD,CAC5D,oBAA0C;QAE1C,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;YACxC,OAAA,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,iCAAe,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC/D,CAAC,CAAC,iCAAe,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAA,KAAK,CAAC,QAAQ,mCAAI,IAAI,EAAE,CAAC,CAAA;SAAA,CACzF,CAAC;IACJ,CAAC;IAEO,+BAA+B,CACrC,eAAkC,EAClC,iBAAmC;QAEnC,MAAM,MAAM,GAAsB,EAAE,GAAG,eAAe,EAAE,CAAC;QACzD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,MAAM,aAAa,IAAI,iBAAiB,EAAE,CAAC;YAC9C,uDAAuD;YACvD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;YACjC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAjVD,8CAiVC;AAED,SAAS,sCAAsC,CAC7C,qBAA4C;IAE5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChD,IAAA,gBAAM,EACJ,IAAI,CAAC,MAAM,KAAK,CAAC,EACjB,wEAAwE,CACzE,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC","sourcesContent":["import assert from 'assert';\n\nimport {\n BuildConfig,\n BuildFunctionConfig,\n BuildFunctionInputs,\n BuildFunctionOutputs,\n BuildStepBareCommandRun,\n BuildStepBareFunctionOrFunctionGroupCall,\n BuildStepCommandRun,\n BuildStepConfig,\n BuildStepFunctionCall,\n BuildStepInputs,\n BuildStepOutputs,\n isBuildStepBareCommandRun,\n isBuildStepBareFunctionOrFunctionGroupCall,\n isBuildStepCommandRun,\n readAndValidateBuildConfigFromPathAsync,\n} from './BuildConfig';\nimport { BuildFunction, BuildFunctionById } from './BuildFunction';\nimport { BuildStep } from './BuildStep';\nimport {\n BuildStepInput,\n BuildStepInputProvider,\n BuildStepInputValueTypeName,\n} from './BuildStepInput';\nimport { BuildStepGlobalContext } from './BuildStepContext';\nimport { BuildStepOutput, BuildStepOutputProvider } from './BuildStepOutput';\nimport { BuildConfigError } from './errors';\nimport {\n BuildFunctionGroup,\n BuildFunctionGroupById,\n createBuildFunctionGroupByIdMapping,\n} from './BuildFunctionGroup';\nimport { AbstractConfigParser } from './AbstractConfigParser';\n\nexport class BuildConfigParser extends AbstractConfigParser {\n private readonly configPath: string;\n constructor(\n ctx: BuildStepGlobalContext,\n {\n configPath,\n externalFunctions,\n externalFunctionGroups,\n }: {\n configPath: string;\n externalFunctions?: BuildFunction[];\n externalFunctionGroups?: BuildFunctionGroup[];\n }\n ) {\n super(ctx, {\n externalFunctions,\n externalFunctionGroups,\n });\n\n this.configPath = configPath;\n }\n\n protected async parseConfigToBuildStepsAndBuildFunctionByIdMappingAsync(): Promise<{\n buildSteps: BuildStep[];\n buildFunctionById: BuildFunctionById;\n }> {\n const config = await readAndValidateBuildConfigFromPathAsync(this.configPath, {\n externalFunctionIds: this.getExternalFunctionFullIds(),\n externalFunctionGroupsIds: this.getExternalFunctionGroupFullIds(),\n });\n const configBuildFunctions = this.createBuildFunctionsFromConfig(config.functions);\n const buildFunctions = this.mergeBuildFunctionsWithExternal(\n configBuildFunctions,\n this.externalFunctions\n );\n const buildFunctionGroups = createBuildFunctionGroupByIdMapping(\n this.externalFunctionGroups ?? []\n );\n const buildSteps: BuildStep[] = [];\n for (const stepConfig of config.build.steps) {\n buildSteps.push(\n ...this.createBuildStepFromConfig(stepConfig, buildFunctions, buildFunctionGroups)\n );\n }\n return {\n buildSteps,\n buildFunctionById: buildFunctions,\n };\n }\n\n private createBuildStepFromConfig(\n buildStepConfig: BuildStepConfig,\n buildFunctions: BuildFunctionById,\n buildFunctionGroups: BuildFunctionGroupById\n ): BuildStep[] {\n if (isBuildStepCommandRun(buildStepConfig)) {\n return [this.createBuildStepFromBuildStepCommandRun(buildStepConfig)];\n } else if (isBuildStepBareCommandRun(buildStepConfig)) {\n return [this.createBuildStepFromBuildStepBareCommandRun(buildStepConfig)];\n } else if (isBuildStepBareFunctionOrFunctionGroupCall(buildStepConfig)) {\n return this.createBuildStepsFromBareBuildStepFunctionOrBareBuildStepFunctionGroupCall(\n buildFunctions,\n buildFunctionGroups,\n buildStepConfig\n );\n } else if (buildStepConfig !== null) {\n return this.createBuildStepsFromBuildStepFunctionOrBuildStepFunctionGroupCall(\n buildFunctions,\n buildFunctionGroups,\n buildStepConfig\n );\n } else {\n throw new BuildConfigError(\n 'Invalid build step configuration detected. Build step cannot be empty.'\n );\n }\n }\n\n private createBuildStepFromBuildStepCommandRun({ run }: BuildStepCommandRun): BuildStep {\n const {\n id: maybeId,\n inputs: inputsConfig,\n outputs: outputsConfig,\n name,\n workingDirectory,\n shell,\n command,\n env,\n if: ifCondition,\n timeout_minutes,\n __metrics_id,\n } = run;\n const id = BuildStep.getNewId(maybeId);\n const displayName = BuildStep.getDisplayName({ id, name, command });\n const inputs =\n inputsConfig && this.createBuildStepInputsFromDefinition(inputsConfig, displayName);\n const outputs =\n outputsConfig && this.createBuildStepOutputsFromDefinition(outputsConfig, displayName);\n const timeoutMs = timeout_minutes !== undefined ? timeout_minutes * 60 * 1000 : undefined;\n return new BuildStep(this.ctx, {\n id,\n inputs,\n outputs,\n name,\n displayName,\n workingDirectory,\n shell,\n command,\n env,\n ifCondition,\n timeoutMs,\n __metricsId: __metrics_id,\n });\n }\n\n private createBuildStepFromBuildStepBareCommandRun({\n run: command,\n }: BuildStepBareCommandRun): BuildStep {\n const id = BuildStep.getNewId();\n const displayName = BuildStep.getDisplayName({ id, command });\n return new BuildStep(this.ctx, {\n id,\n displayName,\n command,\n });\n }\n\n private createBuildStepsFromBuildStepFunctionGroupCall(\n buildFunctionGroups: BuildFunctionGroupById,\n buildStepFunctionCall: BuildStepFunctionCall\n ): BuildStep[] {\n const functionId = getFunctionIdFromBuildStepFunctionCall(buildStepFunctionCall);\n const buildFunctionGroup = buildFunctionGroups[functionId];\n assert(buildFunctionGroup, `Build function group with id \"${functionId}\" is not defined.`);\n return buildFunctionGroup.createBuildStepsFromFunctionGroupCall(this.ctx, {\n callInputs: buildStepFunctionCall[functionId].inputs,\n });\n }\n\n private createBuildStepsFromBuildStepBareFunctionGroupCall(\n buildFunctionGroups: BuildFunctionGroupById,\n functionGroupId: string\n ): BuildStep[] {\n const buildFunctionGroup = buildFunctionGroups[functionGroupId];\n assert(buildFunctionGroup, `Build function group with id \"${functionGroupId}\" is not defined.`);\n return buildFunctionGroup.createBuildStepsFromFunctionGroupCall(this.ctx);\n }\n\n private createBuildStepFromBuildStepBareFunctionCall(\n buildFunctions: BuildFunctionById,\n functionId: BuildStepBareFunctionOrFunctionGroupCall\n ): BuildStep {\n const buildFunction = buildFunctions[functionId];\n return buildFunction.createBuildStepFromFunctionCall(this.ctx);\n }\n\n private createBuildStepsFromBareBuildStepFunctionOrBareBuildStepFunctionGroupCall(\n buildFunctions: BuildFunctionById,\n buildFunctionGroups: BuildFunctionGroupById,\n functionOrFunctionGroupId: string\n ): BuildStep[] {\n const maybeFunctionGroup = buildFunctionGroups[functionOrFunctionGroupId];\n if (maybeFunctionGroup) {\n return this.createBuildStepsFromBuildStepBareFunctionGroupCall(\n buildFunctionGroups,\n functionOrFunctionGroupId\n );\n }\n return [\n this.createBuildStepFromBuildStepBareFunctionCall(buildFunctions, functionOrFunctionGroupId),\n ];\n }\n\n private createBuildStepsFromBuildStepFunctionOrBuildStepFunctionGroupCall(\n buildFunctions: BuildFunctionById,\n buildFunctionGroups: BuildFunctionGroupById,\n buildStepFunctionCall: BuildStepFunctionCall\n ): BuildStep[] {\n const functionId = getFunctionIdFromBuildStepFunctionCall(buildStepFunctionCall);\n\n const maybeFunctionGroup = buildFunctionGroups[functionId];\n if (maybeFunctionGroup) {\n return this.createBuildStepsFromBuildStepFunctionGroupCall(\n buildFunctionGroups,\n buildStepFunctionCall\n );\n }\n return [this.createBuildStepFromBuildStepFunctionCall(buildFunctions, buildStepFunctionCall)];\n }\n\n private createBuildStepFromBuildStepFunctionCall(\n buildFunctions: BuildFunctionById,\n buildStepFunctionCall: BuildStepFunctionCall\n ): BuildStep {\n const functionId = getFunctionIdFromBuildStepFunctionCall(buildStepFunctionCall);\n const buildFunctionCallConfig = buildStepFunctionCall[functionId];\n const buildFunction = buildFunctions[functionId];\n const timeoutMs =\n buildFunctionCallConfig.timeout_minutes !== undefined\n ? buildFunctionCallConfig.timeout_minutes * 60 * 1000\n : undefined;\n return buildFunction.createBuildStepFromFunctionCall(this.ctx, {\n id: buildFunctionCallConfig.id,\n name: buildFunctionCallConfig.name,\n callInputs: buildFunctionCallConfig.inputs,\n workingDirectory: buildFunctionCallConfig.workingDirectory,\n shell: buildFunctionCallConfig.shell,\n env: buildFunctionCallConfig.env,\n ifCondition: buildFunctionCallConfig.if,\n timeoutMs,\n });\n }\n\n private createBuildFunctionsFromConfig(\n buildFunctionsConfig: BuildConfig['functions']\n ): BuildFunctionById {\n if (!buildFunctionsConfig) {\n return {};\n }\n const result: BuildFunctionById = {};\n for (const [functionId, buildFunctionConfig] of Object.entries(buildFunctionsConfig)) {\n const buildFunction = this.createBuildFunctionFromConfig({\n id: functionId,\n ...buildFunctionConfig,\n });\n result[buildFunction.getFullId()] = buildFunction;\n }\n return result;\n }\n\n private createBuildFunctionFromConfig({\n id,\n name,\n inputs: inputsConfig,\n outputs: outputsConfig,\n shell,\n command,\n supportedRuntimePlatforms,\n path: customFunctionModulePath,\n }: BuildFunctionConfig & { id: string }): BuildFunction {\n const inputProviders =\n inputsConfig && this.createBuildStepInputProvidersFromBuildFunctionInputs(inputsConfig);\n const outputProviders =\n outputsConfig && this.createBuildStepOutputProvidersFromBuildFunctionOutputs(outputsConfig);\n return new BuildFunction({\n id,\n name,\n inputProviders,\n outputProviders,\n shell,\n command,\n customFunctionModulePath,\n supportedRuntimePlatforms,\n });\n }\n\n private createBuildStepInputsFromDefinition(\n buildStepInputs: BuildStepInputs,\n stepDisplayName: string\n ): BuildStepInput[] {\n return Object.entries(buildStepInputs).map(\n ([key, value]) =>\n new BuildStepInput(this.ctx, {\n id: key,\n stepDisplayName,\n defaultValue: value,\n required: true,\n allowedValueTypeName:\n typeof value === 'object'\n ? BuildStepInputValueTypeName.JSON\n : (typeof value as BuildStepInputValueTypeName),\n })\n );\n }\n\n private createBuildStepInputProvidersFromBuildFunctionInputs(\n buildFunctionInputs: BuildFunctionInputs\n ): BuildStepInputProvider[] {\n return buildFunctionInputs.map((entry) => {\n return typeof entry === 'string'\n ? BuildStepInput.createProvider({\n id: entry,\n required: true,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n })\n : BuildStepInput.createProvider({\n id: entry.name,\n required: entry.required ?? true,\n defaultValue: entry.defaultValue,\n allowedValues: entry.allowedValues,\n allowedValueTypeName: entry.allowedValueType,\n });\n });\n }\n\n private createBuildStepOutputsFromDefinition(\n buildStepOutputs: BuildStepOutputs,\n stepDisplayName: string\n ): BuildStepOutput[] {\n return buildStepOutputs.map((entry) =>\n typeof entry === 'string'\n ? new BuildStepOutput(this.ctx, { id: entry, stepDisplayName, required: true })\n : new BuildStepOutput(this.ctx, {\n id: entry.name,\n stepDisplayName,\n required: entry.required ?? true,\n })\n );\n }\n\n private createBuildStepOutputProvidersFromBuildFunctionOutputs(\n buildFunctionOutputs: BuildFunctionOutputs\n ): BuildStepOutputProvider[] {\n return buildFunctionOutputs.map((entry) =>\n typeof entry === 'string'\n ? BuildStepOutput.createProvider({ id: entry, required: true })\n : BuildStepOutput.createProvider({ id: entry.name, required: entry.required ?? true })\n );\n }\n\n private mergeBuildFunctionsWithExternal(\n configFunctions: BuildFunctionById,\n externalFunctions?: BuildFunction[]\n ): BuildFunctionById {\n const result: BuildFunctionById = { ...configFunctions };\n if (externalFunctions === undefined) {\n return result;\n }\n for (const buildFunction of externalFunctions) {\n // functions defined in config shadow the external ones\n const fullId = buildFunction.getFullId();\n if (!(fullId in result)) {\n result[fullId] = buildFunction;\n }\n }\n return result;\n }\n}\n\nfunction getFunctionIdFromBuildStepFunctionCall(\n buildStepFunctionCall: BuildStepFunctionCall\n): string {\n const keys = Object.keys(buildStepFunctionCall);\n assert(\n keys.length === 1,\n 'There must be at most one function call in the step (enforced by joi).'\n );\n return keys[0];\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { BuildRuntimePlatform } from './BuildRuntimePlatform
|
|
2
|
-
import { BuildStep, BuildStepFunction } from './BuildStep
|
|
3
|
-
import { BuildStepGlobalContext } from './BuildStepContext
|
|
4
|
-
import { BuildStepInputProvider } from './BuildStepInput
|
|
5
|
-
import { BuildStepOutputProvider } from './BuildStepOutput
|
|
6
|
-
import { BuildStepEnv } from './BuildStepEnv
|
|
1
|
+
import { BuildRuntimePlatform } from './BuildRuntimePlatform';
|
|
2
|
+
import { BuildStep, BuildStepFunction } from './BuildStep';
|
|
3
|
+
import { BuildStepGlobalContext } from './BuildStepContext';
|
|
4
|
+
import { BuildStepInputProvider } from './BuildStepInput';
|
|
5
|
+
import { BuildStepOutputProvider } from './BuildStepOutput';
|
|
6
|
+
import { BuildStepEnv } from './BuildStepEnv';
|
|
7
7
|
export type BuildFunctionById = Record<string, BuildFunction>;
|
|
8
8
|
export type BuildFunctionCallInputs = Record<string, unknown>;
|
|
9
9
|
export declare class BuildFunction {
|
|
@@ -17,7 +17,8 @@ export declare class BuildFunction {
|
|
|
17
17
|
readonly customFunctionModulePath?: string;
|
|
18
18
|
readonly fn?: BuildStepFunction;
|
|
19
19
|
readonly shell?: string;
|
|
20
|
-
|
|
20
|
+
readonly __metricsId?: string;
|
|
21
|
+
constructor({ namespace, id, name, supportedRuntimePlatforms, inputProviders, outputProviders, command, fn, customFunctionModulePath, shell, __metricsId, }: {
|
|
21
22
|
namespace?: string;
|
|
22
23
|
id: string;
|
|
23
24
|
name?: string;
|
|
@@ -28,6 +29,7 @@ export declare class BuildFunction {
|
|
|
28
29
|
customFunctionModulePath?: string;
|
|
29
30
|
fn?: BuildStepFunction;
|
|
30
31
|
shell?: string;
|
|
32
|
+
__metricsId?: string;
|
|
31
33
|
});
|
|
32
34
|
getFullId(): string;
|
|
33
35
|
createBuildStepFromFunctionCall(ctx: BuildStepGlobalContext, { id, name, callInputs, workingDirectory, shell, env, ifCondition, timeoutMs, }?: {
|