UNPKG

aws-delivlib

Version:

A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.

105 lines 9.6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.flatMap = exports.mapValues = exports.noUndefined = exports.renderEnvironmentVariables = exports.hashFileOrDirectory = exports.determineRunOrder = void 0; const crypto = __importStar(require("crypto")); const fs = __importStar(require("fs")); const path = __importStar(require("path")); /** * Determines the "RunOrder" property for the next action to be added to a stage. * @param index Index of new action * @param concurrency The concurrency limit */ function determineRunOrder(index, concurrency) { // no runOrder if we are at unlimited concurrency if (concurrency === undefined) { return undefined; } return Math.floor(index / concurrency) + 1; } exports.determineRunOrder = determineRunOrder; /** * Hashes the contents of a file or directory. If the argument is a directory, * it is assumed not to contain symlinks that would result in a cyclic tree. * * @param fileOrDir the path to the file or directory that should be hashed. * * @returns a SHA256 hash, base-64 encoded. */ function hashFileOrDirectory(fileOrDir) { const hash = crypto.createHash('SHA256'); hash.update(path.basename(fileOrDir)).update('\0'); const stat = fs.statSync(fileOrDir); if (stat.isDirectory()) { for (const item of fs.readdirSync(fileOrDir).sort()) { hash.update(hashFileOrDirectory(path.join(fileOrDir, item))); } } else { hash.update(fs.readFileSync(fileOrDir)); } return hash.digest('base64'); } exports.hashFileOrDirectory = hashFileOrDirectory; function renderEnvironmentVariables(env, type) { if (!env) { return undefined; } const out = {}; for (const [key, value] of Object.entries(env)) { if (value !== undefined) { out[key] = { value, type }; } } return out; } exports.renderEnvironmentVariables = renderEnvironmentVariables; function noUndefined(xs) { const ret = {}; for (const [k, v] of Object.entries(xs)) { if (v !== undefined) { ret[k] = v; } } return ret; } exports.noUndefined = noUndefined; function mapValues(xs, fn) { const ret = {}; for (const [k, v] of Object.entries(xs)) { ret[k] = fn(v); } return ret; } exports.mapValues = mapValues; function flatMap(xs, fn) { const ret = new Array(); for (const x of xs) { ret.push(...fn(x)); } return ret; } exports.flatMap = flatMap; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUk3Qjs7OztHQUlHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYSxFQUFFLFdBQW9CO0lBQ25FLGlEQUFpRDtJQUNqRCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDN0IsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBUEQsOENBT0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsU0FBaUI7SUFDbkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7S0FDRjtTQUFNO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQVpELGtEQVlDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsR0FBMkMsRUFBRSxJQUEwQztJQUNoSSxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLEdBQUcsR0FBdUQsRUFBRyxDQUFDO0lBQ3BFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzlDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDNUI7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQVpELGdFQVlDO0FBRUQsU0FBZ0IsV0FBVyxDQUFtQixFQUFLO0lBQ2pELE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUNwQixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN2QyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNaO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFSRCxrQ0FRQztBQUVELFNBQWdCLFNBQVMsQ0FBTyxFQUF3QixFQUFFLEVBQWU7SUFDdkUsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBTkQsOEJBTUM7QUFFRCxTQUFnQixPQUFPLENBQU8sRUFBTyxFQUFFLEVBQWlCO0lBQ3RELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFLLENBQUM7SUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBTkQsMEJBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBhd3NfY29kZWJ1aWxkIGFzIGNidWlsZCB9IGZyb20gJ2F3cy1jZGstbGliJztcblxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIFwiUnVuT3JkZXJcIiBwcm9wZXJ0eSBmb3IgdGhlIG5leHQgYWN0aW9uIHRvIGJlIGFkZGVkIHRvIGEgc3RhZ2UuXG4gKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgbmV3IGFjdGlvblxuICogQHBhcmFtIGNvbmN1cnJlbmN5IFRoZSBjb25jdXJyZW5jeSBsaW1pdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5lUnVuT3JkZXIoaW5kZXg6IG51bWJlciwgY29uY3VycmVuY3k/OiBudW1iZXIpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAvLyBubyBydW5PcmRlciBpZiB3ZSBhcmUgYXQgdW5saW1pdGVkIGNvbmN1cnJlbmN5XG4gIGlmIChjb25jdXJyZW5jeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmZsb29yKGluZGV4IC8gY29uY3VycmVuY3kpICsgMTtcbn1cblxuLyoqXG4gKiBIYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkuIElmIHRoZSBhcmd1bWVudCBpcyBhIGRpcmVjdG9yeSxcbiAqIGl0IGlzIGFzc3VtZWQgbm90IHRvIGNvbnRhaW4gc3ltbGlua3MgdGhhdCB3b3VsZCByZXN1bHQgaW4gYSBjeWNsaWMgdHJlZS5cbiAqXG4gKiBAcGFyYW0gZmlsZU9yRGlyIHRoZSBwYXRoIHRvIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0aGF0IHNob3VsZCBiZSBoYXNoZWQuXG4gKlxuICogQHJldHVybnMgYSBTSEEyNTYgaGFzaCwgYmFzZS02NCBlbmNvZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaEZpbGVPckRpcmVjdG9yeShmaWxlT3JEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnU0hBMjU2Jyk7XG4gIGhhc2gudXBkYXRlKHBhdGguYmFzZW5hbWUoZmlsZU9yRGlyKSkudXBkYXRlKCdcXDAnKTtcbiAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZpbGVPckRpcik7XG4gIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZnMucmVhZGRpclN5bmMoZmlsZU9yRGlyKS5zb3J0KCkpIHtcbiAgICAgIGhhc2gudXBkYXRlKGhhc2hGaWxlT3JEaXJlY3RvcnkocGF0aC5qb2luKGZpbGVPckRpciwgaXRlbSkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGFzaC51cGRhdGUoZnMucmVhZEZpbGVTeW5jKGZpbGVPckRpcikpO1xuICB9XG4gIHJldHVybiBoYXNoLmRpZ2VzdCgnYmFzZTY0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnY/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LCB0eXBlPzogY2J1aWxkLkJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVR5cGUpIHtcbiAgaWYgKCFlbnYpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgb3V0OiB7IFtrZXk6IHN0cmluZ106IGNidWlsZC5CdWlsZEVudmlyb25tZW50VmFyaWFibGUgfSA9IHsgfTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52KSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRba2V5XSA9IHsgdmFsdWUsIHR5cGUgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vVW5kZWZpbmVkPFQgZXh0ZW5kcyBvYmplY3Q+KHhzOiBUKTogeyBbayBpbiBrZXlvZiBUXTogTm9uTnVsbGFibGU8VFtrXT4gfSB7XG4gIGNvbnN0IHJldDogYW55ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHhzKSkge1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrXSA9IHY7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBWYWx1ZXM8VCwgVT4oeHM6IHsgW2tleTogc3RyaW5nXTogVCB9LCBmbjogKHg6IFQpID0+IFUpOiB7IFtrZXk6IHN0cmluZ106IFUgfSB7XG4gIGNvbnN0IHJldDogeyBba2V5OiBzdHJpbmddOiBVIH0gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoeHMpKSB7XG4gICAgcmV0W2tdID0gZm4odik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXRNYXA8VCwgVT4oeHM6IFRbXSwgZm46ICh4OiBUKSA9PiBVW10pOiBVW10ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8VT4oKTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0LnB1c2goLi4uZm4oeCkpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=