ng_update_migrations will still access the global yarn cache on its `ng update` call and there is no way to avoid this that I can see but if no other integration tests access the global yarn cache then that one test can have free reign over it. PR Close #35877
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.3 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}`;
 | |
| }
 | |
| 
 | |
| // 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
 | |
| exec(bazelMappings ? `ng add "${bazelMappings['@angular/elements']}"` : `ng add "${__dirname}/../../dist/packages-dist/elements"`);
 | |
| 
 | |
| // Test that build is successful after adding elements
 | |
| exec('ng build --no-source-map');
 |