test(pre): custom commit message analyzer
This commit is contained in:
parent
e445effdcf
commit
08ae05fb82
@ -4,6 +4,7 @@ var test = require('tape')
|
|||||||
|
|
||||||
var createModule = require('./lib/create-module')
|
var createModule = require('./lib/create-module')
|
||||||
|
|
||||||
|
require('./scenarios/custom-analyzer')(test, createModule)
|
||||||
require('./scenarios/ignore')(test, createModule)
|
require('./scenarios/ignore')(test, createModule)
|
||||||
require('./scenarios/prepublish')(test, createModule)
|
require('./scenarios/prepublish')(test, createModule)
|
||||||
require('./scenarios/postpublish')(test, createModule)
|
require('./scenarios/postpublish')(test, createModule)
|
||||||
|
37
tests/lib/commit-to-version-test.js
Normal file
37
tests/lib/commit-to-version-test.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
var fs = require('fs')
|
||||||
|
var exec = require('child_process').exec
|
||||||
|
|
||||||
|
var nixt = require('nixt')
|
||||||
|
|
||||||
|
module.exports = function (t, message, version, code, name, cwd) {
|
||||||
|
t.test(name, function (t) {
|
||||||
|
t.plan(3)
|
||||||
|
|
||||||
|
nixt()
|
||||||
|
.cwd(cwd)
|
||||||
|
.env('CI', true)
|
||||||
|
.env('npm_config_registry', 'http://127.0.0.1:4873/')
|
||||||
|
.exec('git commit --allow-empty -m "' + message + '"')
|
||||||
|
.run('npm run prepublish')
|
||||||
|
.code(code)
|
||||||
|
.stdout(/> semantic-release pre\n\nDetermining new version\n/m)
|
||||||
|
.end(function (err) {
|
||||||
|
t.error(err, 'nixt')
|
||||||
|
|
||||||
|
var pkg = JSON.parse(fs.readFileSync(cwd + '/package.json'))
|
||||||
|
t.is(pkg.version, version, 'version')
|
||||||
|
|
||||||
|
if (code === 1) {
|
||||||
|
return t.error(null, 'no publish')
|
||||||
|
}
|
||||||
|
|
||||||
|
exec('npm publish --ignore-scripts', {cwd: cwd}, function (err) {
|
||||||
|
setTimeout(function () {
|
||||||
|
t.error(err, 'publish')
|
||||||
|
}, 300)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
20
tests/lib/custom-analyzer.js
Normal file
20
tests/lib/custom-analyzer.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
module.exports = function (commits) {
|
||||||
|
var type = null
|
||||||
|
|
||||||
|
commits.every(function (commit) {
|
||||||
|
if (/FOO/.test(commit.message)) {
|
||||||
|
type = 'major'
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (/BAR/.test(commit.message)) type = 'minor'
|
||||||
|
|
||||||
|
if (!type && /BAZ/.test(commit.message)) type = 'patch'
|
||||||
|
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
return type
|
||||||
|
}
|
23
tests/scenarios/custom-analyzer.js
Normal file
23
tests/scenarios/custom-analyzer.js
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
var path = require('path')
|
||||||
|
|
||||||
|
var efh = require('error-first-handler')
|
||||||
|
|
||||||
|
var commitToVersionTest = require('../lib/commit-to-version-test')
|
||||||
|
|
||||||
|
module.exports = function (test, createModule) {
|
||||||
|
createModule({
|
||||||
|
release: {
|
||||||
|
analyzer: path.join(__dirname, '../lib/custom-analyzer')
|
||||||
|
}
|
||||||
|
}, efh()(function (name, cwd) {
|
||||||
|
test('custom-analyzer', function (t) {
|
||||||
|
commitToVersionTest(t, 'HO', '0.0.0', 1, 'abort publish w/o changes', cwd)
|
||||||
|
commitToVersionTest(t, 'BAZ', '1.0.0', 0, 'release 1.0.0 if unpublished', cwd)
|
||||||
|
commitToVersionTest(t, 'BAZ', '1.0.1', 0, 'bump patch for fix', cwd)
|
||||||
|
commitToVersionTest(t, 'BAR', '1.1.0', 0, 'bump minor for feature', cwd)
|
||||||
|
commitToVersionTest(t, 'FOO', '2.0.0', 0, 'bump major for breaking change', cwd)
|
||||||
|
})
|
||||||
|
}))
|
||||||
|
}
|
@ -1,50 +1,17 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
var fs = require('fs')
|
|
||||||
var exec = require('child_process').exec
|
|
||||||
|
|
||||||
var efh = require('error-first-handler')
|
var efh = require('error-first-handler')
|
||||||
var nixt = require('nixt')
|
|
||||||
|
var commitToVersionTest = require('../lib/commit-to-version-test')
|
||||||
|
|
||||||
module.exports = function (test, createModule) {
|
module.exports = function (test, createModule) {
|
||||||
createModule(efh()(function (name, cwd) {
|
createModule(efh()(function (name, cwd) {
|
||||||
test('prepublish', function (t) {
|
test('prepublish', function (t) {
|
||||||
prepublishTest(t, 'refactor: change', '0.0.0', 1, 'abort publish w/o changes')
|
commitToVersionTest(t, 'refactor: change', '0.0.0', 1, 'abort publish w/o changes', cwd)
|
||||||
prepublishTest(t, 'fix: change', '1.0.0', 0, 'release 1.0.0 if unpublished')
|
commitToVersionTest(t, 'fix: change', '1.0.0', 0, 'release 1.0.0 if unpublished', cwd)
|
||||||
prepublishTest(t, 'fix: change', '1.0.1', 0, 'bump patch for fix')
|
commitToVersionTest(t, 'fix: change', '1.0.1', 0, 'bump patch for fix', cwd)
|
||||||
prepublishTest(t, 'feat: change', '1.1.0', 0, 'bump minor for feature')
|
commitToVersionTest(t, 'feat: change', '1.1.0', 0, 'bump minor for feature', cwd)
|
||||||
prepublishTest(t, 'fix: BREAKING CHANGE: change', '2.0.0', 0, 'bump major for breaking change')
|
commitToVersionTest(t, 'fix: BREAKING CHANGE: change', '2.0.0', 0, 'bump major for breaking change', cwd)
|
||||||
})
|
})
|
||||||
|
|
||||||
function prepublishTest (t, message, version, code, name) {
|
|
||||||
t.test(name, function (t) {
|
|
||||||
t.plan(3)
|
|
||||||
|
|
||||||
nixt()
|
|
||||||
.cwd(cwd)
|
|
||||||
.env('CI', true)
|
|
||||||
.env('npm_config_registry', 'http://127.0.0.1:4873/')
|
|
||||||
.exec('git commit --allow-empty -m "' + message + '"')
|
|
||||||
.run('npm run prepublish')
|
|
||||||
.code(code)
|
|
||||||
.stdout(/> semantic-release pre\n\nDetermining new version\n/m)
|
|
||||||
.end(function (err) {
|
|
||||||
t.error(err, 'nixt')
|
|
||||||
|
|
||||||
var pkg = JSON.parse(fs.readFileSync(cwd + '/package.json'))
|
|
||||||
t.is(pkg.version, version, 'version')
|
|
||||||
|
|
||||||
if (code === 1) {
|
|
||||||
return t.error(null, 'no publish')
|
|
||||||
}
|
|
||||||
|
|
||||||
exec('npm publish --ignore-scripts', {cwd: cwd}, function (err) {
|
|
||||||
setTimeout(function () {
|
|
||||||
t.error(err, 'publish')
|
|
||||||
}, 300)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user