UNPKG

@storm-software/workspace-tools

Version:

Tools for managing a Storm workspace, including various Nx generators and executors for common development tasks.

118 lines (111 loc) 5.1 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _chunkHTGUYSQTjs = require('./chunk-HTGUYSQT.js'); // src/executors/cargo-publish/executor.ts var _devkit = require('@nx/devkit'); var _child_process = require('child_process'); var _fs = require('fs'); var _https = require('https'); var _https2 = _interopRequireDefault(_https); var LARGE_BUFFER = 1024 * 1e6; async function runExecutor(options, context) { const isDryRun = process.env.NX_DRY_RUN === "true" || options.dryRun || false; if (!context.projectName) { throw new Error("The executor requires a projectName."); } console.info( `\u{1F680} Running Storm Cargo Publish executor on the ${context.projectName} crate` ); if (!context.projectName || !_optionalChain([context, 'access', _ => _.projectsConfigurations, 'optionalAccess', _2 => _2.projects]) || !context.projectsConfigurations.projects[context.projectName] || !_optionalChain([context, 'access', _3 => _3.projectsConfigurations, 'access', _4 => _4.projects, 'access', _5 => _5[context.projectName], 'optionalAccess', _6 => _6.root])) { throw new Error("The executor requires projectsConfigurations."); } const registry = options.registry ? options.registry : process.env.STORM_REGISTRY_CARGO ? process.env.STORM_REGISTRY_CARGO : "https://crates.io"; const root = _optionalChain([context, 'access', _7 => _7.projectsConfigurations, 'access', _8 => _8.projects, 'access', _9 => _9[context.projectName], 'optionalAccess', _10 => _10.root]); const packageRoot = _devkit.joinPathFragments.call(void 0, context.root, options.packageRoot ? options.packageRoot : root ); const cargoToml = _chunkHTGUYSQTjs.parseCargoToml.call(void 0, _fs.readFileSync.call(void 0, _devkit.joinPathFragments.call(void 0, packageRoot, "Cargo.toml"), "utf-8") ); try { const result = await getRegistryVersion( cargoToml.package.name, cargoToml.package.version, registry ); if (result) { console.warn( `Skipped publishing crate ${cargoToml.package.name} v${cargoToml.package.version} - ${result}` ); return { success: true }; } } catch (e) { } const cargoPublishCommandSegments = [ `cargo publish --allow-dirty -p ${cargoToml.package.name}` ]; if (isDryRun) { cargoPublishCommandSegments.push("--dry-run"); } try { const cargoPublishCommand = cargoPublishCommandSegments.join(" "); console.log(""); console.log(`Running "${cargoPublishCommand}"...`); console.log(""); _child_process.execSync.call(void 0, cargoPublishCommand, { maxBuffer: LARGE_BUFFER, env: { ...process.env, FORCE_COLOR: "true" }, cwd: packageRoot, stdio: ["ignore", "pipe", "pipe"] }); console.log(""); if (isDryRun) { console.log(`Would publish to ${registry}, but [dry-run] was set`); } else { console.log(`Published to ${registry}`); } return { success: true }; } catch (error) { console.error(`Failed to publish to ${registry}`); console.error(error); console.log(""); return { success: false }; } } var getRegistryVersion = (name, version, registry) => { const url = `${registry}/api/v1/crates/${encodeURIComponent(name)}/${encodeURIComponent( version )}`; console.log(`Checking for existing version at: ${url}`); return new Promise( (resolve) => _https2.default.get(url, (res) => { res.on("data", (d) => { if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { const response = JSON.parse(d.toString()); const updatedAt = _optionalChain([response, 'access', _11 => _11.version, 'optionalAccess', _12 => _12.updated_at]); const publishedBy = _optionalChain([response, 'access', _13 => _13.version, 'optionalAccess', _14 => _14.published_by, 'optionalAccess', _15 => _15.name]); resolve( `The ${name} v${version} crate was previously published${publishedBy ? ` by ${publishedBy}` : ""}${updatedAt ? ` on ${new Date(updatedAt).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", weekday: "long" })}` : ""}.` ); } resolve(null); }); }).on("error", () => { resolve(null); }) ); }; exports.runExecutor = runExecutor; exports.getRegistryVersion = getRegistryVersion;