2012-07-22 15:57:39 -04:00
|
|
|
/* ==========================================================
|
|
|
|
* issue-guidelines.js
|
|
|
|
* http://twitter.github.com/bootstrap/javascript.html#alerts
|
|
|
|
* ==========================================================
|
|
|
|
* Copyright 2012 Twitter, Inc.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
* ========================================================== */
|
|
|
|
|
|
|
|
var assert = require('assert')
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
|
|
|
'pull-requests': {
|
|
|
|
|
|
|
|
'should always be made against -wip branches': function (pull) {
|
2012-07-31 18:16:40 -04:00
|
|
|
assert.ok(/\-wip$/.test(pull.base.ref))
|
2012-07-22 15:57:39 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
'should always be made from feature branches': function (pull) {
|
2012-07-31 18:16:40 -04:00
|
|
|
assert.notEqual(pull.head.ref, 'master')
|
2012-07-22 15:57:39 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
'should always include a unit test if changing js files': function (pull) {
|
|
|
|
var hasJS = false
|
|
|
|
var hasTests = false
|
|
|
|
|
|
|
|
pull.files.forEach(function (file) {
|
2012-07-31 18:16:40 -04:00
|
|
|
if (/^js\/[^./]+.js/.test(file.filename)) hasJS = true
|
2012-07-22 16:21:44 -04:00
|
|
|
if (/^js\/tests\/unit\/[^.]+.js/.test(file.filename)) hasTests = true
|
2012-07-22 15:57:39 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
assert.ok(!hasJS || hasJS && hasTests)
|
|
|
|
},
|
|
|
|
|
|
|
|
'after': function (pull) {
|
|
|
|
if (pull.reporter.stats.failures) {
|
|
|
|
pull.reportFailures(pull.close.bind(pull))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
'issues': {
|
|
|
|
|
|
|
|
'before': function (issue) {
|
|
|
|
var plus = {}
|
|
|
|
var labels = issue.labels.map(function (label) { return label.name });
|
|
|
|
|
|
|
|
if (~labels.indexOf('popular')) return
|
|
|
|
|
|
|
|
issue.comments.forEach(function (comment) {
|
|
|
|
if (/\+1/.test(comment.body)) plus[comment.user.login] = true
|
|
|
|
})
|
|
|
|
|
|
|
|
if (Object.keys(plus).length > 5) {
|
|
|
|
issue.tag('popular')
|
|
|
|
issue.comment('Tagging this issue as popular, please stop commenting on this issue with +1. thanks!')
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
'should include a jsfiddle/jsbin illustrating the problem if tagged with js but not a feature': function (issue) {
|
|
|
|
var labels = issue.labels.map(function (label) { return label.name });
|
|
|
|
if (~labels.indexOf('js') && !~labels.indexOf('feature')) assert.ok(/(jsfiddle|jsbin)/.test(issue.body))
|
|
|
|
},
|
|
|
|
|
|
|
|
'after': function (issue) {
|
|
|
|
if (issue.reporter.stats.failures) {
|
|
|
|
issue.reportFailures(issue.close.bind(issue))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|