mirror of
https://github.com/balena-io/balena-cli.git
synced 2024-12-18 21:27:51 +00:00
Refactor automation scripts (reduce need for MSYS to build on Windows)
Change-type: patch
This commit is contained in:
parent
329b84d01e
commit
68b61e7424
@ -34,15 +34,15 @@ import {
|
|||||||
diffLines,
|
diffLines,
|
||||||
getSubprocessStdout,
|
getSubprocessStdout,
|
||||||
loadPackageJson,
|
loadPackageJson,
|
||||||
MSYS2_BASH,
|
|
||||||
ROOT,
|
ROOT,
|
||||||
StdOutTap,
|
StdOutTap,
|
||||||
whichSpawn,
|
whichSpawn,
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
export const packageJSON = loadPackageJson();
|
export const packageJSON = loadPackageJson();
|
||||||
export const version = 'v' + packageJSON.version;
|
export const version = 'v' + packageJSON.version;
|
||||||
const arch = process.arch;
|
const arch = process.arch;
|
||||||
|
const MSYS2_BASH =
|
||||||
|
process.env.MSYSSHELLPATH || 'C:\\msys64\\usr\\bin\\bash.exe';
|
||||||
|
|
||||||
function dPath(...paths: string[]) {
|
function dPath(...paths: string[]) {
|
||||||
return path.join(ROOT, 'dist', ...paths);
|
return path.join(ROOT, 'dist', ...paths);
|
||||||
|
@ -27,7 +27,6 @@ import {
|
|||||||
release,
|
release,
|
||||||
updateDescriptionOfReleasesAffectedByIssue1359,
|
updateDescriptionOfReleasesAffectedByIssue1359,
|
||||||
} from './deploy-bin';
|
} from './deploy-bin';
|
||||||
import { fixPathForMsys, ROOT, runUnderMsys } from './utils';
|
|
||||||
|
|
||||||
// DEBUG set to falsy for negative values else is truthy
|
// DEBUG set to falsy for negative values else is truthy
|
||||||
process.env.DEBUG = ['0', 'no', 'false', '', undefined].includes(
|
process.env.DEBUG = ['0', 'no', 'false', '', undefined].includes(
|
||||||
@ -48,9 +47,6 @@ function exitWithError(error: Error | string): never {
|
|||||||
* 'build:standalone' (to build a standalone pkg package)
|
* 'build:standalone' (to build a standalone pkg package)
|
||||||
* 'release' (to create/update a GitHub release)
|
* 'release' (to create/update a GitHub release)
|
||||||
*
|
*
|
||||||
* In the case of 'build:installer', also call runUnderMsys() to switch the
|
|
||||||
* shell from cmd.exe to MSYS2 bash.exe.
|
|
||||||
*
|
|
||||||
* @param args Arguments to parse (default is process.argv.slice(2))
|
* @param args Arguments to parse (default is process.argv.slice(2))
|
||||||
*/
|
*/
|
||||||
export async function run(args?: string[]) {
|
export async function run(args?: string[]) {
|
||||||
@ -74,10 +70,6 @@ export async function run(args?: string[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If runUnderMsys() is called to re-execute this script under MSYS2,
|
|
||||||
// the current working dir becomes the MSYS2 homedir, so we change back.
|
|
||||||
process.chdir(ROOT);
|
|
||||||
|
|
||||||
// The BUILD_TMP env var is used as an alternative location for oclif
|
// The BUILD_TMP env var is used as an alternative location for oclif
|
||||||
// (patched) to copy/extract the CLI files, run npm install and then
|
// (patched) to copy/extract the CLI files, run npm install and then
|
||||||
// create the NSIS executable installer for Windows. This was necessary
|
// create the NSIS executable installer for Windows. This was necessary
|
||||||
@ -95,23 +87,6 @@ export async function run(args?: string[]) {
|
|||||||
|
|
||||||
for (const arg of args) {
|
for (const arg of args) {
|
||||||
try {
|
try {
|
||||||
if (arg === 'build:installer' && process.platform === 'win32') {
|
|
||||||
// ensure running under MSYS2
|
|
||||||
if (!process.env.MSYSTEM) {
|
|
||||||
process.env.MSYS2_PATH_TYPE = 'inherit';
|
|
||||||
await runUnderMsys([
|
|
||||||
fixPathForMsys(process.argv[0]),
|
|
||||||
fixPathForMsys(process.argv[1]),
|
|
||||||
arg,
|
|
||||||
]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (process.env.MSYS2_PATH_TYPE !== 'inherit') {
|
|
||||||
throw new Error(
|
|
||||||
'the MSYS2_PATH_TYPE env var must be set to "inherit"',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const cmdFunc = commands[arg];
|
const cmdFunc = commands[arg];
|
||||||
await cmdFunc();
|
await cmdFunc();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -18,10 +18,7 @@
|
|||||||
import { spawn } from 'child_process';
|
import { spawn } from 'child_process';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as shellEscape from 'shell-escape';
|
|
||||||
|
|
||||||
export const MSYS2_BASH =
|
|
||||||
process.env.MSYSSHELLPATH || 'C:\\msys64\\usr\\bin\\bash.exe';
|
|
||||||
export const ROOT = path.join(__dirname, '..');
|
export const ROOT = path.join(__dirname, '..');
|
||||||
|
|
||||||
/** Tap and buffer this process' stdout and stderr */
|
/** Tap and buffer this process' stdout and stderr */
|
||||||
@ -91,40 +88,6 @@ export function loadPackageJson() {
|
|||||||
return require(path.join(ROOT, 'package.json'));
|
return require(path.join(ROOT, 'package.json'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert e.g. 'C:\myfolder' -> '/C/myfolder' so that the path can be given
|
|
||||||
* as argument to "unix tools" like 'tar' under MSYS or MSYS2 on Windows.
|
|
||||||
*/
|
|
||||||
export function fixPathForMsys(p: string): string {
|
|
||||||
return p.replace(/\\/g, '/').replace(/^([a-zA-Z]):/, '/$1');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Run the MSYS2 bash.exe shell in a child process (child_process.spawn()).
|
|
||||||
* The given argv arguments are escaped using the 'shell-escape' package,
|
|
||||||
* so that backslashes in Windows paths, and other bash-special characters,
|
|
||||||
* are preserved. If argv is not provided, defaults to process.argv, to the
|
|
||||||
* effect that this current (parent) process is re-executed under MSYS2 bash.
|
|
||||||
* This is useful to change the default shell from cmd.exe to MSYS2 bash on
|
|
||||||
* Windows.
|
|
||||||
* @param argv Arguments to be shell-escaped and given to MSYS2 bash.exe.
|
|
||||||
*/
|
|
||||||
export async function runUnderMsys(argv?: string[]) {
|
|
||||||
const newArgv = argv || process.argv;
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
const args = ['-lc', shellEscape(newArgv)];
|
|
||||||
const child = spawn(MSYS2_BASH, args, { stdio: 'inherit' });
|
|
||||||
child.on('close', (code) => {
|
|
||||||
if (code) {
|
|
||||||
console.log(`runUnderMsys: child process exited with code ${code}`);
|
|
||||||
reject(code);
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run the executable at execPath as a child process, and resolve a promise
|
* Run the executable at execPath as a child process, and resolve a promise
|
||||||
* to the executable's stdout output as a string. Reject the promise if
|
* to the executable's stdout output as a string. Reject the promise if
|
||||||
|
Loading…
Reference in New Issue
Block a user