gitlab-ci-local
Version:
Tired of pushing to test your .gitlab-ci.yml?
46 lines • 6.56 kB
JavaScript
import assert from "assert";
import deepExtend from "deep-extend";
export function isPlainParallel(jobData) {
return Number.isInteger(jobData.parallel);
}
export function matrixVariablesList(jobData, jobName) {
if (isPlainParallel(jobData)) {
return Array(jobData.parallel).fill(null);
}
if (jobData?.parallel?.matrix == null) {
return [null];
}
assert(Array.isArray(jobData.parallel.matrix), `${jobName} parallel.matrix is not an array`);
const matrixVariables = [];
// Expand string value to array of values
for (const m of jobData.parallel.matrix) {
for (const [key, value] of Object.entries(m)) {
m[key] = Array.isArray(value) ? value : [value];
}
}
// Generate variables in while loop by expanding the matrix
const deep = deepExtend({}, jobData);
for (const m of deep.parallel.matrix) {
let i = 0;
let inner = [];
while (Object.keys(m).length > 0 && i < 100) {
const keys = Object.keys(m);
const key = keys[0];
const values = m[key];
delete m[key];
const innerClone = inner.length > 0 ? [...inner] : [{}];
inner = [];
for (const clone of innerClone) {
for (const v of values) {
const matrixVariable = { ...clone };
matrixVariable[key] = v;
inner.push(matrixVariable);
}
}
i++;
}
matrixVariables.push(...inner);
}
return matrixVariables;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXJhbGxlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE1BQU0sVUFBVSxlQUFlLENBQUUsT0FBWTtJQUN6QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUUsT0FBWSxFQUFFLE9BQWU7SUFDOUQsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sa0NBQWtDLENBQUMsQ0FBQztJQUU3RixNQUFNLGVBQWUsR0FBOEIsRUFBRSxDQUFDO0lBRXRELHlDQUF5QztJQUN6QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDTCxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVWLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFZCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELEtBQUssR0FBRyxFQUFFLENBQUM7WUFFWCxLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNyQixNQUFNLGNBQWMsR0FBNEIsRUFBQyxHQUFHLEtBQUssRUFBQyxDQUFDO29CQUMzRCxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0wsQ0FBQztZQUNELENBQUMsRUFBRSxDQUFDO1FBQ1IsQ0FBQztRQUNELGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IGRlZXBFeHRlbmQgZnJvbSBcImRlZXAtZXh0ZW5kXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluUGFyYWxsZWwgKGpvYkRhdGE6IGFueSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGpvYkRhdGEucGFyYWxsZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0cml4VmFyaWFibGVzTGlzdCAoam9iRGF0YTogYW55LCBqb2JOYW1lOiBzdHJpbmcpOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfVtdIHwgbnVsbFtdIHtcbiAgICBpZiAoaXNQbGFpblBhcmFsbGVsKGpvYkRhdGEpKSB7XG4gICAgICAgIHJldHVybiBBcnJheShqb2JEYXRhLnBhcmFsbGVsKS5maWxsKG51bGwpO1xuICAgIH1cbiAgICBpZiAoam9iRGF0YT8ucGFyYWxsZWw/Lm1hdHJpeCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbbnVsbF07XG4gICAgfVxuICAgIGFzc2VydChBcnJheS5pc0FycmF5KGpvYkRhdGEucGFyYWxsZWwubWF0cml4KSwgYCR7am9iTmFtZX0gcGFyYWxsZWwubWF0cml4IGlzIG5vdCBhbiBhcnJheWApO1xuXG4gICAgY29uc3QgbWF0cml4VmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfVtdID0gW107XG5cbiAgICAvLyBFeHBhbmQgc3RyaW5nIHZhbHVlIHRvIGFycmF5IG9mIHZhbHVlc1xuICAgIGZvciAoY29uc3QgbSBvZiBqb2JEYXRhLnBhcmFsbGVsLm1hdHJpeCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtKSkge1xuICAgICAgICAgICAgbVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB2YXJpYWJsZXMgaW4gd2hpbGUgbG9vcCBieSBleHBhbmRpbmcgdGhlIG1hdHJpeFxuICAgIGNvbnN0IGRlZXAgPSBkZWVwRXh0ZW5kKHt9LCBqb2JEYXRhKTtcbiAgICBmb3IgKGNvbnN0IG0gb2YgZGVlcC5wYXJhbGxlbC5tYXRyaXgpIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuXG4gICAgICAgIGxldCBpbm5lciA9IFtdO1xuICAgICAgICB3aGlsZSAoT2JqZWN0LmtleXMobSkubGVuZ3RoID4gMCAmJiBpIDwgMTAwKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbVtrZXldO1xuICAgICAgICAgICAgZGVsZXRlIG1ba2V5XTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJDbG9uZSA9IGlubmVyLmxlbmd0aCA+IDAgPyBbLi4uaW5uZXJdIDogW3t9XTtcbiAgICAgICAgICAgIGlubmVyID0gW107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xvbmUgb2YgaW5uZXJDbG9uZSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0cml4VmFyaWFibGU6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0gey4uLmNsb25lfTtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4VmFyaWFibGVba2V5XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyLnB1c2gobWF0cml4VmFyaWFibGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBtYXRyaXhWYXJpYWJsZXMucHVzaCguLi5pbm5lcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFZhcmlhYmxlcztcbn1cbiJdfQ==