UNPKG

@jameslnewell/buildkite-pipelines

Version:
197 lines (196 loc) 7.19 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _yargs = /*#__PURE__*/ _interop_require_default(require("yargs")); const _resolve = /*#__PURE__*/ _interop_require_default(require("resolve")); const _debug = /*#__PURE__*/ _interop_require_default(require("debug")); const _lib = require("../lib"); const _isPipelineBuilder = require("../lib/builders/isPipelineBuilder"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const log = (0, _debug.default)('buildkite-pipelines'); const resolve = (id, basedir)=>new Promise((resolve, reject)=>(0, _resolve.default)(id, { basedir }, (error, path)=>{ if (error || !path) { reject(error); } else { resolve(path); } })); (async ()=>{ await _yargs.default.scriptName('buildkite-pipelines').command('$0 <file>', 'Generate a Buildkite pipeline', (yargs)=>yargs.option('require', { type: 'string', alias: 'r', description: `Require a module on startup` }).option('cwd', { type: 'string', description: `Change the working directory` }).option('ignore-validation-errors', { boolean: true, description: 'Output the pipeline and exit cleanly when the pipeline is not valid' }).positional('file', { type: 'string', demandOption: true, description: 'A file exporting a pipeline object' }), async (argv)=>{ const { file, require: require1, cwd } = argv; // change the current working directory const basedir = process.cwd(); if (cwd) process.chdir(cwd); // coerce the requires into an array const requires = Array.isArray(require1) ? require1 : require1 ? [ require1 ] : []; // import scripts in order to setup transpilers and stuff for (const r of requires){ log('requiring: %s', r); let m; try { m = await resolve(r, basedir); await Promise.resolve(m).then((p)=>/*#__PURE__*/ _interop_require_wildcard(require(p))); } catch (error) { console.error(); console.error(`💥 ERROR`); console.error(); console.error(`An error occurred whilst requiring "${r}"`); console.error(); console.error(error); process.exitCode = 1; return; } } // check the pipeline file is specified if (!file) { console.error(`No pipeline file specified`); process.exitCode = 1; return; } // import the pipeline log('importing pipeline: %s', file); let m; let pipeline; try { m = await resolve(file, basedir); pipeline = await Promise.resolve(m).then((p)=>/*#__PURE__*/ _interop_require_wildcard(require(p))); } catch (error) { console.error(); console.error(`💥 ERROR`); console.error(); console.error(`An error occurred whilst executing "${file}"`); console.error(); console.error(error); process.exitCode = 1; return; } // check for a named property let property; if (pipeline.pipeline) { log('using .pipeline property'); property = '.pipeline'; pipeline = pipeline.pipeline; // check for a default property } else if (pipeline.default) { property = '.default'; log('using .default property'); pipeline = pipeline.default; } else { log('using module'); property = '.default'; } // execute the factory function if pipeline is a factory if (typeof pipeline === 'function') { log('executing pipeline factory'); try { pipeline = await pipeline(); } catch (error) { console.error(); console.error(`💥 ERROR`); console.error(); console.error(`An error occurred whilst executing "${file}#${property}()"`); console.error(); console.error(error); process.exitCode = 1; return; } } // build the pipeline if its a builder if ((0, _isPipelineBuilder.isPipelineBuilder)(pipeline)) { log('building pipeline'); try { pipeline = await pipeline.build(); } catch (error) { console.error(); console.error(`💥 ERROR`); console.error(); console.error(`An error occurred whilst executing "${file}#${property}()"`); console.error(); console.error(error); process.exitCode = 1; return; } } // validate log('validating pipeline'); const errors = await (0, _lib.validate)(pipeline); if (errors.length) { console.error(); console.error(`👮‍♀️ The pipeline is not valid:`); console.error(); for (const error of errors){ console.error(error); } if (!argv.ignoreValidationErrors) { process.exitCode = 1; return; } } log('stringifying pipeline'); console.log(await (0, _lib.stringify)(pipeline)); }).argv; })(); //# sourceMappingURL=index.js.map