build(docs-infra): keep other dependencies pinned when installing local Angular packages (#28510)
`ng-packages-installer` can be used to replace Angular packages with locally built ones (from `dist/packages-dist/`) along with their peer dependencies. Previously, in order to achieve this, `yarn install` was called with the `--no-lockfile` option, which resulted in installing the latest versions of all dependencies (including transitive ones) permitted by the corresponding version ranges in `package.json` files. As a result, newly released versions would be picked, resulting in unexpected, non-deterministic breakages in CI. This commit calls `yarn install` with the `--pure-lockfile` option instead. As a result, only the Angular packages (for which the locally built ones are used) and their peer dependencies are unpinned; the pinned versions from `yarn.lock` are used for all other (direct and transitive) dependencies. While this does not eliminate non-determinism across builds, it significantly reduces it. PR Close #28510
This commit is contained in:
		
							parent
							
								
									08f55b35a5
								
							
						
					
					
						commit
						9ce0c23c77
					
				| @ -107,7 +107,7 @@ class NgPackagesInstaller { | |||||||
|         try { |         try { | ||||||
|           this._log(`Writing temporary local ${PACKAGE_JSON} to ${pathToPackageConfig}`); |           this._log(`Writing temporary local ${PACKAGE_JSON} to ${pathToPackageConfig}`); | ||||||
|           fs.writeFileSync(pathToPackageConfig, localPackageConfigJson); |           fs.writeFileSync(pathToPackageConfig, localPackageConfigJson); | ||||||
|           this._installDeps('--no-lockfile', '--check-files'); |           this._installDeps('--pure-lockfile', '--check-files'); | ||||||
|           this._setLocalMarker(localPackageConfigJson); |           this._setLocalMarker(localPackageConfigJson); | ||||||
|         } finally { |         } finally { | ||||||
|           this._log(`Restoring original ${PACKAGE_JSON} to ${pathToPackageConfig}`); |           this._log(`Restoring original ${PACKAGE_JSON} to ${pathToPackageConfig}`); | ||||||
|  | |||||||
| @ -145,7 +145,7 @@ describe('NgPackagesInstaller', () => { | |||||||
|       beforeEach(() => { |       beforeEach(() => { | ||||||
|         log = []; |         log = []; | ||||||
|         fs.writeFileSync.and.callFake((filePath, contents) => filePath === packageJsonPath && log.push(`writeFile: ${contents}`)); |         fs.writeFileSync.and.callFake((filePath, contents) => filePath === packageJsonPath && log.push(`writeFile: ${contents}`)); | ||||||
|         installer._installDeps.and.callFake(() => log.push('installDeps:')); |         installer._installDeps.and.callFake((...args) => log.push(`installDeps: ${args.join(' ')}`)); | ||||||
|         installer._checkLocalMarker.and.returnValue(false); |         installer._checkLocalMarker.and.returnValue(false); | ||||||
|         installer.installLocalDependencies(); |         installer.installLocalDependencies(); | ||||||
|       }); |       }); | ||||||
| @ -198,7 +198,7 @@ describe('NgPackagesInstaller', () => { | |||||||
|       it('should overwrite package.json, then install deps, then restore original package.json', () => { |       it('should overwrite package.json, then install deps, then restore original package.json', () => { | ||||||
|         expect(log).toEqual([ |         expect(log).toEqual([ | ||||||
|           `writeFile: ${expectedModifiedPackageJson}`, |           `writeFile: ${expectedModifiedPackageJson}`, | ||||||
|           `installDeps:`, |           `installDeps: --pure-lockfile --check-files`, | ||||||
|           `writeFile: ${dummyPackageJson}` |           `writeFile: ${dummyPackageJson}` | ||||||
|         ]); |         ]); | ||||||
|       }); |       }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user