/** * @license * Copyright 2019 Balena Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import * as _ from 'lodash'; import { buildOclifInstaller, buildStandaloneZip, catchUncommitted, signFilesForNotarization, testShrinkwrap, } from './build-bin'; // DEBUG set to falsy for negative values else is truthy process.env.DEBUG = ['0', 'no', 'false', '', undefined].includes( process.env.DEBUG?.toLowerCase(), ) ? '' : '1'; /** * Trivial command-line parser. Check whether the command-line argument is one * of the following strings, then call the appropriate functions: * 'build:installer' (to build a native oclif installer) * 'build:standalone' (to build a standalone pkg package) * * @param args Arguments to parse (default is process.argv.slice(2)) */ async function parse(args?: string[]) { args = args || process.argv.slice(2); console.error(`[debug] automation/run.ts process.argv=[${process.argv}]`); console.error(`[debug] automation/run.ts args=[${args}]`); if (_.isEmpty(args)) { throw new Error('missing command-line arguments'); } const commands: { [cmd: string]: () => void | Promise } = { 'build:installer': buildOclifInstaller, 'build:standalone': buildStandaloneZip, 'sign:binaries': signFilesForNotarization, 'catch-uncommitted': catchUncommitted, 'test-shrinkwrap': testShrinkwrap, }; for (const arg of args) { if (!Object.hasOwn(commands, arg)) { throw new Error(`command unknown: ${arg}`); } } for (const arg of args) { try { const cmdFunc = commands[arg]; await cmdFunc(); } catch (err) { if (typeof err === 'object') { err.message = `"${arg}": ${err.message}`; } throw err; } } } /** See jsdoc for parse() function above */ export async function run(args?: string[]) { try { await parse(args); } catch (e) { console.error(e.message ? `Error: ${e.message}` : e); process.exitCode = 1; } } // eslint-disable-next-line @typescript-eslint/no-floating-promises run();