76 lines
2.7 KiB
JavaScript
76 lines
2.7 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import {cd, exec, rm, set} from 'shelljs';
|
|
import * as fs from 'fs';
|
|
|
|
// Fail on first error
|
|
set('-e');
|
|
|
|
// Install Angular packages that are built locally from HEAD.
|
|
// This also gets around the bug whereby yarn caches local `file://` urls.
|
|
// See https://github.com/yarnpkg/yarn/issues/2165
|
|
// The below packages are all required in a default CLI project.
|
|
const ngPackages = [
|
|
'animations',
|
|
'core',
|
|
'common',
|
|
'compiler',
|
|
'forms',
|
|
'platform-browser',
|
|
'platform-browser-dynamic',
|
|
'router',
|
|
'compiler-cli',
|
|
'language-service',
|
|
];
|
|
|
|
// Keep typescript, tslib, and @types/node versions in sync with the ones used in this repo
|
|
const nodePackages = [
|
|
'@types/node',
|
|
'tslib',
|
|
'typescript',
|
|
];
|
|
|
|
// Under Bazel integration tests are sand-boxed and cannot reference
|
|
// reference `../../dist/*` packages and should not do so as these are not
|
|
// inputs to the test. The npm_integeration_test rule instead provides a manifest
|
|
// file that contains all of the npm package mappings available to the test.
|
|
const bazelMappings: { [key: string]: string } = fs.existsSync('NPM_PACKAGE_MANIFEST.json') ? require('./NPM_PACKAGE_MANIFEST.json') : {};
|
|
|
|
const packages: { [key: string]: string } = {};
|
|
for (let p of ngPackages) {
|
|
const n = `@angular/${p}`;
|
|
packages[n] = `file:${bazelMappings[n]}` || `file:${__dirname}/../../dist/packages-dist/${p}`;
|
|
}
|
|
for (let p of nodePackages) {
|
|
packages[p] = `file:${bazelMappings[p]}` || `file:${__dirname}/../../node_modules/${p}`;
|
|
}
|
|
|
|
// TODO(alan-agius4): remove once the main repo dependency on `@angular-devkut/build-angular` is `0.1200.0-next.9` or greater.
|
|
packages['@angular-devkit/build-angular'] = 'github:angular/angular-devkit-build-angular-builds#e0c1374b12cfc892844030431bc19f631c0086a5';
|
|
|
|
// Clean up previously run test
|
|
cd(__dirname);
|
|
rm('-rf', `demo`);
|
|
|
|
// Set up demo project
|
|
exec('ng version');
|
|
exec('ng new demo --skip-git --skip-install --style=css --no-interactive');
|
|
cd('demo');
|
|
// Use a local yarn cache folder so we don't access the global yarn cache
|
|
exec('mkdir .yarn_local_cache');
|
|
|
|
// Install Angular packages that are built locally from HEAD and npm packages
|
|
// from root node modules that are to be kept in sync
|
|
const packageList = Object.keys(packages).map(p => `${p}@${packages[p]}`).join(' ');
|
|
exec(`yarn add --ignore-scripts --silent ${packageList} --cache-folder ./.yarn_local_cache`);
|
|
|
|
// Add @angular/elements
|
|
const schematicPath = bazelMappings
|
|
? `${bazelMappings['@angular/elements']}`
|
|
: `${__dirname}/../../dist/packages-dist/elements`;
|
|
|
|
exec(`ng add "${schematicPath}" --skip-confirmation`);
|
|
|
|
// Test that build is successful after adding elements
|
|
exec('ng build --no-source-map --configuration=development');
|