We are moving an Angular (Angular, NgRx and Angular Material Starter) based website from CircleCI to Shippable, and I'm now getting these failures:
27 05 2019 14:46:00.036:INFO [karma-server]: Karma v4.0.1 server started at http://0.0.0.0:9876/
27 05 2019 14:46:00.040:INFO [launcher]: Launching browsers ChromeShippable with concurrency unlimited
27 05 2019 14:46:00.071:INFO [launcher]: Starting browser Chrome
27 05 2019 14:46:01.326:ERROR [launcher]: Cannot start Chrome
nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/build/versions/node/v10.14.1"
Run `unset npm_config_prefix` to unset it.
27 05 2019 14:46:01.327:ERROR [launcher]: Chrome stdout:
27 05 2019 14:46:01.327:ERROR [launcher]: Chrome stderr: nvm is not compatible with the "npm_config_prefix" environment variable: currently set to "/build/versions/node/v10.14.1"
Run `unset npm_config_prefix` to unset it.
I can share more configuration, but the same code built fine in CircleCI and now is failing in Shippable.
I can reproduce locally (on my local Docker) using the drydock/u16nodall image.
We are setting the following env vars prior to running npm:
export PATH="./node_modules/.bin:$PATH";
export CHROME_BIN=chromium-browser;
export DISPLAY=:99.0;
Different NPM or Node versions don't seem to make a difference.
karma.conf.js has this:
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
var isWatch = config.buildWebpack.options.watch;
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-spec-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../shippable/codecoverage'),
reports: ['cobertura', 'html', 'lcovonly', 'json'],
fixWebpackSourcePaths: true,
thresholds: {
statements: 80,
lines: 80,
branches: 72,
functions: 80
}
},
reporters: ['spec'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
customLaunchers: {
ChromeShippable: {
base: 'Chrome',
flags: ['--no-sandbox','--disable-setuid-sandbox']
}
},
browserNoActivityTimeout: 50000,
singleRun: !isWatch
});
};
All I've been able to find around the _not compatible npm_config_prefix_ error seems to be related to a corrupted node installation. But installing a fresh version with NVM also shows this error.
Any ideas how to get this working?
I finally was able to overcome this issue by updating the
customLauchersconfiguration to base off ofChromeHeadlessinstead ofChrome.I'm not done chasing errors around the shippable migration, but at least this clears the error I was specifically asking about. I have already confirmed this ran fine (didn't crash when firing up Chrome) on the Shippable build boxes too.
EDIT: Most of all the subsequent errors were also related to Chrome needing to be explicitly run as headless.
Added to
.pa11yci'sdefaults:Added to
e2e/protractor.conf.js's exportedcapabilities:There were plenty other changes outside the scope of this question.