Skip to content

Commit d1214af

Browse files
chore(build): refactor build version information
1 parent 11c5bb7 commit d1214af

File tree

2 files changed

+7
-175
lines changed

2 files changed

+7
-175
lines changed

Gruntfile.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var files = require('./angularFiles').files;
22
var util = require('./lib/grunt/utils.js');
3+
var versionInfo = require('./lib/versions/version-info');
34
var path = require('path');
45

56
module.exports = function(grunt) {
@@ -8,10 +9,10 @@ module.exports = function(grunt) {
89

910
grunt.loadTasks('lib/grunt');
1011

11-
var NG_VERSION = util.getVersion();
12+
var NG_VERSION = versionInfo.currentVersion;
13+
NG_VERSION.cdn = versionInfo.currentPackage.cdnVersion;
1214
var dist = 'angular-'+ NG_VERSION.full;
1315

14-
1516
//global beforeEach
1617
util.init();
1718

lib/grunt/utils.js

+4-173
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ var shell = require('shelljs');
44
var grunt = require('grunt');
55
var spawn = require('child_process').spawn;
66
var semver = require('semver');
7+
var versionInfo = require('../versions/version-info');
8+
79
var _ = require('lodash');
8-
var version, pkg;
10+
911
var CSP_CSS_HEADER = '/* Include this file in your html if you are using the CSP mode. */\n\n';
1012

1113
var PORT_MIN = 8000;
@@ -23,23 +25,6 @@ var getRandomPorts = function() {
2325
];
2426
};
2527

26-
var getPackage = function() {
27-
if ( !pkg ) {
28-
29-
// Search up the folder hierarchy for the first package.json
30-
var packageFolder = path.resolve('.');
31-
while ( !fs.existsSync(path.join(packageFolder, 'package.json')) ) {
32-
var parent = path.dirname(packageFolder);
33-
if ( parent === packageFolder) { break; }
34-
packageFolder = parent;
35-
}
36-
pkg = JSON.parse(fs.readFileSync(path.join(packageFolder,'package.json'), 'UTF-8'));
37-
38-
}
39-
40-
return pkg;
41-
};
42-
4328

4429
module.exports = {
4530

@@ -50,160 +35,6 @@ module.exports = {
5035
},
5136

5237

53-
getGitRepoInfo: function() {
54-
var GITURL_REGEX = /^https:\/\/github.com\/([^\/]+)\/(.+).git$/;
55-
var match = GITURL_REGEX.exec(getPackage().repository.url);
56-
var git = {
57-
owner: match[1],
58-
repo: match[2]
59-
};
60-
return git;
61-
},
62-
63-
64-
getVersion: function(){
65-
if (version) return version;
66-
67-
try {
68-
69-
var gitTag = getTagOfCurrentCommit();
70-
var semVerVersion, codeName, fullVersion;
71-
if (gitTag) {
72-
// tagged release
73-
fullVersion = semVerVersion = semver.valid(gitTag);
74-
codeName = getTaggedReleaseCodeName(gitTag);
75-
} else {
76-
// snapshot release
77-
semVerVersion = getSnapshotVersion();
78-
fullVersion = semVerVersion + '-' + getSnapshotSuffix();
79-
codeName = 'snapshot';
80-
}
81-
82-
var versionParts = semVerVersion.match(/(\d+)\.(\d+)\.(\d+)/);
83-
84-
version = {
85-
full: fullVersion,
86-
major: versionParts[1],
87-
minor: versionParts[2],
88-
dot: versionParts[3],
89-
codename: codeName,
90-
cdn: getPackage().cdnVersion
91-
};
92-
93-
// Stable versions have an even minor version
94-
version.isStable = version.minor%2 === 0;
95-
96-
return version;
97-
98-
} catch (e) {
99-
grunt.fail.warn(e);
100-
}
101-
102-
function getTagOfCurrentCommit() {
103-
var gitTagResult = shell.exec('git describe --exact-match', {silent:true});
104-
var gitTagOutput = gitTagResult.output.trim();
105-
var branchVersionPattern = new RegExp(getPackage().branchVersion.replace('.', '\\.').replace('*', '\\d+'));
106-
if (gitTagResult.code === 0 && gitTagOutput.match(branchVersionPattern)) {
107-
return gitTagOutput;
108-
} else {
109-
return null;
110-
}
111-
}
112-
113-
function getTaggedReleaseCodeName(tagName) {
114-
var tagMessage = shell.exec('git cat-file -p '+ tagName +' | grep "codename"', {silent:true}).output;
115-
var codeName = tagMessage && tagMessage.match(/codename\((.*)\)/)[1];
116-
if (!codeName) {
117-
throw new Error("Could not extract release code name. The message of tag "+tagName+
118-
" must match '*codename(some release name)*'");
119-
}
120-
return codeName;
121-
}
122-
123-
function getSnapshotVersion() {
124-
var oldTags = shell.exec('git tag -l v'+getPackage().branchVersion, {silent:true}).output.trim().split('\n');
125-
// ignore non semver versions.
126-
oldTags = oldTags.filter(function(version) {
127-
return version && semver.valid(version);
128-
});
129-
if (oldTags.length) {
130-
oldTags.sort(semver.compare);
131-
semVerVersion = oldTags[oldTags.length-1];
132-
if (semVerVersion.indexOf('-') !== -1) {
133-
semVerVersion = semver.inc(semVerVersion, 'prerelease');
134-
} else {
135-
semVerVersion = semver.inc(semVerVersion, 'patch');
136-
}
137-
} else {
138-
semVerVersion = semver.valid(getPackage().branchVersion.replace(/\*/g, '0'));
139-
}
140-
return semVerVersion;
141-
}
142-
143-
function getSnapshotSuffix() {
144-
var jenkinsBuild = process.env.TRAVIS_BUILD_NUMBER || process.env.BUILD_NUMBER || 'local';
145-
var hash = shell.exec('git rev-parse --short HEAD', {silent: true}).output.replace('\n', '');
146-
return 'build.'+jenkinsBuild+'+sha.'+hash;
147-
}
148-
},
149-
150-
getPreviousVersions: function() {
151-
var VERSION_REGEX = /([1-9]\d*)\.(\d+)\.(\d+)(?:-?rc\.?(\d+)|-(snapshot))?/;
152-
153-
// Pad out a number with zeros at the front to make it `digits` characters long
154-
function pad(num, digits) {
155-
var zeros = Array(digits+1).join('0');
156-
return (zeros+num).slice(-digits);
157-
}
158-
159-
function padVersion(version) {
160-
// We pad out the version numbers with 0s so they sort nicely
161-
// - Non-Release Candidates get 9999 for their release candidate section to make them appear earlier
162-
// - Snapshots get 9 added to the front to move them to the top of the list
163-
var maxLength = 4;
164-
var padded = (version.snapshot ? '9' : '0') + pad(version.major, maxLength) +
165-
pad(version.minor, maxLength) + pad(version.dot, maxLength) +
166-
pad(version.rc || 9999, maxLength);
167-
return padded;
168-
}
169-
170-
function getVersionFromTag(tag) {
171-
var match = VERSION_REGEX.exec(tag);
172-
if ( match ) {
173-
var version = {
174-
tag: tag,
175-
major: match[1], minor: match[2], dot: match[3], rc: match[4],
176-
snapshot: !!match[5] && getSnapshotSuffix()
177-
};
178-
179-
if(version.snapshot) {
180-
version.full = version.major + '.' + version.minor + '.x (edge)';
181-
} else {
182-
version.full = version.major + '.' + version.minor + '.' + version.dot +
183-
(version.rc ? '-rc.' + version.rc : '');
184-
}
185-
186-
// Stable versions have an even minor version and are not a release candidate
187-
version.isStable = !(version.minor%2 || version.rc);
188-
189-
// Versions before 1.0.2 had a different docs folder name
190-
version.docsUrl = 'http://code.angularjs.org/' + version.full + '/docs';
191-
if ( version.major < 1 || (version.major === 1 && version.minor === 0 && version.dot < 2 ) ) {
192-
version.docsUrl += '-' + version.full;
193-
}
194-
195-
return version;
196-
}
197-
}
198-
199-
var tags = shell.exec('git tag', {silent: true}).output.split(/\s*\n\s*/);
200-
return _(tags)
201-
.map(getVersionFromTag)
202-
.filter() // getVersion can map to undefined - this clears those out
203-
.sortBy(padVersion)
204-
.value();
205-
},
206-
20738
startKarma: function(config, singleRun, done){
20839
var browsers = grunt.option('browsers');
20940
var reporters = grunt.option('reporters');
@@ -374,7 +205,7 @@ module.exports = {
374205
var mapFile = minFile + '.map';
375206
var mapFileName = mapFile.match(/[^\/]+$/)[0];
376207
var errorFileName = file.replace(/\.js$/, '-errors.json');
377-
var versionNumber = this.getVersion().full;
208+
var versionNumber = grunt.config('NG_VERSION').full;
378209
shell.exec(
379210
'java ' +
380211
this.java32flags() + ' ' +

0 commit comments

Comments
 (0)