add option for npm access level
This commit is contained in:
@@ -1,20 +1,20 @@
|
||||
import * as plugins from './npmci.plugins'
|
||||
import * as paths from './npmci.paths'
|
||||
import * as plugins from './npmci.plugins';
|
||||
import * as paths from './npmci.paths';
|
||||
|
||||
import * as smartq from 'smartq'
|
||||
import * as smartq from 'smartq';
|
||||
|
||||
/**
|
||||
* wether nvm is available or not
|
||||
*/
|
||||
export let nvmAvailable = smartq.defer<boolean>()
|
||||
export let yarnAvailable = smartq.defer<boolean>()
|
||||
export let nvmAvailable = smartq.defer<boolean>();
|
||||
export let yarnAvailable = smartq.defer<boolean>();
|
||||
/**
|
||||
* the smartshell instance for npmci
|
||||
*/
|
||||
let npmciSmartshell = new plugins.smartshell.Smartshell({
|
||||
executor: 'bash',
|
||||
sourceFilePaths: []
|
||||
})
|
||||
});
|
||||
|
||||
/**
|
||||
* check for tools.
|
||||
@@ -25,31 +25,35 @@ let checkToolsAvailable = async () => {
|
||||
if (
|
||||
(await plugins.smartshell.execSilent(`bash -c "source /usr/local/nvm/nvm.sh"`)).exitCode === 0
|
||||
) {
|
||||
npmciSmartshell.addSourceFiles([ `/usr/local/nvm/nvm.sh` ])
|
||||
nvmAvailable.resolve(true)
|
||||
npmciSmartshell.addSourceFiles([`/usr/local/nvm/nvm.sh`]);
|
||||
nvmAvailable.resolve(true);
|
||||
} else if (
|
||||
(await plugins.smartshell.execSilent(`bash -c "source ~/.nvm/nvm.sh"`)).exitCode === 0
|
||||
) {
|
||||
npmciSmartshell.addSourceFiles([ `~/.nvm/nvm.sh` ])
|
||||
nvmAvailable.resolve(true)
|
||||
npmciSmartshell.addSourceFiles([`~/.nvm/nvm.sh`]);
|
||||
nvmAvailable.resolve(true);
|
||||
} else {
|
||||
nvmAvailable.resolve(false)
|
||||
nvmAvailable.resolve(false);
|
||||
}
|
||||
|
||||
// check for yarn
|
||||
await plugins.smartshell.which('yarn').then(
|
||||
async () => {
|
||||
await plugins.smartshell.exec(`yarn config set cache-folder ${plugins.path.join(paths.cwd, '.yarn')}`)
|
||||
yarnAvailable.resolve(true)
|
||||
await plugins.smartshell.exec(
|
||||
`yarn config set cache-folder ${plugins.path.join(paths.cwd, '.yarn')}`
|
||||
);
|
||||
yarnAvailable.resolve(true);
|
||||
},
|
||||
() => { yarnAvailable.resolve(false) }
|
||||
)
|
||||
() => {
|
||||
yarnAvailable.resolve(false);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
nvmAvailable.resolve(true)
|
||||
yarnAvailable.resolve(true)
|
||||
nvmAvailable.resolve(true);
|
||||
yarnAvailable.resolve(true);
|
||||
}
|
||||
}
|
||||
checkToolsAvailable()
|
||||
};
|
||||
checkToolsAvailable();
|
||||
|
||||
/**
|
||||
* bash() allows using bash with nvm in path
|
||||
@@ -57,49 +61,54 @@ checkToolsAvailable()
|
||||
* @param retryArg - The retryArg: 0 to any positive number will retry, -1 will always succeed, -2 will return undefined
|
||||
*/
|
||||
export let bash = async (commandArg: string, retryArg: number = 2): Promise<string> => {
|
||||
await nvmAvailable.promise // make sure nvm check has run
|
||||
let execResult: plugins.smartshell.IExecResult
|
||||
await nvmAvailable.promise; // make sure nvm check has run
|
||||
let execResult: plugins.smartshell.IExecResult;
|
||||
|
||||
// determine if we fail
|
||||
let failOnError: boolean = true
|
||||
let failOnError: boolean = true;
|
||||
if (retryArg === -1) {
|
||||
failOnError = false
|
||||
retryArg = 0
|
||||
failOnError = false;
|
||||
retryArg = 0;
|
||||
}
|
||||
|
||||
if (!process.env.NPMTS_TEST) { // NPMTS_TEST is used during testing
|
||||
if (!process.env.NPMTS_TEST) {
|
||||
// NPMTS_TEST is used during testing
|
||||
for (let i = 0; i <= retryArg; i++) {
|
||||
if (process.env.DEBUG_NPMCI === 'true') {
|
||||
console.log(commandArg)
|
||||
console.log(commandArg);
|
||||
}
|
||||
execResult = await npmciSmartshell.exec(commandArg)
|
||||
execResult = await npmciSmartshell.exec(commandArg);
|
||||
|
||||
// determine how bash reacts to error and success
|
||||
if (execResult.exitCode !== 0 && i === retryArg) { // something went wrong and retries are exhausted
|
||||
if (execResult.exitCode !== 0 && i === retryArg) {
|
||||
// something went wrong and retries are exhausted
|
||||
if (failOnError) {
|
||||
plugins.beautylog.error('something went wrong and retries are exhausted')
|
||||
process.exit(1)
|
||||
plugins.beautylog.error('something went wrong and retries are exhausted');
|
||||
process.exit(1);
|
||||
}
|
||||
} else if (execResult.exitCode === 0) { // everything went fine, or no error wanted
|
||||
i = retryArg + 1 // retry +1 breaks for loop, if everything works out ok retrials are not wanted
|
||||
} else if (execResult.exitCode === 0) {
|
||||
// everything went fine, or no error wanted
|
||||
i = retryArg + 1; // retry +1 breaks for loop, if everything works out ok retrials are not wanted
|
||||
} else {
|
||||
plugins.beautylog.warn('Something went wrong! Exit Code: ' + execResult.exitCode.toString())
|
||||
plugins.beautylog.info('Retry ' + (i + 1).toString() + ' of ' + retryArg.toString())
|
||||
plugins.beautylog.warn(
|
||||
'Something went wrong! Exit Code: ' + execResult.exitCode.toString()
|
||||
);
|
||||
plugins.beautylog.info('Retry ' + (i + 1).toString() + ' of ' + retryArg.toString());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
plugins.beautylog.log('ShellExec would be: ' + commandArg)
|
||||
plugins.beautylog.log('ShellExec would be: ' + commandArg);
|
||||
execResult = {
|
||||
exitCode: 0,
|
||||
stdout: 'testOutput'
|
||||
}
|
||||
};
|
||||
}
|
||||
return execResult.stdout
|
||||
}
|
||||
return execResult.stdout;
|
||||
};
|
||||
|
||||
/**
|
||||
* bashNoError allows executing stuff without throwing an error
|
||||
*/
|
||||
export let bashNoError = async (commandArg: string): Promise<string> => {
|
||||
return await bash(commandArg, -1)
|
||||
}
|
||||
return await bash(commandArg, -1);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user