Currently with the release of "8.0.0-beta.10", the Bazel npm packag accidentally was stamped with an incorrect version placeholder: `8.0.0-beta.10+1.sha-a28b3e3`. This can happen because the placeholder is based on latest tag that matches the Semver format. e.g. if `HEAD` equals to the commit that has the latest tag, the version name will be correct and refer to the tag name (e.g. `8.0.0-beta.10`). Though if the latest commit is not tagged with the most recent tag, the version name will also include the SHA of the commit (e.g. `8.0.0-beta.10+1.sha-a28b3e3`). We can ensure that we don't accidentally release versions from a more recent commit that shouldn't be part of the release by adding a pre-release check that ensures that the `BUILD_SCM_VERSION` Bazel status variable matches the expected version format. PR Close #29551
		
			
				
	
	
		
			55 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google Inc. All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| 
 | |
| // tslint:disable:no-console
 | |
| // Generates the data used by the stamping feature in bazel.
 | |
| // See the section on stamping in docs / BAZEL.md
 | |
| // This script must be a NodeJS script in order to be cross-platform.
 | |
| // See https://github.com/bazelbuild/bazel/issues/5958
 | |
| // Note: git operations, especially git status, take a long time inside mounted docker volumes
 | |
| // in Windows or OSX hosts (https://github.com/docker/for-win/issues/188).
 | |
| const execSync = require('child_process').execSync;
 | |
| function _exec(str) {
 | |
|   return execSync(str).toString().trim();
 | |
| }
 | |
| 
 | |
| function onError() {
 | |
|   console.error('Failed to execute:,', process.argv.join(' '));
 | |
|   console.error('');
 | |
| }
 | |
| 
 | |
| // Setup crash handler
 | |
| process.on('uncaughtException', onError);
 | |
| 
 | |
| const BUILD_SCM_HASH = _exec(`git rev-parse HEAD`);
 | |
| console.log(`BUILD_SCM_HASH ${BUILD_SCM_HASH}`);
 | |
| 
 | |
| if (_exec(`git tag`) == '') {
 | |
|   console.error(`No git tags found, can't stamp the build.`);
 | |
|   console.error('Please fetch the tags first:');
 | |
|   console.error('       git fetch git@github.com:angular/angular.git --tags');
 | |
| }
 | |
| 
 | |
| // Find out if there are any uncommitted local changes
 | |
| const LOCAL_CHANGES = _exec(`git status --untracked-files=no --porcelain`) != '';
 | |
| console.log(`BUILD_SCM_LOCAL_CHANGES ${LOCAL_CHANGES}`);
 | |
| 
 | |
| // Only match the latest tag that is a version such as 6.0.0, 6.0.0-rc.5, etc...
 | |
| // This will ignore non-version tags which would break unit tests expecting a valid version
 | |
| // number in the package headers
 | |
| const BUILD_SCM_VERSION_RAW =
 | |
|     _exec(`git describe --match [0-9].[0-9].[0-9]* --abbrev=7 --tags HEAD`);
 | |
| 
 | |
| // Reformat `git describe` version string into a more semver-ish string
 | |
| //   From:   5.2.0-rc.0-57-g757f886
 | |
| //   To:     5.2.0-rc.0+57.sha-757f886
 | |
| //   Or:     5.2.0-rc.0+57.sha-757f886.with-local-changes
 | |
| const BUILD_SCM_VERSION = BUILD_SCM_VERSION_RAW.replace(/-([0-9]+)-g/, '+$1.sha-') +
 | |
|     (LOCAL_CHANGES ? '.with-local-changes' : '');
 | |
| console.log(`BUILD_SCM_VERSION ${BUILD_SCM_VERSION}`);
 |