forked from angular-ui/bootstrap
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(build): Add 'enforce' task, custom changelog template
- Loading branch information
1 parent
201fdf8
commit 356cfb5
Showing
3 changed files
with
138 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
|
||
# <%= version%> (<%= today%>) | ||
|
||
<% if (_(changelog.feat).size() > 0) { %> ## Features | ||
<% _(changelog.feat).forEach(function(changes, scope) { %> | ||
- **<%= scope%>:** | ||
<% changes.forEach(function(change) { %> - <%= change.msg%> (<%= helpers.commitLink(change.sha1) %>) | ||
<% }); %> | ||
<% }); %> <% } %> | ||
|
||
<% if (_(changelog.fix).size() > 0) { %> ## Fixes | ||
<% _(changelog.fix).forEach(function(changes, scope) { %> | ||
- **<%= scope%>:** | ||
<% changes.forEach(function(change) { %> - <%= change.msg%> (<%= helpers.commitLink(change.sha1) %>) | ||
<% }); %> | ||
<% }); %> <% } %> | ||
|
||
<% if (_(changelog.breaking).size() > 0) { %> ## Breaking Changes | ||
<% _(changelog.breaking).forEach(function(changes, scope) { %> | ||
- **<%= scope%>:** | ||
<% changes.forEach(function(change) { %> <%= change.msg%> | ||
<% }); %> | ||
<% }); %> <% } %> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
#!/usr/bin/env node | ||
|
||
/** | ||
* Git COMMIT-MSG hook for validating commit message | ||
* See https://docs.google.com/document/d/1rk04jEuGfk9kYzfqCuOlPTSJw3hEDZJTBN5E5f1SALo/edit | ||
* | ||
* Installation: | ||
* >> cd <angular-repo> | ||
* >> ln -s validate-commit-msg.js .git/hooks/commit-msg | ||
*/ | ||
var fs = require('fs'); | ||
var util = require('util'); | ||
|
||
|
||
var MAX_LENGTH = 70; | ||
var PATTERN = /^(?:fixup!\s*)?(\w*)(\((\w+)\))?\: (.*)$/; | ||
var IGNORED = /^WIP\:/; | ||
var TYPES = { | ||
feat: true, | ||
fix: true, | ||
docs: true, | ||
style: true, | ||
refactor: true, | ||
test: true, | ||
chore: true, | ||
revert: true | ||
}; | ||
|
||
|
||
var error = function() { | ||
// gitx does not display it | ||
// http://gitx.lighthouseapp.com/projects/17830/tickets/294-feature-display-hook-error-message-when-hook-fails | ||
// https://groups.google.com/group/gitx/browse_thread/thread/a03bcab60844b812 | ||
console.error('INVALID COMMIT MSG: ' + util.format.apply(null, arguments)); | ||
}; | ||
|
||
|
||
var validateMessage = function(message) { | ||
var isValid = true; | ||
|
||
if (IGNORED.test(message)) { | ||
console.log('Commit message validation ignored.'); | ||
return true; | ||
} | ||
|
||
if (message.length > MAX_LENGTH) { | ||
error('is longer than %d characters !', MAX_LENGTH); | ||
isValid = false; | ||
} | ||
|
||
var match = PATTERN.exec(message); | ||
|
||
if (!match) { | ||
error('does not match "<type>(<scope>): <subject>" ! was: "' + message + '"\nNote: <scope> must be only letters.'); | ||
return false; | ||
} | ||
|
||
var type = match[1]; | ||
var scope = match[3]; | ||
var subject = match[4]; | ||
|
||
if (!TYPES.hasOwnProperty(type)) { | ||
error('"%s" is not allowed type !', type); | ||
return false; | ||
} | ||
|
||
// Some more ideas, do want anything like this ? | ||
// - allow only specific scopes (eg. fix(docs) should not be allowed ? | ||
// - auto correct the type to lower case ? | ||
// - auto correct first letter of the subject to lower case ? | ||
// - auto add empty line after subject ? | ||
// - auto remove empty () ? | ||
// - auto correct typos in type ? | ||
// - store incorrect messages, so that we can learn | ||
|
||
return isValid; | ||
}; | ||
|
||
|
||
var firstLineFromBuffer = function(buffer) { | ||
return buffer.toString().split('\n').shift(); | ||
}; | ||
|
||
|
||
|
||
// publish for testing | ||
exports.validateMessage = validateMessage; | ||
|
||
// hacky start if not run by jasmine :-D | ||
if (process.argv.join('').indexOf('jasmine-node') === -1) { | ||
var commitMsgFile = process.argv[2]; | ||
var incorrectLogFile = commitMsgFile.replace('COMMIT_EDITMSG', 'logs/incorrect-commit-msgs'); | ||
|
||
fs.readFile(commitMsgFile, function(err, buffer) { | ||
var msg = firstLineFromBuffer(buffer); | ||
|
||
if (!validateMessage(msg)) { | ||
fs.appendFile(incorrectLogFile, msg + '\n', function() { | ||
process.exit(1); | ||
}); | ||
} else { | ||
process.exit(0); | ||
} | ||
}); | ||
} |