diff --git a/package.json b/package.json index f7283fdb..b059274b 100644 --- a/package.json +++ b/package.json @@ -24,12 +24,12 @@ "@semantic-release/commit-analyzer": "^2.0.0", "@semantic-release/condition-travis": "^4.0.0", "@semantic-release/error": "^1.0.0", + "@semantic-release/last-release-npm": "^1.1.1", "@semantic-release/release-notes-generator": "^2.0.0", "git-head": "^1.2.1", "github": "^0.2.4", "lodash": "^3.9.3", "nopt": "^3.0.3", - "npm-registry-client": "^6.4.0", "npmconf": "^2.1.2", "npmlog": "^1.2.1", "parse-github-repo-url": "^1.0.0", diff --git a/src/lib/last-release.js b/src/lib/last-release.js deleted file mode 100644 index 544c2f77..00000000 --- a/src/lib/last-release.js +++ /dev/null @@ -1,26 +0,0 @@ -const SemanticReleaseError = require('@semantic-release/error') - -const npmlog = require('npmlog') -const RegClient = require('npm-registry-client') - -module.exports = function ({pkg, npm}, cb) { - npmlog.level = npm.loglevel || 'error' - const client = new RegClient({log: npmlog}) - - client.get(`${npm.registry}${pkg.name.replace('/', '%2F')}`, { - auth: npm.auth - }, (err, data) => { - if (err && err.statusCode === 404) return cb(null, {}) - if (err) return cb(err) - - const version = data['dist-tags'][npm.tag] - - if (!version) return cb(new SemanticReleaseError(`There is no release with the dist-tag "${npm.tag}" yet. Tag a version first.`, 'ENODISTTAG')) - - cb(null, { - version, - gitHead: data.versions[version].gitHead, - tag: npm.tag - }) - }) -} diff --git a/src/lib/plugins.js b/src/lib/plugins.js index 2740a0a9..8ed23ece 100644 --- a/src/lib/plugins.js +++ b/src/lib/plugins.js @@ -5,7 +5,8 @@ let exports = module.exports = function (options) { analyzeCommits: exports.normalize(options.analyzeCommits, '@semantic-release/commit-analyzer'), generateNotes: exports.normalize(options.generateNotes, '@semantic-release/release-notes-generator'), verifyConditions: exports.normalize(options.verifyConditions, '@semantic-release/condition-travis'), - verifyRelease: exports.normalize(options.verifyRelease, './plugin-noop') + verifyRelease: exports.normalize(options.verifyRelease, './plugin-noop'), + getLastRelease: exports.normalize(options.getLastRelease, '@semantic-release/last-release-npm') } } diff --git a/src/pre.js b/src/pre.js index 9190f2f7..f770e55f 100644 --- a/src/pre.js +++ b/src/pre.js @@ -2,14 +2,14 @@ const _ = require('lodash') const auto = require('run-auto') const semver = require('semver') -const getLastRelease = require('./lib/last-release') const getCommits = require('./lib/commits') const getType = require('./lib/type') module.exports = function (config, cb) { - const {plugins} = config + const { plugins } = config + auto({ - lastRelease: getLastRelease.bind(null, config), + lastRelease: plugins.getLastRelease.bind(null, config), commits: ['lastRelease', (cb, results) => { getCommits(_.assign({ lastRelease: results.lastRelease diff --git a/test/specs/last-release.js b/test/specs/last-release.js deleted file mode 100644 index 55467056..00000000 --- a/test/specs/last-release.js +++ /dev/null @@ -1,79 +0,0 @@ -const { defaults } = require('lodash') -const test = require('tap').test - -require('../mocks/registry') -const lastRelease = require('../../dist/lib/last-release') - -const npm = { - registry: 'http://registry.npmjs.org/', - tag: 'latest' -} - -test('last release from registry', (t) => { - t.plan(5) - - t.test('get release from package name', (tt) => { - lastRelease({ - pkg: {name: 'available'}, - npm - }, (err, release) => { - tt.error(err) - tt.is(release.version, '1.33.7', 'version') - tt.is(release.gitHead, 'HEAD', 'gitHead') - tt.is(release.tag, 'latest', 'dist-tag') - - tt.end() - }) - }) - - t.test('get release from a tagged package\'s name', (tt) => { - lastRelease({ - pkg: {name: 'tagged'}, - npm: defaults({tag: 'foo'}, npm) - }, (err, release) => { - tt.error(err) - tt.is(release.version, '0.8.15', 'version') - tt.is(release.gitHead, 'bar', 'gitHead') - tt.is(release.tag, 'foo', 'dist-tag') - - tt.end() - }) - }) - - t.test('get error from an untagged package\'s name', (tt) => { - lastRelease({ - pkg: {name: 'untagged'}, - npm: defaults({tag: 'bar'}, npm) - }, (err) => { - tt.is(err.code, 'ENODISTTAG', 'error') - - tt.end() - }) - }) - - t.test('get release from scoped package name', (tt) => { - lastRelease({ - pkg: {name: '@scoped/available'}, - npm - }, (err, release) => { - tt.error(err) - tt.is(release.version, '1.33.7', 'version') - tt.is(release.gitHead, 'HEAD', 'gitHead') - tt.is(release.tag, 'latest', 'dist-tag') - - tt.end() - }) - }) - - t.test('get nothing from not yet published package name', (tt) => { - lastRelease({ - pkg: {name: 'unavailable'}, - npm - }, (err, release) => { - tt.error(err) - tt.is(release.version, undefined, 'no version') - - tt.end() - }) - }) -}) diff --git a/test/specs/pre.js b/test/specs/pre.js index 6f1a0d57..a1a6509d 100644 --- a/test/specs/pre.js +++ b/test/specs/pre.js @@ -6,9 +6,16 @@ const pre = proxyquire('../../dist/pre', { 'child_process': require('../mocks/child-process') }) +const versions = { + available: '1.0.0' +} + const plugins = { verifyRelease: (release, cb) => cb(null, release), - analyzeCommits: (commits, cb) => cb(null, 'major') + analyzeCommits: (commits, cb) => cb(null, 'major'), + getLastRelease: ({ pkg }, cb) => { + cb(null, { version: versions[pkg.name] || null, gitHead: 'HEAD' }) + } } const npm = {