gitlab-ci-local 4.65.1 → 4.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -19
- package/dist/index.js +340 -0
- package/dist/index.js.map +480 -0
- package/package.json +26 -80
- package/src/argv.js +0 -307
- package/src/commander.js +0 -247
- package/src/data-expander.js +0 -220
- package/src/executor.js +0 -104
- package/src/git-data.js +0 -168
- package/src/gitlab-preset.js +0 -24
- package/src/global.js +0 -40
- package/src/handler.js +0 -119
- package/src/index.js +0 -364
- package/src/job.js +0 -1463
- package/src/mutex.js +0 -20
- package/src/parallel.js +0 -46
- package/src/parser-includes.js +0 -387
- package/src/parser.js +0 -357
- package/src/predefined-variables.js +0 -67
- package/src/producers.js +0 -42
- package/src/schema/index.js +0 -19
- package/src/schema/schema.js +0 -3190
- package/src/schema-error.js +0 -114
- package/src/state.js +0 -22
- package/src/utils.js +0 -485
- package/src/validator.js +0 -151
- package/src/variables-from-files.js +0 -143
- package/src/write-streams.js +0 -51
package/src/parser.js
DELETED
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk-template";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import deepExtend from "deep-extend";
|
|
4
|
-
import fs from "fs-extra";
|
|
5
|
-
import * as yaml from "js-yaml";
|
|
6
|
-
import prettyHrtime from "pretty-hrtime";
|
|
7
|
-
import { Job } from "./job.js";
|
|
8
|
-
import * as DataExpander from "./data-expander.js";
|
|
9
|
-
import { Utils } from "./utils.js";
|
|
10
|
-
import assert from "assert";
|
|
11
|
-
import { Validator } from "./validator.js";
|
|
12
|
-
import * as parallel from "./parallel.js";
|
|
13
|
-
import { GitData } from "./git-data.js";
|
|
14
|
-
import { ParserIncludes } from "./parser-includes.js";
|
|
15
|
-
import { Producers } from "./producers.js";
|
|
16
|
-
import { VariablesFromFiles } from "./variables-from-files.js";
|
|
17
|
-
import { init as initPredefinedVariables } from "./predefined-variables.js";
|
|
18
|
-
const MAX_FUNCTIONS = 3;
|
|
19
|
-
const INCLUDE_INPUTS_SUPPORTED_TYPES = ["string", "boolean", "number", "array"];
|
|
20
|
-
export class Parser {
|
|
21
|
-
_stages = [];
|
|
22
|
-
_gitlabData;
|
|
23
|
-
_jobNamePad = null;
|
|
24
|
-
jobs;
|
|
25
|
-
argv;
|
|
26
|
-
writeStreams;
|
|
27
|
-
pipelineIid;
|
|
28
|
-
expandVariables;
|
|
29
|
-
constructor(argv, writeStreams, pipelineIid, jobs, expandVariables) {
|
|
30
|
-
this.argv = argv;
|
|
31
|
-
this.writeStreams = writeStreams;
|
|
32
|
-
this.pipelineIid = pipelineIid;
|
|
33
|
-
this.jobs = jobs;
|
|
34
|
-
this.expandVariables = expandVariables;
|
|
35
|
-
}
|
|
36
|
-
get stages() {
|
|
37
|
-
return this._stages;
|
|
38
|
-
}
|
|
39
|
-
get gitlabData() {
|
|
40
|
-
return this._gitlabData;
|
|
41
|
-
}
|
|
42
|
-
get jobNamePad() {
|
|
43
|
-
return this._jobNamePad ?? 0;
|
|
44
|
-
}
|
|
45
|
-
static async create(argv, writeStreams, pipelineIid, jobs, expandVariables = true) {
|
|
46
|
-
const parser = new Parser(argv, writeStreams, pipelineIid, jobs, expandVariables);
|
|
47
|
-
const time = process.hrtime();
|
|
48
|
-
await parser.init();
|
|
49
|
-
const warnings = await Validator.run(parser.jobs, parser.stages);
|
|
50
|
-
for (const job of parser.jobs) {
|
|
51
|
-
if (job.artifacts === null) {
|
|
52
|
-
job.deleteArtifacts();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const parsingTime = process.hrtime(time);
|
|
56
|
-
const pathToExpandedGitLabCi = path.join(argv.cwd, argv.stateDir, "expanded-gitlab-ci.yml");
|
|
57
|
-
fs.mkdirpSync(path.join(argv.cwd, argv.stateDir));
|
|
58
|
-
fs.writeFileSync(pathToExpandedGitLabCi, yaml.dump(parser.gitlabData));
|
|
59
|
-
if (argv.childPipelineDepth == 0)
|
|
60
|
-
writeStreams.stderr(chalk `{grey parsing and downloads finished in ${prettyHrtime(parsingTime)}.}\n`);
|
|
61
|
-
for (const warning of warnings) {
|
|
62
|
-
writeStreams.stderr(chalk `{yellow ${warning}}\n`);
|
|
63
|
-
}
|
|
64
|
-
// # Second layer of check for errors that are not caught in Validator.run
|
|
65
|
-
if (parser.argv.jsonSchemaValidation) {
|
|
66
|
-
const time = process.hrtime();
|
|
67
|
-
Validator.jsonSchemaValidation({
|
|
68
|
-
pathToExpandedGitLabCi,
|
|
69
|
-
gitLabCiConfig: parser.gitlabData,
|
|
70
|
-
argv,
|
|
71
|
-
});
|
|
72
|
-
if (argv.childPipelineDepth == 0)
|
|
73
|
-
writeStreams.stderr(chalk `{grey json schema validated in ${prettyHrtime(process.hrtime(time))}}\n`);
|
|
74
|
-
}
|
|
75
|
-
return parser;
|
|
76
|
-
}
|
|
77
|
-
async init() {
|
|
78
|
-
const argv = this.argv;
|
|
79
|
-
const cwd = argv.cwd;
|
|
80
|
-
const stateDir = argv.stateDir;
|
|
81
|
-
const writeStreams = this.writeStreams;
|
|
82
|
-
const file = argv.file;
|
|
83
|
-
const pipelineIid = this.pipelineIid;
|
|
84
|
-
const fetchIncludes = argv.fetchIncludes;
|
|
85
|
-
const gitData = await GitData.init(cwd, writeStreams);
|
|
86
|
-
const variablesFromFiles = await VariablesFromFiles.init(argv, writeStreams, gitData);
|
|
87
|
-
const envMatchedVariables = Utils.findEnvMatchedVariables(variablesFromFiles);
|
|
88
|
-
const predefinedVariables = initPredefinedVariables({ gitData, argv, envMatchedVariables });
|
|
89
|
-
const variables = { ...predefinedVariables, ...envMatchedVariables, ...argv.variable };
|
|
90
|
-
const expanded = Utils.expandVariables(variables);
|
|
91
|
-
let yamlDataList = [{ stages: [".pre", "build", "test", "deploy", ".post"] }];
|
|
92
|
-
const gitlabCiData = await Parser.loadYaml(`${cwd}/${file}`, {}, this.expandVariables);
|
|
93
|
-
yamlDataList = yamlDataList.concat(await ParserIncludes.init(gitlabCiData, { argv, cwd, stateDir, writeStreams, gitData, fetchIncludes, variables: expanded, expandVariables: this.expandVariables, maximumIncludes: argv.maximumIncludes }));
|
|
94
|
-
ParserIncludes.resetCount();
|
|
95
|
-
const gitlabCiLocalData = await Parser.loadYaml(`${cwd}/.gitlab-ci-local.yml`, {}, this.expandVariables);
|
|
96
|
-
yamlDataList = yamlDataList.concat(await ParserIncludes.init(gitlabCiLocalData, { argv, cwd, stateDir, writeStreams, gitData, fetchIncludes, variables: expanded, expandVariables: this.expandVariables, maximumIncludes: argv.maximumIncludes }));
|
|
97
|
-
ParserIncludes.resetCount();
|
|
98
|
-
const gitlabData = deepExtend({}, ...yamlDataList);
|
|
99
|
-
// Expand various fields in gitlabData
|
|
100
|
-
DataExpander.jobExtends(gitlabData);
|
|
101
|
-
DataExpander.reference(gitlabData, gitlabData);
|
|
102
|
-
DataExpander.flattenLists(gitlabData);
|
|
103
|
-
DataExpander.transformDeprecatedGlobalDefaultSyntax(gitlabData);
|
|
104
|
-
DataExpander.inheritDefault(gitlabData);
|
|
105
|
-
DataExpander.normalize(gitlabData);
|
|
106
|
-
assert(gitlabData.stages && Array.isArray(gitlabData.stages), chalk `{yellow stages:} must be an array`);
|
|
107
|
-
if (!gitlabData.stages.includes(".pre")) {
|
|
108
|
-
gitlabData.stages.unshift(".pre");
|
|
109
|
-
}
|
|
110
|
-
if (!gitlabData.stages.includes(".post")) {
|
|
111
|
-
gitlabData.stages.push(".post");
|
|
112
|
-
}
|
|
113
|
-
this._stages = gitlabData.stages;
|
|
114
|
-
// Check job variables for invalid hash of key value pairs, and cast numbers to strings
|
|
115
|
-
Utils.forEachRealJob(gitlabData, (jobName, jobData) => {
|
|
116
|
-
assert(jobData.when !== "never", chalk `This GitLab CI configuration is invalid: jobs:${jobName} when:never can only be used in a rules section or workflow:rules`);
|
|
117
|
-
for (const [key, value] of Object.entries(jobData.variables ?? {})) {
|
|
118
|
-
jobData.variables[key] = Utils.normalizeVariables(value);
|
|
119
|
-
}
|
|
120
|
-
for (let i = 0; i < (jobData.services ?? []).length; i++) {
|
|
121
|
-
const service = jobData.services[i];
|
|
122
|
-
for (const [key, value] of Object.entries(service.variables || {})) {
|
|
123
|
-
assert(typeof value === "string" || typeof value === "number" || typeof value === "boolean", chalk `{blueBright ${jobName}.services[${i}]} has invalid variables hash of key value pairs. ${key}=${value}`);
|
|
124
|
-
jobData.services[i].variables[key] = String(value);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
this._gitlabData = gitlabData;
|
|
129
|
-
// Generate jobs and put them into stages
|
|
130
|
-
Utils.forEachRealJob(gitlabData, (jobName, jobData) => {
|
|
131
|
-
assert(gitData != null, "gitData must be set");
|
|
132
|
-
assert(variablesFromFiles != null, "homeVariables must be set");
|
|
133
|
-
let nodeIndex = 1;
|
|
134
|
-
const parallelMatrixVariablesList = parallel.matrixVariablesList(jobData, jobName);
|
|
135
|
-
for (const parallelMatrixVariables of parallelMatrixVariablesList) {
|
|
136
|
-
let matrixJobName = jobName;
|
|
137
|
-
if (parallelMatrixVariables) {
|
|
138
|
-
matrixJobName = `${jobName}: [${Object.values(parallelMatrixVariables ?? []).join(",")}]`;
|
|
139
|
-
}
|
|
140
|
-
else if (parallel.isPlainParallel(jobData)) {
|
|
141
|
-
matrixJobName = `${jobName}: [${nodeIndex}/${parallelMatrixVariablesList.length}]`;
|
|
142
|
-
}
|
|
143
|
-
const job = new Job({
|
|
144
|
-
argv,
|
|
145
|
-
writeStreams,
|
|
146
|
-
data: jobData,
|
|
147
|
-
name: matrixJobName,
|
|
148
|
-
baseName: jobName,
|
|
149
|
-
globalVariables: gitlabData.variables,
|
|
150
|
-
pipelineIid: pipelineIid,
|
|
151
|
-
predefinedVariables: { ...predefinedVariables }, // NOTE: pass by value because predefinedVariables is mutated in the constructor
|
|
152
|
-
gitData,
|
|
153
|
-
variablesFromFiles,
|
|
154
|
-
matrixVariables: parallelMatrixVariables,
|
|
155
|
-
nodeIndex: (jobData.parallel != null) ? nodeIndex : null,
|
|
156
|
-
nodesTotal: parallelMatrixVariablesList.length,
|
|
157
|
-
expandVariables: this.expandVariables,
|
|
158
|
-
});
|
|
159
|
-
const foundStage = this.stages.includes(job.stage);
|
|
160
|
-
assert(foundStage, chalk `{yellow stage:${job.stage}} not found for {blueBright ${job.name}}`);
|
|
161
|
-
this.jobs.push(job);
|
|
162
|
-
nodeIndex++;
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
// Add some padding so that job logs are nicely aligned
|
|
166
|
-
// allow users to override this in case they have really long job name (see #840)
|
|
167
|
-
if (this.argv.maxJobNamePadding !== null && this.argv.maxJobNamePadding <= 0) {
|
|
168
|
-
this._jobNamePad = 0;
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
const jobs = this.argv.job.length !== 0 ? this.argv.job : this.jobs;
|
|
172
|
-
jobs.forEach((job) => {
|
|
173
|
-
let jobNeedsLength = [];
|
|
174
|
-
if (this.argv.needs && this.argv.job.length > 0) {
|
|
175
|
-
const found = this.jobs.find(j => j.baseName === job);
|
|
176
|
-
if (found?.needs) {
|
|
177
|
-
jobNeedsLength = found.needs.map(f => f.job.length);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
const jobLength = typeof job == "string" ? job.length : job.name.length;
|
|
181
|
-
this._jobNamePad = Math.max(jobLength, this._jobNamePad ?? 0, ...jobNeedsLength);
|
|
182
|
-
});
|
|
183
|
-
if (this.argv.maxJobNamePadding !== null) {
|
|
184
|
-
this._jobNamePad = Math.min(this.argv.maxJobNamePadding ?? 0, this._jobNamePad ?? 0);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
// Set jobNamePad on all jobs
|
|
188
|
-
this.jobs.forEach((job) => {
|
|
189
|
-
job.jobNamePad = this.jobNamePad;
|
|
190
|
-
});
|
|
191
|
-
// Generate producers for each job
|
|
192
|
-
this.jobs.forEach((job) => {
|
|
193
|
-
job.producers = Producers.init(this.jobs, this.stages, job);
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
static async loadYaml(filePath, ctx = {}, expandVariables = true) {
|
|
197
|
-
const ymlPath = `${filePath}`;
|
|
198
|
-
if (!fs.existsSync(ymlPath)) {
|
|
199
|
-
return {};
|
|
200
|
-
}
|
|
201
|
-
const fileContent = await fs.readFile(`${filePath}`, "utf8");
|
|
202
|
-
const fileSplit = fileContent.split(/\r?\n/g);
|
|
203
|
-
const fileSplitClone = fileSplit.slice();
|
|
204
|
-
let interactiveMatch = null;
|
|
205
|
-
let descriptionMatch = null;
|
|
206
|
-
let injectSSHAgent = null;
|
|
207
|
-
let noArtifactsToSourceMatch = null;
|
|
208
|
-
let index = 0;
|
|
209
|
-
if (expandVariables) {
|
|
210
|
-
for (const line of fileSplit) {
|
|
211
|
-
interactiveMatch = interactiveMatch ?? /#\s?@\s?[Ii]nteractive/.exec(line);
|
|
212
|
-
injectSSHAgent = injectSSHAgent ?? /#\s?@\s?[Ii]njectSSHAgent/.exec(line);
|
|
213
|
-
noArtifactsToSourceMatch = noArtifactsToSourceMatch ?? /#\s?@\s?NoArtifactsToSource/i.exec(line);
|
|
214
|
-
descriptionMatch = descriptionMatch ?? /#\s?@\s?[Dd]escription (?<description>.*)/.exec(line);
|
|
215
|
-
const jobMatch = /\w:/.exec(line);
|
|
216
|
-
if (jobMatch && (interactiveMatch || descriptionMatch || injectSSHAgent || noArtifactsToSourceMatch)) {
|
|
217
|
-
if (interactiveMatch) {
|
|
218
|
-
fileSplitClone.splice(index + 1, 0, " gclInteractive: true");
|
|
219
|
-
index++;
|
|
220
|
-
}
|
|
221
|
-
if (injectSSHAgent) {
|
|
222
|
-
fileSplitClone.splice(index + 1, 0, " gclInjectSSHAgent: true");
|
|
223
|
-
index++;
|
|
224
|
-
}
|
|
225
|
-
if (noArtifactsToSourceMatch) {
|
|
226
|
-
fileSplitClone.splice(index + 1, 0, " gclArtifactsToSource: false");
|
|
227
|
-
index++;
|
|
228
|
-
}
|
|
229
|
-
if (descriptionMatch) {
|
|
230
|
-
fileSplitClone.splice(index + 1, 0, ` gclDescription: ${descriptionMatch?.groups?.description ?? ""}`);
|
|
231
|
-
index++;
|
|
232
|
-
}
|
|
233
|
-
interactiveMatch = null;
|
|
234
|
-
descriptionMatch = null;
|
|
235
|
-
injectSSHAgent = null;
|
|
236
|
-
noArtifactsToSourceMatch = null;
|
|
237
|
-
}
|
|
238
|
-
index++;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
const referenceType = new yaml.Type("!reference", {
|
|
242
|
-
kind: "sequence",
|
|
243
|
-
construct: function (data) {
|
|
244
|
-
return { referenceData: data };
|
|
245
|
-
},
|
|
246
|
-
});
|
|
247
|
-
const schema = yaml.DEFAULT_SCHEMA.extend([referenceType]);
|
|
248
|
-
let fileData;
|
|
249
|
-
try {
|
|
250
|
-
fileData = yaml.loadAll(fileSplitClone.join("\n"), null, { schema });
|
|
251
|
-
}
|
|
252
|
-
catch (e) {
|
|
253
|
-
if (e instanceof yaml.YAMLException && e.reason === "duplicated mapping key") {
|
|
254
|
-
console.log(chalk `{black.bgYellowBright WARN } duplicated mapping key detected! Values will be overwritten!`);
|
|
255
|
-
fileData = yaml.loadAll(fileSplitClone.join("\n"), null, { schema, json: true });
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
throw e;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
if (fileData.length <= 1)
|
|
262
|
-
return fileData[0];
|
|
263
|
-
if (isGitlabSpecFile(fileData[0])) {
|
|
264
|
-
const inputsSpecification = fileData[0];
|
|
265
|
-
const uninterpolatedConfigurations = fileData[1];
|
|
266
|
-
const interpolatedConfigurations = JSON.stringify(uninterpolatedConfigurations)
|
|
267
|
-
.replace(/(?<firstChar>.)?(?<secondChar>.)?\$\[\[\s*inputs.(?<interpolationKey>[\w-]+)\s*\|?\s*(?<interpolationFunctions>.*?)\s*\]\](?<lastChar>[^$])?/g // https://regexr.com/81c16
|
|
268
|
-
, (_, firstChar, secondChar, interpolationKey, interpolationFunctions, lastChar) => {
|
|
269
|
-
const configFilePath = path.relative(process.cwd(), filePath);
|
|
270
|
-
const context = {
|
|
271
|
-
interpolationKey,
|
|
272
|
-
interpolationFunctions,
|
|
273
|
-
inputsSpecification,
|
|
274
|
-
configFilePath,
|
|
275
|
-
...ctx,
|
|
276
|
-
};
|
|
277
|
-
firstChar ??= "";
|
|
278
|
-
secondChar ??= "";
|
|
279
|
-
lastChar ??= "";
|
|
280
|
-
const { inputValue, inputType } = parseIncludeInputs(context);
|
|
281
|
-
const firstTwoChar = firstChar + secondChar;
|
|
282
|
-
switch (inputType) {
|
|
283
|
-
case "array":
|
|
284
|
-
if ((secondChar == "\"" && lastChar == "\"") && firstChar != "\\") {
|
|
285
|
-
return firstChar + JSON.stringify(inputValue);
|
|
286
|
-
}
|
|
287
|
-
// NOTE: This behaves slightly differently from gitlab.com. I can't come up with practical use case so i don't think it's worth the effort to mimic this
|
|
288
|
-
return firstTwoChar + JSON.stringify(JSON.stringify(inputValue)).slice(1, -1) + lastChar;
|
|
289
|
-
case "string":
|
|
290
|
-
return firstTwoChar +
|
|
291
|
-
JSON.stringify(inputValue) // ensure a valid json string
|
|
292
|
-
.slice(1, -1) + // remove the surrounding "
|
|
293
|
-
lastChar;
|
|
294
|
-
case "number":
|
|
295
|
-
case "boolean":
|
|
296
|
-
if ((secondChar == "\"" && lastChar == "\"") && firstChar != "\\") {
|
|
297
|
-
return firstChar + inputValue;
|
|
298
|
-
}
|
|
299
|
-
return firstTwoChar + inputValue + lastChar;
|
|
300
|
-
default:
|
|
301
|
-
Utils.switchStatementExhaustiveCheck(inputType);
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
return JSON.parse(interpolatedConfigurations);
|
|
305
|
-
}
|
|
306
|
-
return fileData[0];
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
function isGitlabSpecFile(fileData) {
|
|
310
|
-
return "spec" in fileData;
|
|
311
|
-
}
|
|
312
|
-
function validateInterpolationKey(ctx) {
|
|
313
|
-
const { configFilePath, interpolationKey, inputsSpecification } = ctx;
|
|
314
|
-
const invalidInterpolationKeyErr = chalk `This GitLab CI configuration is invalid: \`{blueBright ${configFilePath}}\`: unknown interpolation key: \`${interpolationKey}\`.`;
|
|
315
|
-
assert(inputsSpecification.spec.inputs?.[interpolationKey] !== undefined, invalidInterpolationKeyErr);
|
|
316
|
-
}
|
|
317
|
-
function validateInterpolationFunctions(ctx) {
|
|
318
|
-
const { interpolationFunctions, configFilePath } = ctx;
|
|
319
|
-
if (interpolationFunctions != "") {
|
|
320
|
-
console.log(chalk `{black.bgYellowBright WARN } interpolation functions is currently not supported via gitlab-ci-local. Functions will just be a no-op.`);
|
|
321
|
-
}
|
|
322
|
-
assert(interpolationFunctions.split("|").length <= MAX_FUNCTIONS, chalk `This GitLab CI configuration is invalid: \`{blueBright ${configFilePath}}\`: too many functions in interpolation block.`);
|
|
323
|
-
}
|
|
324
|
-
function validateInput(ctx) {
|
|
325
|
-
const { configFilePath, interpolationKey, inputsSpecification } = ctx;
|
|
326
|
-
const inputValue = getInputValue(ctx);
|
|
327
|
-
const options = inputsSpecification.spec.inputs[interpolationKey]?.options;
|
|
328
|
-
if (options) {
|
|
329
|
-
assert(options.includes(inputValue), chalk `This GitLab CI configuration is invalid: \`{blueBright ${configFilePath}}\`: \`{blueBright ${interpolationKey}}\` input: \`{blueBright ${inputValue}}\` cannot be used because it is not in the list of allowed options.`);
|
|
330
|
-
}
|
|
331
|
-
const expectedInputType = getExpectedInputType(ctx);
|
|
332
|
-
assert(INCLUDE_INPUTS_SUPPORTED_TYPES.includes(expectedInputType), chalk `This GitLab CI configuration is invalid: \`{blueBright ${configFilePath}}\`: header:spec:inputs:{blueBright ${interpolationKey}} input type unknown value: {blueBright ${expectedInputType}}.`);
|
|
333
|
-
const inputType = Array.isArray(inputValue) ? "array" : typeof inputValue;
|
|
334
|
-
assert(inputType === expectedInputType, chalk `This GitLab CI configuration is invalid: \`{blueBright ${configFilePath}}\`: \`{blueBright ${interpolationKey}}\` input: provided value is not a {blueBright ${expectedInputType}}.`);
|
|
335
|
-
const regex = inputsSpecification.spec.inputs[interpolationKey]?.regex;
|
|
336
|
-
if (regex) {
|
|
337
|
-
console.log(chalk `{black.bgYellowBright WARN } spec:inputs:regex is currently not supported via gitlab-ci-local. This will just be a no-op.`);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
function parseIncludeInputs(ctx) {
|
|
341
|
-
validateInterpolationKey(ctx);
|
|
342
|
-
validateInterpolationFunctions(ctx);
|
|
343
|
-
validateInput(ctx);
|
|
344
|
-
return { inputValue: getInputValue(ctx), inputType: getExpectedInputType(ctx) };
|
|
345
|
-
}
|
|
346
|
-
function getInputValue(ctx) {
|
|
347
|
-
const { inputs, interpolationKey, configFilePath, inputsSpecification } = ctx;
|
|
348
|
-
const inputValue = inputs?.[interpolationKey] ??
|
|
349
|
-
inputsSpecification.spec.inputs[interpolationKey]?.default;
|
|
350
|
-
assert(inputValue !== undefined, chalk `This GitLab CI configuration is invalid: \`{blueBright ${configFilePath}}\`: \`{blueBright ${interpolationKey}}\` input: required value has not been provided.`);
|
|
351
|
-
return inputValue;
|
|
352
|
-
}
|
|
353
|
-
function getExpectedInputType(ctx) {
|
|
354
|
-
const { interpolationKey, inputsSpecification } = ctx;
|
|
355
|
-
return inputsSpecification.spec.inputs[interpolationKey]?.type || "string";
|
|
356
|
-
}
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sWUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxZQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNqQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUc3RCxPQUFPLEVBQUMsSUFBSSxJQUFJLHVCQUF1QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFMUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUd6RixNQUFNLE9BQU8sTUFBTTtJQUVQLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDdkIs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QWdCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDL0QsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsS0FBSyxDQUFBLDBEQUEwRCxjQUFjLHNCQUFzQixnQkFBZ0Isa0RBQWtELENBQUMsQ0FBQztJQUN4TSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBRSxHQUFRO0lBQ25DLE1BQU0sRUFBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBQyxHQUFHLEdBQUcsQ0FBQztJQUNwRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDO0FBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrLXRlbXBsYXRlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcImRlZXAtZXh0ZW5kXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iLmpzXCI7XG5pbXBvcnQgKiBhcyBEYXRhRXhwYW5kZXIgZnJvbSBcIi4vZGF0YS1leHBhbmRlci5qc1wiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtWYWxpZGF0b3J9IGZyb20gXCIuL3ZhbGlkYXRvci5qc1wiO1xuaW1wb3J0ICogYXMgcGFyYWxsZWwgZnJvbSBcIi4vcGFyYWxsZWwuanNcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGEuanNcIjtcbmltcG9ydCB7UGFyc2VySW5jbHVkZXN9IGZyb20gXCIuL3BhcnNlci1pbmNsdWRlcy5qc1wiO1xuaW1wb3J0IHtQcm9kdWNlcnN9IGZyb20gXCIuL3Byb2R1Y2Vycy5qc1wiO1xuaW1wb3J0IHtWYXJpYWJsZXNGcm9tRmlsZXN9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzLmpzXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3YuanNcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge2luaXQgYXMgaW5pdFByZWRlZmluZWRWYXJpYWJsZXN9IGZyb20gXCIuL3ByZWRlZmluZWQtdmFyaWFibGVzLmpzXCI7XG5cbmNvbnN0IE1BWF9GVU5DVElPTlMgPSAzO1xuY29uc3QgSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTID0gW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiLCBcIm51bWJlclwiLCBcImFycmF5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSW5wdXRUeXBlID0gdHlwZW9mIElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFU1tudW1iZXJdO1xuXG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcblxuICAgIHByaXZhdGUgX3N0YWdlczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9naXRsYWJEYXRhOiBhbnk7XG4gICAgcHJpdmF0ZSBfam9iTmFtZVBhZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICByZWFkb25seSBqb2JzOiBKb2JbXTtcbiAgICByZWFkb25seSBhcmd2OiBBcmd2O1xuICAgIHJlYWRvbmx5IHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSWlkOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvciAoYXJndjogQXJndiwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkOiBudW1iZXIsIGpvYnM6IEpvYltdLCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5hcmd2ID0gYXJndjtcbiAgICAgICAgdGhpcy53cml0ZVN0cmVhbXMgPSB3cml0ZVN0cmVhbXM7XG4gICAgICAgIHRoaXMucGlwZWxpbmVJaWQgPSBwaXBlbGluZUlpZDtcbiAgICAgICAgdGhpcy5qb2JzID0gam9icztcbiAgICAgICAgdGhpcy5leHBhbmRWYXJpYWJsZXMgPSBleHBhbmRWYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IHN0YWdlcyAoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhZ2VzO1xuICAgIH1cblxuICAgIGdldCBnaXRsYWJEYXRhICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dpdGxhYkRhdGE7XG4gICAgfVxuXG4gICAgZ2V0IGpvYk5hbWVQYWQgKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qb2JOYW1lUGFkID8/IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGNyZWF0ZSAoYXJndjogQXJndiwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkOiBudW1iZXIsIGpvYnM6IEpvYltdLCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoYXJndiwgd3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZCwgam9icywgZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGF3YWl0IHBhcnNlci5pbml0KCk7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzID0gYXdhaXQgVmFsaWRhdG9yLnJ1bihwYXJzZXIuam9icywgcGFyc2VyLnN0YWdlcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2YgcGFyc2VyLmpvYnMpIHtcbiAgICAgICAgICAgIGlmIChqb2IuYXJ0aWZhY3RzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgam9iLmRlbGV0ZUFydGlmYWN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2luZ1RpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgY29uc3QgcGF0aFRvRXhwYW5kZWRHaXRMYWJDaSA9IHBhdGguam9pbihhcmd2LmN3ZCwgYXJndi5zdGF0ZURpciwgXCJleHBhbmRlZC1naXRsYWItY2kueW1sXCIpO1xuICAgICAgICBmcy5ta2RpcnBTeW5jKHBhdGguam9pbihhcmd2LmN3ZCwgYXJndi5zdGF0ZURpcikpO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGhUb0V4cGFuZGVkR2l0TGFiQ2ksIHlhbWwuZHVtcChwYXJzZXIuZ2l0bGFiRGF0YSkpO1xuICAgICAgICBpZiAoYXJndi5jaGlsZFBpcGVsaW5lRGVwdGggPT0gMCkgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBwYXJzaW5nIGFuZCBkb3dubG9hZHMgZmluaXNoZWQgaW4gJHtwcmV0dHlIcnRpbWUocGFyc2luZ1RpbWUpfS59XFxuYCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHt3YXJuaW5nfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICMgU2Vjb25kIGxheWVyIG9mIGNoZWNrIGZvciBlcnJvcnMgdGhhdCBhcmUgbm90IGNhdWdodCBpbiBWYWxpZGF0b3IucnVuXG4gICAgICAgIGlmIChwYXJzZXIuYXJndi5qc29uU2NoZW1hVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBWYWxpZGF0b3IuanNvblNjaGVtYVZhbGlkYXRpb24oe1xuICAgICAgICAgICAgICAgIHBhdGhUb0V4cGFuZGVkR2l0TGFiQ2ksXG4gICAgICAgICAgICAgICAgZ2l0TGFiQ2lDb25maWc6IHBhcnNlci5naXRsYWJEYXRhLFxuICAgICAgICAgICAgICAgIGFyZ3YsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChhcmd2LmNoaWxkUGlwZWxpbmVEZXB0aCA9PSAwKSB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IGpzb24gc2NoZW1hIHZhbGlkYXRlZCBpbiAke3ByZXR0eUhydGltZShwcm9jZXNzLmhydGltZSh0aW1lKSl9fVxcbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZXI7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdCAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSB0aGlzLmFyZ3Y7XG4gICAgICAgIGNvbnN0IGN3ZCA9IGFyZ3YuY3dkO1xuICAgICAgICBjb25zdCBzdGF0ZURpciA9IGFyZ3Yuc3RhdGVEaXI7XG4gICAgICAgIGNvbnN0IHdyaXRlU3RyZWFtcyA9IHRoaXMud3JpdGVTdHJlYW1zO1xuICAgICAgICBjb25zdCBmaWxlID0gYXJndi5maWxlO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IHRoaXMucGlwZWxpbmVJaWQ7XG4gICAgICAgIGNvbnN0IGZldGNoSW5jbHVkZXMgPSBhcmd2LmZldGNoSW5jbHVkZXM7XG4gICAgICAgIGNvbnN0IGdpdERhdGEgPSBhd2FpdCBHaXREYXRhLmluaXQoY3dkLCB3cml0ZVN0cmVhbXMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXNGcm9tRmlsZXMgPSBhd2FpdCBWYXJpYWJsZXNGcm9tRmlsZXMuaW5pdChhcmd2LCB3cml0ZVN0cmVhbXMsIGdpdERhdGEpO1xuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzKTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IGluaXRQcmVkZWZpbmVkVmFyaWFibGVzKHtnaXREYXRhLCBhcmd2LCBlbnZNYXRjaGVkVmFyaWFibGVzfSk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHsuLi5wcmVkZWZpbmVkVmFyaWFibGVzLCAuLi5lbnZNYXRjaGVkVmFyaWFibGVzLCAuLi5hcmd2LnZhcmlhYmxlfTtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBVdGlscy5leHBhbmRWYXJpYWJsZXModmFyaWFibGVzKTtcblxuICAgICAgICBsZXQgeWFtbERhdGFMaXN0OiBhbnlbXSA9IFt7c3RhZ2VzOiBbXCIucHJlXCIsIFwiYnVpbGRcIiwgXCJ0ZXN0XCIsIFwiZGVwbG95XCIsIFwiLnBvc3RcIl19XTtcbiAgICAgICAgY29uc3QgZ2l0bGFiQ2lEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vJHtmaWxlfWAsIHt9LCB0aGlzLmV4cGFuZFZhcmlhYmxlcyk7XG5cbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpRGF0YSwge2FyZ3YsIGN3ZCwgc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgdmFyaWFibGVzOiBleHBhbmRlZCwgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlcywgbWF4aW11bUluY2x1ZGVzOiBhcmd2Lm1heGltdW1JbmNsdWRlc30pKTtcbiAgICAgICAgUGFyc2VySW5jbHVkZXMucmVzZXRDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGdpdGxhYkNpTG9jYWxEYXRhID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vLmdpdGxhYi1jaS1sb2NhbC55bWxgLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICB5YW1sRGF0YUxpc3QgPSB5YW1sRGF0YUxpc3QuY29uY2F0KGF3YWl0IFBhcnNlckluY2x1ZGVzLmluaXQoZ2l0bGFiQ2lMb2NhbERhdGEsIHthcmd2LCBjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsIG1heGltdW1JbmNsdWRlczogYXJndi5tYXhpbXVtSW5jbHVkZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJEYXRhOiBhbnkgPSBkZWVwRXh0ZW5kKHt9LCAuLi55YW1sRGF0YUxpc3QpO1xuXG4gICAgICAgIC8vIEV4cGFuZCB2YXJpb3VzIGZpZWxkcyBpbiBnaXRsYWJEYXRhXG4gICAgICAgIERhdGFFeHBhbmRlci5qb2JFeHRlbmRzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIucmVmZXJlbmNlKGdpdGxhYkRhdGEsIGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZmxhdHRlbkxpc3RzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIudHJhbnNmb3JtRGVwcmVjYXRlZEdsb2JhbERlZmF1bHRTeW50YXgoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5pbmhlcml0RGVmYXVsdChnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLm5vcm1hbGl6ZShnaXRsYWJEYXRhKTtcblxuICAgICAgICBhc3NlcnQoZ2l0bGFiRGF0YS5zdGFnZXMgJiYgQXJyYXkuaXNBcnJheShnaXRsYWJEYXRhLnN0YWdlcyksIGNoYWxrYHt5ZWxsb3cgc3RhZ2VzOn0gbXVzdCBiZSBhbiBhcnJheWApO1xuICAgICAgICBpZiAoIWdpdGxhYkRhdGEuc3RhZ2VzLmluY2x1ZGVzKFwiLnByZVwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMudW5zaGlmdChcIi5wcmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wb3N0XCIpKSB7XG4gICAgICAgICAgICBnaXRsYWJEYXRhLnN0YWdlcy5wdXNoKFwiLnBvc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3RhZ2VzID0gZ2l0bGFiRGF0YS5zdGFnZXM7XG5cbiAgICAgICAgLy8gQ2hlY2sgam9iIHZhcmlhYmxlcyBmb3IgaW52YWxpZCBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycywgYW5kIGNhc3QgbnVtYmVycyB0byBzdHJpbmdzXG4gICAgICAgIFV0aWxzLmZvckVhY2hSZWFsSm9iKGdpdGxhYkRhdGEsIChqb2JOYW1lLCBqb2JEYXRhKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQoam9iRGF0YS53aGVuICE9PSBcIm5ldmVyXCIsXG4gICAgICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBqb2JzOiR7am9iTmFtZX0gd2hlbjpuZXZlciBjYW4gb25seSBiZSB1c2VkIGluIGEgcnVsZXMgc2VjdGlvbiBvciB3b3JrZmxvdzpydWxlc2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoam9iRGF0YS52YXJpYWJsZXMgPz8ge30pKSB7XG4gICAgICAgICAgICAgICAgam9iRGF0YS52YXJpYWJsZXNba2V5XSA9IFV0aWxzLm5vcm1hbGl6ZVZhcmlhYmxlcyh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGpvYkRhdGEuc2VydmljZXMgPz8gW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IGpvYkRhdGEuc2VydmljZXNbaV07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VydmljZS52YXJpYWJsZXMgfHwge30pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iTmFtZX0uc2VydmljZXNbJHtpfV19IGhhcyBpbnZhbGlkIHZhcmlhYmxlcyBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycy4gJHtrZXl9PSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgam9iRGF0YS5zZXJ2aWNlc1tpXS52YXJpYWJsZXNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9naXRsYWJEYXRhID0gZ2l0bGFiRGF0YTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBqb2JzIGFuZCBwdXQgdGhlbSBpbnRvIHN0YWdlc1xuICAgICAgICBVdGlscy5mb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhLCAoam9iTmFtZSwgam9iRGF0YSkgPT4ge1xuICAgICAgICAgICAgYXNzZXJ0KGdpdERhdGEgIT0gbnVsbCwgXCJnaXREYXRhIG11c3QgYmUgc2V0XCIpO1xuICAgICAgICAgICAgYXNzZXJ0KHZhcmlhYmxlc0Zyb21GaWxlcyAhPSBudWxsLCBcImhvbWVWYXJpYWJsZXMgbXVzdCBiZSBzZXRcIik7XG5cbiAgICAgICAgICAgIGxldCBub2RlSW5kZXggPSAxO1xuICAgICAgICAgICAgY29uc3QgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0ID0gcGFyYWxsZWwubWF0cml4VmFyaWFibGVzTGlzdChqb2JEYXRhLCBqb2JOYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMgb2YgcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1hdHJpeEpvYk5hbWUgPSBqb2JOYW1lO1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske09iamVjdC52YWx1ZXMocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMgPz8gW10pLmpvaW4oXCIsXCIpfV1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYWxsZWwuaXNQbGFpblBhcmFsbGVsKGpvYkRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeEpvYk5hbWUgPSBgJHtqb2JOYW1lfTogWyR7bm9kZUluZGV4fS8ke3BhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdC5sZW5ndGh9XWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgam9iID0gbmV3IEpvYih7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3YsXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogam9iRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbWF0cml4Sm9iTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYmFzZU5hbWU6IGpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlczogZ2l0bGFiRGF0YS52YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lSWlkOiBwaXBlbGluZUlpZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZGVmaW5lZFZhcmlhYmxlczogey4uLnByZWRlZmluZWRWYXJpYWJsZXN9LCAvLyBOT1RFOiBwYXNzIGJ5IHZhbHVlIGJlY2F1c2UgcHJlZGVmaW5lZFZhcmlhYmxlcyBpcyBtdXRhdGVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICBnaXREYXRhLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNGcm9tRmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFZhcmlhYmxlczogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleDogKGpvYkRhdGEucGFyYWxsZWwgIT0gbnVsbCkgPyBub2RlSW5kZXggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvdGFsOiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kU3RhZ2UgPSB0aGlzLnN0YWdlcy5pbmNsdWRlcyhqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChmb3VuZFN0YWdlLCBjaGFsa2B7eWVsbG93IHN0YWdlOiR7am9iLnN0YWdlfX0gbm90IGZvdW5kIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnMucHVzaChqb2IpO1xuICAgICAgICAgICAgICAgIG5vZGVJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgc29tZSBwYWRkaW5nIHNvIHRoYXQgam9iIGxvZ3MgYXJlIG5pY2VseSBhbGlnbmVkXG4gICAgICAgIC8vIGFsbG93IHVzZXJzIHRvIG92ZXJyaWRlIHRoaXMgaW4gY2FzZSB0aGV5IGhhdmUgcmVhbGx5IGxvbmcgam9iIG5hbWUgKHNlZSAjODQwKVxuICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsICYmIHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGpvYnMgPSB0aGlzLmFyZ3Yuam9iLmxlbmd0aCAhPT0gMCA/IHRoaXMuYXJndi5qb2IgOiB0aGlzLmpvYnM7XG4gICAgICAgICAgICBqb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBqb2JOZWVkc0xlbmd0aDogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubmVlZHMgJiYgdGhpcy5hcmd2LmpvYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5qb2JzLmZpbmQoaiA9PiBqLmJhc2VOYW1lID09PSBqb2IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQ/Lm5lZWRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqb2JOZWVkc0xlbmd0aCA9IGZvdW5kLm5lZWRzLm1hcChmID0+IGYuam9iLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgam9iTGVuZ3RoID0gdHlwZW9mIGpvYiA9PSBcInN0cmluZ1wiID8gam9iLmxlbmd0aCA6IGpvYi5uYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5tYXgoam9iTGVuZ3RoLCB0aGlzLl9qb2JOYW1lUGFkID8/IDAsIC4uLmpvYk5lZWRzTGVuZ3RoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBNYXRoLm1pbih0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgPz8gMCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBqb2JOYW1lUGFkIG9uIGFsbCBqb2JzXG4gICAgICAgIHRoaXMuam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpvYi5qb2JOYW1lUGFkID0gdGhpcy5qb2JOYW1lUGFkO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBwcm9kdWNlcnMgZm9yIGVhY2ggam9iXG4gICAgICAgIHRoaXMuam9icy5mb3JFYWNoKChqb2IpID0+IHtcbiAgICAgICAgICAgIGpvYi5wcm9kdWNlcnMgPSBQcm9kdWNlcnMuaW5pdCh0aGlzLmpvYnMsIHRoaXMuc3RhZ2VzLCBqb2IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgbG9hZFlhbWwgKGZpbGVQYXRoOiBzdHJpbmcsIGN0eDogYW55ID0ge30sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCB5bWxQYXRoID0gYCR7ZmlsZVBhdGh9YDtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHltbFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGAke2ZpbGVQYXRofWAsIFwidXRmOFwiKTtcbiAgICAgICAgY29uc3QgZmlsZVNwbGl0ID0gZmlsZUNvbnRlbnQuc3BsaXQoL1xccj9cXG4vZyk7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdENsb25lID0gZmlsZVNwbGl0LnNsaWNlKCk7XG5cbiAgICAgICAgbGV0IGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgZGVzY3JpcHRpb25NYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBpbmplY3RTU0hBZ2VudCA9IG51bGw7XG4gICAgICAgIGxldCBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBpZiAoZXhwYW5kVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmlsZVNwbGl0KSB7XG4gICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVNYXRjaCA9IGludGVyYWN0aXZlTWF0Y2ggPz8gLyNcXHM/QFxccz9bSWldbnRlcmFjdGl2ZS8uZXhlYyhsaW5lKTtcbiAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9IGluamVjdFNTSEFnZW50ID8/IC8jXFxzP0BcXHM/W0lpXW5qZWN0U1NIQWdlbnQvLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID8/IC8jXFxzP0BcXHM/Tm9BcnRpZmFjdHNUb1NvdXJjZS9pLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25NYXRjaCA9IGRlc2NyaXB0aW9uTWF0Y2ggPz8gLyNcXHM/QFxccz9bRGRdZXNjcmlwdGlvbiAoPzxkZXNjcmlwdGlvbj4uKikvLmV4ZWMobGluZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JNYXRjaCA9IC9cXHc6Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChqb2JNYXRjaCAmJiAoaW50ZXJhY3RpdmVNYXRjaCB8fCBkZXNjcmlwdGlvbk1hdGNoIHx8IGluamVjdFNTSEFnZW50IHx8IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aXZlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbnRlcmFjdGl2ZTogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW5qZWN0U1NIQWdlbnQ6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xBcnRpZmFjdHNUb1NvdXJjZTogZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbk1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBgICBnY2xEZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbk1hdGNoPy5ncm91cHM/LmRlc2NyaXB0aW9uID8/IFwiXCJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IG5ldyB5YW1sLlR5cGUoXCIhcmVmZXJlbmNlXCIsIHtcbiAgICAgICAgICAgIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgICAgICAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3JlZmVyZW5jZURhdGE6IGRhdGF9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHlhbWwuREVGQVVMVF9TQ0hFTUEuZXh0ZW5kKFtyZWZlcmVuY2VUeXBlXSk7XG4gICAgICAgIGxldCBmaWxlRGF0YTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYX0pIGFzIGFueVtdO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgeWFtbC5ZQU1MRXhjZXB0aW9uICYmIGUucmVhc29uID09PSBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGR1cGxpY2F0ZWQgbWFwcGluZyBrZXkgZGV0ZWN0ZWQhIFZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuIWApO1xuICAgICAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWEsIGpzb246IHRydWV9KSBhcyBhbnlbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlRGF0YS5sZW5ndGggPD0gMSkgcmV0dXJuIGZpbGVEYXRhWzBdO1xuXG4gICAgICAgIGlmIChpc0dpdGxhYlNwZWNGaWxlKGZpbGVEYXRhWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRzU3BlY2lmaWNhdGlvbjogYW55ID0gZmlsZURhdGFbMF07XG4gICAgICAgICAgICBjb25zdCB1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zOiBhbnkgPSBmaWxlRGF0YVsxXTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMgPSBKU09OLnN0cmluZ2lmeSh1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvKD88Zmlyc3RDaGFyPi4pPyg/PHNlY29uZENoYXI+Lik/XFwkXFxbXFxbXFxzKmlucHV0cy4oPzxpbnRlcnBvbGF0aW9uS2V5PltcXHctXSspXFxzKlxcfD9cXHMqKD88aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucz4uKj8pXFxzKlxcXVxcXSg/PGxhc3RDaGFyPlteJF0pPy9nIC8vIGh0dHBzOi8vcmVnZXhyLmNvbS84MWMxNlxuICAgICAgICAgICAgICAgICAgICAsIChfOiBzdHJpbmcsIGZpcnN0Q2hhcjogc3RyaW5nLCBzZWNvbmRDaGFyOiBzdHJpbmcsIGludGVycG9sYXRpb25LZXk6IHN0cmluZywgaW50ZXJwb2xhdGlvbkZ1bmN0aW9uczogc3RyaW5nLCBsYXN0Q2hhcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb25GdW5jdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyID8/PSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2hhciA/Pz0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID8/PSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7aW5wdXRWYWx1ZSwgaW5wdXRUeXBlfSA9IHBhcnNlSW5jbHVkZUlucHV0cyhjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VHdvQ2hhciA9IGZpcnN0Q2hhciArIHNlY29uZENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNlY29uZENoYXIgPT0gXCJcXFwiXCIgJiYgbGFzdENoYXIgPT0gXCJcXFwiXCIpICYmIGZpcnN0Q2hhciAhPSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciArIEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogVGhpcyBiZWhhdmVzIHNsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gZ2l0bGFiLmNvbS4gSSBjYW4ndCBjb21lIHVwIHdpdGggcHJhY3RpY2FsIHVzZSBjYXNlIHNvIGkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGUgZWZmb3J0IHRvIG1pbWljIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0VHdvQ2hhciArIEpTT04uc3RyaW5naWZ5KEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpKS5zbGljZSgxLCAtMSkgKyBsYXN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaW5wdXRWYWx1ZSkgLy8gZW5zdXJlIGEgdmFsaWQganNvbiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSwgLTEpICsgLy8gcmVtb3ZlIHRoZSBzdXJyb3VuZGluZyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWNvbmRDaGFyID09IFwiXFxcIlwiICYmIGxhc3RDaGFyID09IFwiXFxcIlwiKSAmJiBmaXJzdENoYXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoYXIgKyBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFR3b0NoYXIgKyBpbnB1dFZhbHVlICsgbGFzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zd2l0Y2hTdGF0ZW1lbnRFeGhhdXN0aXZlQ2hlY2soaW5wdXRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVEYXRhWzBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNHaXRsYWJTcGVjRmlsZSAoZmlsZURhdGE6IGFueSkge1xuICAgIHJldHVybiBcInNwZWNcIiBpbiBmaWxlRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uS2V5IChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIgPSBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdW5rbm93biBpbnRlcnBvbGF0aW9uIGtleTogXFxgJHtpbnRlcnBvbGF0aW9uS2V5fVxcYC5gO1xuICAgIGFzc2VydChpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzPy5baW50ZXJwb2xhdGlvbktleV0gIT09IHVuZGVmaW5lZCwgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25GdW5jdGlvbnMsIGNvbmZpZ0ZpbGVQYXRofSA9IGN0eDtcbiAgICBpZiAoaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyAhPSBcIlwiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGludGVycG9sYXRpb24gZnVuY3Rpb25zIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIEZ1bmN0aW9ucyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG4gICAgYXNzZXJ0KGludGVycG9sYXRpb25GdW5jdGlvbnMuc3BsaXQoXCJ8XCIpLmxlbmd0aCA8PSBNQVhfRlVOQ1RJT05TLCBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdG9vIG1hbnkgZnVuY3Rpb25zIGluIGludGVycG9sYXRpb24gYmxvY2suYCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5wdXQgKGN0eDogYW55KSB7XG4gICAgY29uc3Qge2NvbmZpZ0ZpbGVQYXRoLCBpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0SW5wdXRWYWx1ZShjdHgpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0KG9wdGlvbnMuaW5jbHVkZXMoaW5wdXRWYWx1ZSksXG4gICAgICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IFxcYHtibHVlQnJpZ2h0ICR7aW5wdXRWYWx1ZX19XFxgIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgb3B0aW9ucy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZElucHV0VHlwZSA9IGdldEV4cGVjdGVkSW5wdXRUeXBlKGN0eCk7XG4gICAgYXNzZXJ0KElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUy5pbmNsdWRlcyhleHBlY3RlZElucHV0VHlwZSksXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBoZWFkZXI6c3BlYzppbnB1dHM6e2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX0gaW5wdXQgdHlwZSB1bmtub3duIHZhbHVlOiB7Ymx1ZUJyaWdodCAke2V4cGVjdGVkSW5wdXRUeXBlfX0uYCk7XG5cbiAgICBjb25zdCBpbnB1dFR5cGUgPSBBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpID8gXCJhcnJheVwiIDogdHlwZW9mIGlucHV0VmFsdWU7XG4gICAgYXNzZXJ0KGlucHV0VHlwZSA9PT0gZXhwZWN0ZWRJbnB1dFR5cGUsXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEge2JsdWVCcmlnaHQgJHtleHBlY3RlZElucHV0VHlwZX19LmApO1xuXG4gICAgY29uc3QgcmVnZXggPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5yZWdleDtcbiAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gc3BlYzppbnB1dHM6cmVnZXggaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGdpdGxhYi1jaS1sb2NhbC4gVGhpcyB3aWxsIGp1c3QgYmUgYSBuby1vcC5gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW5jbHVkZUlucHV0cyAoY3R4OiBhbnkpOiB7aW5wdXRWYWx1ZTogYW55OyBpbnB1dFR5cGU6IElucHV0VHlwZX0ge1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleShjdHgpO1xuICAgIHZhbGlkYXRlSW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyhjdHgpO1xuICAgIHZhbGlkYXRlSW5wdXQoY3R4KTtcbiAgICByZXR1cm4ge2lucHV0VmFsdWU6IGdldElucHV0VmFsdWUoY3R4KSwgaW5wdXRUeXBlOiBnZXRFeHBlY3RlZElucHV0VHlwZShjdHgpfTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW5wdXRzLCBpbnRlcnBvbGF0aW9uS2V5LCBjb25maWdGaWxlUGF0aCwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0cz8uW2ludGVycG9sYXRpb25LZXldID8/XG4gICAgICAgIGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LmRlZmF1bHQ7XG4gICAgYXNzZXJ0KGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCwgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiByZXF1aXJlZCB2YWx1ZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQuYCk7XG4gICAgcmV0dXJuIGlucHV0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGVjdGVkSW5wdXRUeXBlIChjdHg6IGFueSk6IElucHV0VHlwZSB7XG4gICAgY29uc3Qge2ludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIHJldHVybiBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy50eXBlIHx8IFwic3RyaW5nXCI7XG59XG4iXX0=
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import camelCase from "camelcase";
|
|
2
|
-
export function init({ gitData, argv, envMatchedVariables }) {
|
|
3
|
-
const _variables = { ...envMatchedVariables, ...argv.variable };
|
|
4
|
-
// precedence:
|
|
5
|
-
// 1. cli option
|
|
6
|
-
// 2. gitlab variables files
|
|
7
|
-
// 3. values derieved implicitly from `git remote -v`
|
|
8
|
-
// 4. default value
|
|
9
|
-
const CI_SERVER_PROTOCOL = _variables["CI_SERVER_PROTOCOL"] ?? ((gitData.remote.schema === "http" || gitData.remote.schema === "https") ? gitData.remote.schema : "https");
|
|
10
|
-
const CI_SERVER_PORT = _variables["CI_SERVER_PORT"] ?? ((gitData.remote.schema === "http" || gitData.remote.schema === "https") ? gitData.remote.port : "443");
|
|
11
|
-
const CI_SERVER_SHELL_SSH_PORT = _variables["CI_SERVER_SHELL_SSH_PORT"] ?? ((gitData.remote.schema === "ssh") ? gitData.remote.port : "22");
|
|
12
|
-
const CI_SERVER_HOST = _variables["CI_SERVER_HOST"] ?? `${gitData.remote.host}`;
|
|
13
|
-
const CI_SERVER_FQDN = _variables["CI_SERVER_FQDN"] ?? (CI_SERVER_PORT == "443" ? gitData.remote.host : `${gitData.remote.host}:${CI_SERVER_PORT}`);
|
|
14
|
-
const CI_SERVER_URL = _variables["CI_SERVER_URL"] ?? `${CI_SERVER_PROTOCOL}://${CI_SERVER_FQDN}`;
|
|
15
|
-
const CI_PROJECT_ROOT_NAMESPACE = gitData.remote.group.split("/")[0];
|
|
16
|
-
const CI_PROJECT_NAMESPACE = gitData.remote.group;
|
|
17
|
-
const CI_DEPENDENCY_PROXY_SERVER = CI_SERVER_FQDN.includes(":") ? CI_SERVER_FQDN : `${CI_SERVER_HOST}:${CI_SERVER_PORT}`;
|
|
18
|
-
const predefinedVariables = {
|
|
19
|
-
CI: "true",
|
|
20
|
-
GITLAB_USER_LOGIN: gitData.user["GITLAB_USER_LOGIN"],
|
|
21
|
-
GITLAB_USER_EMAIL: gitData.user["GITLAB_USER_EMAIL"],
|
|
22
|
-
GITLAB_USER_NAME: gitData.user["GITLAB_USER_NAME"],
|
|
23
|
-
GITLAB_USER_ID: gitData.user["GITLAB_USER_ID"],
|
|
24
|
-
CI_COMMIT_SHORT_SHA: gitData.commit.SHA.slice(0, 8), // Changes
|
|
25
|
-
CI_COMMIT_SHA: gitData.commit.SHA,
|
|
26
|
-
CI_PROJECT_NAME: gitData.remote.project,
|
|
27
|
-
CI_PROJECT_TITLE: `${camelCase(gitData.remote.project)}`,
|
|
28
|
-
CI_PROJECT_PATH: `${gitData.remote.group}/${gitData.remote.project}`,
|
|
29
|
-
CI_PROJECT_PATH_SLUG: `${gitData.remote.group.replace(/\//g, "-")}-${gitData.remote.project}`.toLowerCase(),
|
|
30
|
-
CI_PROJECT_ROOT_NAMESPACE: CI_PROJECT_ROOT_NAMESPACE,
|
|
31
|
-
CI_PROJECT_NAMESPACE: CI_PROJECT_NAMESPACE,
|
|
32
|
-
CI_PROJECT_VISIBILITY: "internal",
|
|
33
|
-
CI_PROJECT_ID: "1217",
|
|
34
|
-
CI_COMMIT_REF_PROTECTED: "false",
|
|
35
|
-
CI_COMMIT_BRANCH: gitData.commit.REF_NAME, // Not available in merge request or tag pipelines
|
|
36
|
-
CI_COMMIT_REF_NAME: gitData.commit.REF_NAME, // Tag or branch name
|
|
37
|
-
CI_COMMIT_REF_SLUG: gitData.commit.REF_NAME.replace(/[^a-z\d]+/ig, "-").replace(/^-/, "").slice(0, 63).replace(/-$/, "").toLowerCase(),
|
|
38
|
-
CI_COMMIT_TIMESTAMP: gitData.commit.TIMESTAMP,
|
|
39
|
-
CI_PIPELINE_CREATED_AT: new Date().toISOString().split(".")[0] + "Z",
|
|
40
|
-
CI_COMMIT_TITLE: "Commit Title", // First line of commit message.
|
|
41
|
-
CI_COMMIT_MESSAGE: "Commit Title\nMore commit text", // Full commit message
|
|
42
|
-
CI_COMMIT_DESCRIPTION: "More commit text",
|
|
43
|
-
CI_DEFAULT_BRANCH: gitData.branches.default,
|
|
44
|
-
CI_PIPELINE_SOURCE: "push",
|
|
45
|
-
CI_SERVER_FQDN: CI_SERVER_FQDN,
|
|
46
|
-
CI_SERVER_HOST: CI_SERVER_HOST,
|
|
47
|
-
CI_SERVER_PORT: CI_SERVER_PORT,
|
|
48
|
-
CI_SERVER_SHELL_SSH_PORT: CI_SERVER_SHELL_SSH_PORT,
|
|
49
|
-
CI_SERVER_URL: CI_SERVER_URL,
|
|
50
|
-
CI_SERVER_PROTOCOL: CI_SERVER_PROTOCOL,
|
|
51
|
-
CI_API_V4_URL: `${CI_SERVER_URL}/api/v4`,
|
|
52
|
-
CI_PROJECT_URL: `${CI_SERVER_URL}/${gitData.remote.group}/${gitData.remote.project}`,
|
|
53
|
-
CI_TEMPLATE_REGISTRY_HOST: "registry.gitlab.com",
|
|
54
|
-
GITLAB_CI: "false",
|
|
55
|
-
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: argv.umask ? "false" : "true",
|
|
56
|
-
CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX: `${CI_DEPENDENCY_PROXY_SERVER}/${CI_PROJECT_NAMESPACE}/dependency_proxy/containers`,
|
|
57
|
-
CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX: `${CI_DEPENDENCY_PROXY_SERVER}/${CI_PROJECT_ROOT_NAMESPACE}/dependency_proxy/containers`,
|
|
58
|
-
CI_DEPENDENCY_PROXY_SERVER: CI_DEPENDENCY_PROXY_SERVER,
|
|
59
|
-
CI_DEPENDENCY_PROXY_USER: "gitlab-ci-token",
|
|
60
|
-
};
|
|
61
|
-
// Delete variables the user intentionally wants unset
|
|
62
|
-
for (const unsetVariable of argv.unsetVariables) {
|
|
63
|
-
delete predefinedVariables[unsetVariable];
|
|
64
|
-
}
|
|
65
|
-
return predefinedVariables;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGVmaW5lZC12YXJpYWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVkZWZpbmVkLXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFVbEMsTUFBTSxVQUFVLElBQUksQ0FBRSxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQTBCO0lBRS9FLE1BQU0sVUFBVSxHQUFHLEVBQUMsR0FBRyxtQkFBbUIsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQztJQUU5RCxjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLDRCQUE0QjtJQUM1QixxREFBcUQ7SUFDckQsbUJBQW1CO0lBQ25CLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNLLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvSixNQUFNLHdCQUF3QixHQUFHLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0s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QUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2FtZWxDYXNlIGZyb20gXCJjYW1lbGNhc2VcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGEuanNcIjtcbmltcG9ydCB7QXJndn0gZnJvbSBcIi4vYXJndi5qc1wiO1xuXG50eXBlIFByZWRlZmluZWRWYXJpYWJsZXNPcHRzID0ge1xuICAgIGdpdERhdGE6IEdpdERhdGE7XG4gICAgYXJndjogQXJndjtcbiAgICBlbnZNYXRjaGVkVmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0ICh7Z2l0RGF0YSwgYXJndiwgZW52TWF0Y2hlZFZhcmlhYmxlc306IFByZWRlZmluZWRWYXJpYWJsZXNPcHRzKToge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcblxuICAgIGNvbnN0IF92YXJpYWJsZXMgPSB7Li4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndi52YXJpYWJsZX07XG5cbiAgICAvLyBwcmVjZWRlbmNlOlxuICAgIC8vIDEuIGNsaSBvcHRpb25cbiAgICAvLyAyLiBnaXRsYWIgdmFyaWFibGVzIGZpbGVzXG4gICAgLy8gMy4gdmFsdWVzIGRlcmlldmVkIGltcGxpY2l0bHkgZnJvbSBgZ2l0IHJlbW90ZSAtdmBcbiAgICAvLyA0LiBkZWZhdWx0IHZhbHVlXG4gICAgY29uc3QgQ0lfU0VSVkVSX1BST1RPQ09MID0gX3ZhcmlhYmxlc1tcIkNJX1NFUlZFUl9QUk9UT0NPTFwiXSA/PyAoKGdpdERhdGEucmVtb3RlLnNjaGVtYSA9PT0gXCJodHRwXCIgfHwgZ2l0RGF0YS5yZW1vdGUuc2NoZW1hID09PSBcImh0dHBzXCIpID8gZ2l0RGF0YS5yZW1vdGUuc2NoZW1hIDogXCJodHRwc1wiKTtcbiAgICBjb25zdCBDSV9TRVJWRVJfUE9SVCA9IF92YXJpYWJsZXNbXCJDSV9TRVJWRVJfUE9SVFwiXSA/PyAoKGdpdERhdGEucmVtb3RlLnNjaGVtYSA9PT0gXCJodHRwXCIgfHwgZ2l0RGF0YS5yZW1vdGUuc2NoZW1hID09PSBcImh0dHBzXCIpID8gZ2l0RGF0YS5yZW1vdGUucG9ydCA6IFwiNDQzXCIpO1xuICAgIGNvbnN0IENJX1NFUlZFUl9TSEVMTF9TU0hfUE9SVCA9IF92YXJpYWJsZXNbXCJDSV9TRVJWRVJfU0hFTExfU1NIX1BPUlRcIl0gPz8gKChnaXREYXRhLnJlbW90ZS5zY2hlbWEgPT09IFwic3NoXCIpID8gZ2l0RGF0YS5yZW1vdGUucG9ydCA6IFwiMjJcIik7XG4gICAgY29uc3QgQ0lfU0VSVkVSX0hPU1QgPSBfdmFyaWFibGVzW1wiQ0lfU0VSVkVSX0hPU1RcIl0gPz8gYCR7Z2l0RGF0YS5yZW1vdGUuaG9zdH1gO1xuICAgIGNvbnN0IENJX1NFUlZFUl9GUUROID0gX3ZhcmlhYmxlc1tcIkNJX1NFUlZFUl9GUUROXCJdID8/IChDSV9TRVJWRVJfUE9SVCA9PSBcIjQ0M1wiID8gZ2l0RGF0YS5yZW1vdGUuaG9zdCA6IGAke2dpdERhdGEucmVtb3RlLmhvc3R9OiR7Q0lfU0VSVkVSX1BPUlR9YCk7XG4gICAgY29uc3QgQ0lfU0VSVkVSX1VSTCA9IF92YXJpYWJsZXNbXCJDSV9TRVJWRVJfVVJMXCJdID8/IGAke0NJX1NFUlZFUl9QUk9UT0NPTH06Ly8ke0NJX1NFUlZFUl9GUUROfWA7XG4gICAgY29uc3QgQ0lfUFJPSkVDVF9ST09UX05BTUVTUEFDRSA9IGdpdERhdGEucmVtb3RlLmdyb3VwLnNwbGl0KFwiL1wiKVswXTtcbiAgICBjb25zdCBDSV9QUk9KRUNUX05BTUVTUEFDRSA9IGdpdERhdGEucmVtb3RlLmdyb3VwO1xuICAgIGNvbnN0IENJX0RFUEVOREVOQ1lfUFJPWFlfU0VSVkVSID0gQ0lfU0VSVkVSX0ZRRE4uaW5jbHVkZXMoXCI6XCIpID8gQ0lfU0VSVkVSX0ZRRE4gOiBgJHtDSV9TRVJWRVJfSE9TVH06JHtDSV9TRVJWRVJfUE9SVH1gO1xuXG4gICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7XG4gICAgICAgIENJOiBcInRydWVcIixcbiAgICAgICAgR0lUTEFCX1VTRVJfTE9HSU46IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX0xPR0lOXCJdLFxuICAgICAgICBHSVRMQUJfVVNFUl9FTUFJTDogZ2l0RGF0YS51c2VyW1wiR0lUTEFCX1VTRVJfRU1BSUxcIl0sXG4gICAgICAgIEdJVExBQl9VU0VSX05BTUU6IGdpdERhdGEudXNlcltcIkdJVExBQl9VU0VSX05BTUVcIl0sXG4gICAgICAgIEdJVExBQl9VU0VSX0lEOiBnaXREYXRhLnVzZXJbXCJHSVRMQUJfVVNFUl9JRFwiXSxcbiAgICAgICAgQ0lfQ09NTUlUX1NIT1JUX1NIQTogZ2l0RGF0YS5jb21taXQuU0hBLnNsaWNlKDAsIDgpLCAvLyBDaGFuZ2VzXG4gICAgICAgIENJX0NPTU1JVF9TSEE6IGdpdERhdGEuY29tbWl0LlNIQSxcbiAgICAgICAgQ0lfUFJPSkVDVF9OQU1FOiBnaXREYXRhLnJlbW90ZS5wcm9qZWN0LFxuICAgICAgICBDSV9QUk9KRUNUX1RJVExFOiBgJHtjYW1lbENhc2UoZ2l0RGF0YS5yZW1vdGUucHJvamVjdCl9YCxcbiAgICAgICAgQ0lfUFJPSkVDVF9QQVRIOiBgJHtnaXREYXRhLnJlbW90ZS5ncm91cH0vJHtnaXREYXRhLnJlbW90ZS5wcm9qZWN0fWAsXG4gICAgICAgIENJX1BST0pFQ1RfUEFUSF9TTFVHOiBgJHtnaXREYXRhLnJlbW90ZS5ncm91cC5yZXBsYWNlKC9cXC8vZywgXCItXCIpfS0ke2dpdERhdGEucmVtb3RlLnByb2plY3R9YC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBDSV9QUk9KRUNUX1JPT1RfTkFNRVNQQUNFOiBDSV9QUk9KRUNUX1JPT1RfTkFNRVNQQUNFLFxuICAgICAgICBDSV9QUk9KRUNUX05BTUVTUEFDRTogQ0lfUFJPSkVDVF9OQU1FU1BBQ0UsXG4gICAgICAgIENJX1BST0pFQ1RfVklTSUJJTElUWTogXCJpbnRlcm5hbFwiLFxuICAgICAgICBDSV9QUk9KRUNUX0lEOiBcIjEyMTdcIixcbiAgICAgICAgQ0lfQ09NTUlUX1JFRl9QUk9URUNURUQ6IFwiZmFsc2VcIixcbiAgICAgICAgQ0lfQ09NTUlUX0JSQU5DSDogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUsIC8vIE5vdCBhdmFpbGFibGUgaW4gbWVyZ2UgcmVxdWVzdCBvciB0YWcgcGlwZWxpbmVzXG4gICAgICAgIENJX0NPTU1JVF9SRUZfTkFNRTogZ2l0RGF0YS5jb21taXQuUkVGX05BTUUsIC8vIFRhZyBvciBicmFuY2ggbmFtZVxuICAgICAgICBDSV9DT01NSVRfUkVGX1NMVUc6IGdpdERhdGEuY29tbWl0LlJFRl9OQU1FLnJlcGxhY2UoL1teYS16XFxkXSsvaWcsIFwiLVwiKS5yZXBsYWNlKC9eLS8sIFwiXCIpLnNsaWNlKDAsIDYzKS5yZXBsYWNlKC8tJC8sIFwiXCIpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIENJX0NPTU1JVF9USU1FU1RBTVA6IGdpdERhdGEuY29tbWl0LlRJTUVTVEFNUCxcbiAgICAgICAgQ0lfUElQRUxJTkVfQ1JFQVRFRF9BVDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiLlwiKVswXSArIFwiWlwiLFxuICAgICAgICBDSV9DT01NSVRfVElUTEU6IFwiQ29tbWl0IFRpdGxlXCIsIC8vIEZpcnN0IGxpbmUgb2YgY29tbWl0IG1lc3NhZ2UuXG4gICAgICAgIENJX0NPTU1JVF9NRVNTQUdFOiBcIkNvbW1pdCBUaXRsZVxcbk1vcmUgY29tbWl0IHRleHRcIiwgLy8gRnVsbCBjb21taXQgbWVzc2FnZVxuICAgICAgICBDSV9DT01NSVRfREVTQ1JJUFRJT046IFwiTW9yZSBjb21taXQgdGV4dFwiLFxuICAgICAgICBDSV9ERUZBVUxUX0JSQU5DSDogZ2l0RGF0YS5icmFuY2hlcy5kZWZhdWx0LFxuICAgICAgICBDSV9QSVBFTElORV9TT1VSQ0U6IFwicHVzaFwiLFxuICAgICAgICBDSV9TRVJWRVJfRlFETjogQ0lfU0VSVkVSX0ZRRE4sXG4gICAgICAgIENJX1NFUlZFUl9IT1NUOiBDSV9TRVJWRVJfSE9TVCxcbiAgICAgICAgQ0lfU0VSVkVSX1BPUlQ6IENJX1NFUlZFUl9QT1JULFxuICAgICAgICBDSV9TRVJWRVJfU0hFTExfU1NIX1BPUlQ6IENJX1NFUlZFUl9TSEVMTF9TU0hfUE9SVCxcbiAgICAgICAgQ0lfU0VSVkVSX1VSTDogQ0lfU0VSVkVSX1VSTCxcbiAgICAgICAgQ0lfU0VSVkVSX1BST1RPQ09MOiBDSV9TRVJWRVJfUFJPVE9DT0wsXG4gICAgICAgIENJX0FQSV9WNF9VUkw6IGAke0NJX1NFUlZFUl9VUkx9L2FwaS92NGAsXG4gICAgICAgIENJX1BST0pFQ1RfVVJMOiBgJHtDSV9TRVJWRVJfVVJMfS8ke2dpdERhdGEucmVtb3RlLmdyb3VwfS8ke2dpdERhdGEucmVtb3RlLnByb2plY3R9YCxcbiAgICAgICAgQ0lfVEVNUExBVEVfUkVHSVNUUllfSE9TVDogXCJyZWdpc3RyeS5naXRsYWIuY29tXCIsXG4gICAgICAgIEdJVExBQl9DSTogXCJmYWxzZVwiLFxuICAgICAgICBGRl9ESVNBQkxFX1VNQVNLX0ZPUl9ET0NLRVJfRVhFQ1VUT1I6IGFyZ3YudW1hc2sgPyBcImZhbHNlXCIgOiBcInRydWVcIixcblxuICAgICAgICBDSV9ERVBFTkRFTkNZX1BST1hZX0RJUkVDVF9HUk9VUF9JTUFHRV9QUkVGSVg6IGAke0NJX0RFUEVOREVOQ1lfUFJPWFlfU0VSVkVSfS8ke0NJX1BST0pFQ1RfTkFNRVNQQUNFfS9kZXBlbmRlbmN5X3Byb3h5L2NvbnRhaW5lcnNgLFxuICAgICAgICBDSV9ERVBFTkRFTkNZX1BST1hZX0dST1VQX0lNQUdFX1BSRUZJWDogYCR7Q0lfREVQRU5ERU5DWV9QUk9YWV9TRVJWRVJ9LyR7Q0lfUFJPSkVDVF9ST09UX05BTUVTUEFDRX0vZGVwZW5kZW5jeV9wcm94eS9jb250YWluZXJzYCxcbiAgICAgICAgQ0lfREVQRU5ERU5DWV9QUk9YWV9TRVJWRVI6IENJX0RFUEVOREVOQ1lfUFJPWFlfU0VSVkVSLFxuICAgICAgICBDSV9ERVBFTkRFTkNZX1BST1hZX1VTRVI6IFwiZ2l0bGFiLWNpLXRva2VuXCIsXG4gICAgfTtcblxuICAgIC8vIERlbGV0ZSB2YXJpYWJsZXMgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB3YW50cyB1bnNldFxuICAgIGZvciAoY29uc3QgdW5zZXRWYXJpYWJsZSBvZiBhcmd2LnVuc2V0VmFyaWFibGVzKSB7XG4gICAgICAgIGRlbGV0ZSBwcmVkZWZpbmVkVmFyaWFibGVzW3Vuc2V0VmFyaWFibGVdO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVkZWZpbmVkVmFyaWFibGVzO1xufVxuIl19
|
package/src/producers.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Utils } from "./utils.js";
|
|
2
|
-
export class Producers {
|
|
3
|
-
static init(jobs, stages, job) {
|
|
4
|
-
const producerSet = new Set();
|
|
5
|
-
if (job.needs && job.needs.length === 0)
|
|
6
|
-
return [];
|
|
7
|
-
if (!job.needs && !job.dependencies) {
|
|
8
|
-
for (const jobName of Utils.getJobNamesFromPreviousStages(jobs, stages, job)) {
|
|
9
|
-
producerSet.add(jobName);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
(job.dependencies ?? []).forEach(dependency => {
|
|
13
|
-
const foundInNeeds = (job.needs ?? []).find(n => n.job === dependency);
|
|
14
|
-
if (foundInNeeds)
|
|
15
|
-
return;
|
|
16
|
-
producerSet.add(dependency);
|
|
17
|
-
});
|
|
18
|
-
(job.needs ?? []).forEach(need => {
|
|
19
|
-
if (!need.artifacts)
|
|
20
|
-
return;
|
|
21
|
-
if (need.pipeline)
|
|
22
|
-
return;
|
|
23
|
-
if (need.project)
|
|
24
|
-
return;
|
|
25
|
-
producerSet.add(need.job);
|
|
26
|
-
});
|
|
27
|
-
const producers = [];
|
|
28
|
-
for (const potential of jobs) {
|
|
29
|
-
if (potential.artifacts == null)
|
|
30
|
-
continue;
|
|
31
|
-
if (potential.when == "never")
|
|
32
|
-
continue;
|
|
33
|
-
if (!producerSet.has(potential.name) && !producerSet.has(potential.baseName))
|
|
34
|
-
continue;
|
|
35
|
-
producers.push(potential);
|
|
36
|
-
}
|
|
37
|
-
return producers.map(producer => {
|
|
38
|
-
return { name: producer.name, dotenv: producer?.artifacts?.reports?.dotenv ?? null };
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJvZHVjZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFHakMsTUFBTSxPQUFPLFNBQVM7SUFFbEIsTUFBTSxDQUFDLElBQUksQ0FBRSxJQUF3QixFQUFFLE1BQXlCLEVBQUUsR0FBUTtRQUN0RSxNQUFNLFdBQVcsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUUzQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0UsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0wsQ0FBQztRQUNELENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDMUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUM7WUFDdkUsSUFBSSxZQUFZO2dCQUFFLE9BQU87WUFDekIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNILENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUN6QixXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFVLEVBQUUsQ0FBQztRQUU1QixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJO2dCQUFFLFNBQVM7WUFDMUMsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLE9BQU87Z0JBQUUsU0FBUztZQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQUUsU0FBUztZQUN2RixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDNUIsT0FBTyxFQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxFQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYi5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUHJvZHVjZXJzIHtcblxuICAgIHN0YXRpYyBpbml0IChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIGpvYjogSm9iKSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y2VyU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAgICAgICBpZiAoam9iLm5lZWRzICYmIGpvYi5uZWVkcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICAgICAgaWYgKCFqb2IubmVlZHMgJiYgIWpvYi5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgam9iTmFtZSBvZiBVdGlscy5nZXRKb2JOYW1lc0Zyb21QcmV2aW91c1N0YWdlcyhqb2JzLCBzdGFnZXMsIGpvYikpIHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlclNldC5hZGQoam9iTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgKGpvYi5kZXBlbmRlbmNpZXMgPz8gW10pLmZvckVhY2goZGVwZW5kZW5jeSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZEluTmVlZHMgPSAoam9iLm5lZWRzID8/IFtdKS5maW5kKG4gPT4gbi5qb2IgPT09IGRlcGVuZGVuY3kpO1xuICAgICAgICAgICAgaWYgKGZvdW5kSW5OZWVkcykgcmV0dXJuO1xuICAgICAgICAgICAgcHJvZHVjZXJTZXQuYWRkKGRlcGVuZGVuY3kpO1xuICAgICAgICB9KTtcbiAgICAgICAgKGpvYi5uZWVkcyA/PyBbXSkuZm9yRWFjaChuZWVkID0+IHtcbiAgICAgICAgICAgIGlmICghbmVlZC5hcnRpZmFjdHMpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChuZWVkLnBpcGVsaW5lKSByZXR1cm47XG4gICAgICAgICAgICBpZiAobmVlZC5wcm9qZWN0KSByZXR1cm47XG4gICAgICAgICAgICBwcm9kdWNlclNldC5hZGQobmVlZC5qb2IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBwcm9kdWNlcnM6IEpvYltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwb3RlbnRpYWwgb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKHBvdGVudGlhbC5hcnRpZmFjdHMgPT0gbnVsbCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocG90ZW50aWFsLndoZW4gPT0gXCJuZXZlclwiKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcHJvZHVjZXJTZXQuaGFzKHBvdGVudGlhbC5uYW1lKSAmJiAhcHJvZHVjZXJTZXQuaGFzKHBvdGVudGlhbC5iYXNlTmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcHJvZHVjZXJzLnB1c2gocG90ZW50aWFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvZHVjZXJzLm1hcChwcm9kdWNlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge25hbWU6IHByb2R1Y2VyLm5hbWUsIGRvdGVudjogcHJvZHVjZXI/LmFydGlmYWN0cz8ucmVwb3J0cz8uZG90ZW52ID8/IG51bGx9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiJdfQ==
|
package/src/schema/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { schema } from "./schema.js";
|
|
2
|
-
// @ts-expect-error ts-expect-error
|
|
3
|
-
schema.definitions.job_template.properties.gclInjectSSHAgent = {
|
|
4
|
-
"type": "boolean",
|
|
5
|
-
};
|
|
6
|
-
// @ts-expect-error ts-expect-error
|
|
7
|
-
schema.definitions.job_template.properties.gclInteractive = {
|
|
8
|
-
"type": "boolean",
|
|
9
|
-
};
|
|
10
|
-
// @ts-expect-error ts-expect-error
|
|
11
|
-
schema.definitions.job_template.properties.gclArtifactsToSource = {
|
|
12
|
-
"type": "boolean",
|
|
13
|
-
};
|
|
14
|
-
// @ts-expect-error ts-expect-error
|
|
15
|
-
schema.definitions.job_template.properties.gclDescription = {
|
|
16
|
-
"type": "string",
|
|
17
|
-
};
|
|
18
|
-
export default schema;
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRW5DLG1DQUFtQztBQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEdBQUc7SUFDM0QsTUFBTSxFQUFFLFNBQVM7Q0FDcEIsQ0FBQztBQUNGLG1DQUFtQztBQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHO0lBQ3hELE1BQU0sRUFBRSxTQUFTO0NBQ3BCLENBQUM7QUFDRixtQ0FBbUM7QUFDbkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLG9CQUFvQixHQUFHO0lBQzlELE1BQU0sRUFBRSxTQUFTO0NBQ3BCLENBQUM7QUFDRixtQ0FBbUM7QUFDbkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRztJQUN4RCxNQUFNLEVBQUUsUUFBUTtDQUNuQixDQUFDO0FBRUYsZUFBZSxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NjaGVtYX0gZnJvbSBcIi4vc2NoZW1hLmpzXCI7XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgdHMtZXhwZWN0LWVycm9yXG5zY2hlbWEuZGVmaW5pdGlvbnMuam9iX3RlbXBsYXRlLnByb3BlcnRpZXMuZ2NsSW5qZWN0U1NIQWdlbnQgPSB7XG4gICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxufTtcbi8vIEB0cy1leHBlY3QtZXJyb3IgdHMtZXhwZWN0LWVycm9yXG5zY2hlbWEuZGVmaW5pdGlvbnMuam9iX3RlbXBsYXRlLnByb3BlcnRpZXMuZ2NsSW50ZXJhY3RpdmUgPSB7XG4gICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxufTtcbi8vIEB0cy1leHBlY3QtZXJyb3IgdHMtZXhwZWN0LWVycm9yXG5zY2hlbWEuZGVmaW5pdGlvbnMuam9iX3RlbXBsYXRlLnByb3BlcnRpZXMuZ2NsQXJ0aWZhY3RzVG9Tb3VyY2UgPSB7XG4gICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxufTtcbi8vIEB0cy1leHBlY3QtZXJyb3IgdHMtZXhwZWN0LWVycm9yXG5zY2hlbWEuZGVmaW5pdGlvbnMuam9iX3RlbXBsYXRlLnByb3BlcnRpZXMuZ2NsRGVzY3JpcHRpb24gPSB7XG4gICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzY2hlbWE7XG4iXX0=
|