Skip to content

build: fix failing nightly snapshot tests #14395

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 6, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ jobs:
- *restore_cache
- *yarn_install

- run: ./scripts/install-angular-snapshots.sh
- run: node ./scripts/circleci/setup-angular-snapshots.js
- run: ./scripts/circleci/run-local-browser-tests.sh

# ----------------------------------------------------------------------------------------
Expand Down
60 changes: 60 additions & 0 deletions scripts/circleci/setup-angular-snapshots.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/**
* Script that sets up the Angular snapshot github builds. We set up the snapshot builds by
* overwriting the versions in the "package.json" and taking advantage of Yarn's resolutions
* feature. Yarn resolutions will be used to flatten nested Angular packages because by default
* Yarn does not flatten any dependency. See:
*
* node_modules/compiler@snapshot
* node_modules/compiler-cli@snapshot
* node_modules/[email protected]
*
* Note that we cannot just use Yarn's `--flat` option because that would mean that it tries
* to flatten **all** dependencies and could cause unexpected results. We **only** want to
* explicitly flatten out all `@angular/*` dependencies. This can be achieved with resolutions.
* Read more here: https://yarnpkg.com/lang/en/docs/package-json/#toc-resolutions
*/

const {yellow, green} = require('chalk');
const {writeFileSync} = require('fs');
const {join} = require('path');
const {execSync} = require('child_process');

const projectDir = join(__dirname, '../../');
const packageJsonPath = join(projectDir, 'package.json');
const packageJson = require(packageJsonPath);

// Initialize the "resolutions" property in case it is not present in the "package.json" yet.
// See: https://yarnpkg.com/lang/en/docs/package-json/#toc-resolutions for the API.
packageJson['resolutions'] = packageJson['resolutions'] || {};

// List that contains the names of all installed Angular packages (e.g. "@angular/core")
const angularPackages = Object.keys({...packageJson.dependencies, ...packageJson.devDependencies})
.filter(packageName => packageName.startsWith('@angular/'));

console.log(green('Setting up snapshot builds for:\n'));
console.log(yellow(` ${angularPackages.join('\n ')}\n`));

// Setup the snapshot version for each Angular package specified in the "package.json" file.
angularPackages.forEach(packageName => {
const buildsUrl = `github:angular/${packageName.split('/')[1]}-builds`;
// Add resolutions for each package in the format "**/{PACKAGE}" so that all
// nested versions of that specific Angular package will have the same version.
packageJson.resolutions[`**/${packageName}`] = buildsUrl;

// Since the resolutions only cover the version of all nested installs, we also need
// to explicitly set the version for the package listed in the project "package.json".
packageJson.dependencies[packageName] = buildsUrl;

// In case this dependency was previously a dev dependency, just remove it because we
// re-added it as a normal dependency for simplicity.
delete packageJson.devDependencies[packageName];
});

// Write changes to the "packageJson", so that we can install the new versions afterwards.
writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));

console.log(green('Successfully added the "resolutions" to the "package.json".'));

// Run "yarn" in the directory that contains the "package.json". Also pipe all output to the
// current process so that everything can be debugged within CircleCI.
execSync('yarn', {cwd: projectDir, stdio: 'inherit', shell: true});
16 changes: 0 additions & 16 deletions scripts/install-angular-snapshots.sh

This file was deleted.