diff --git a/package.json b/package.json index 9347c8b6..83480fb9 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "npm-registry-couchapp": "^2.6.12", "nyc": "^11.2.1", "p-map-series": "^1.0.0", - "prettier": "^1.8.0", + "prettier": "~1.8.0", "proxyquire": "^1.8.0", "rimraf": "^2.5.0", "sinon": "^4.0.0", diff --git a/src/lib/get-commits.js b/src/lib/get-commits.js index b2229a99..d2f957a9 100644 --- a/src/lib/get-commits.js +++ b/src/lib/get-commits.js @@ -8,7 +8,7 @@ const logger = require('./logger'); /** * Commit message. - * + * * @typedef {Object} Commit * @property {string} hash The commit hash. * @property {string} message The commit message. @@ -16,7 +16,7 @@ const logger = require('./logger'); /** * Last release. - * + * * @typedef {Object} LastRelease * @property {string} version The version number of the last release. * @property {string} [gitHead] The commit sha used to make the last release. @@ -24,7 +24,7 @@ const logger = require('./logger'); /** * Result object. - * + * * @typedef {Object} Result * @property {Array} commits The list of commits since the last release. * @property {LastRelease} lastRelease The updated lastRelease. @@ -32,7 +32,7 @@ const logger = require('./logger'); /** * Retrieve the list of commits on the current branch since the last released version, or all the commits of the current branch if there is no last released version. - * + * * The commit correspoding to the last released version is determined as follow: * - Use `lastRelease.gitHead` if defined and present in `branch` history. * - If `lastRelease.gitHead` is not in the `branch` history, unshallow the repository and try again. @@ -41,9 +41,9 @@ const logger = require('./logger'); * @param {LastRelease} lastRelease The lastRelease object obtained from the getLastRelease plugin. * @param {string} branch The branch to release from. * @param {Object} logger Global logger. - * + * * @return {Promise} The list of commits on the branch `branch` since the last release and the updated lastRelease with the gitHead used to retrieve the commits. - * + * * @throws {SemanticReleaseError} with code `ENOTINHISTORY` if `lastRelease.gitHead` or the commit sha derived from `config.lastRelease.version` is not in the direct history of `branch`. * @throws {SemanticReleaseError} with code `ENOGITHEAD` if `lastRelease.gitHead` is undefined and no commit sha can be found for the `config.lastRelease.version`. */ @@ -68,13 +68,13 @@ module.exports = async ({version, gitHead}, branch) => { } Object.assign(gitLogParser.fields, {hash: 'H', message: 'B', gitTags: 'd', committerDate: {key: 'ci', type: Date}}); - const commits = (await getStream.array( - gitLogParser.parse({_: `${gitHead ? gitHead + '..' : ''}HEAD`}) - )).map(commit => { - commit.message = commit.message.trim(); - commit.gitTags = commit.gitTags.trim(); - return commit; - }); + const commits = (await getStream.array(gitLogParser.parse({_: `${gitHead ? gitHead + '..' : ''}HEAD`}))).map( + commit => { + commit.message = commit.message.trim(); + commit.gitTags = commit.gitTags.trim(); + return commit; + } + ); logger.log('Found %s commits since last release', commits.length); debug('Parsed commits: %o', commits); return {commits, lastRelease: {version, gitHead}}; @@ -85,18 +85,24 @@ function noGitHeadMessage(branch, version) { This means semantic-release can not extract the commits between now and then. This is usually caused by releasing from outside the repository directory or with innaccessible git metadata. -You can recover from this error by creating a tag for the version "${version}" on the commit corresponding to this release: +You can recover from this error by creating a tag for the version "${ + version + }" on the commit corresponding to this release: $ git tag -f v${version} $ git push -f --tags origin ${branch} `; } function notInHistoryMessage(gitHead, branch, version) { - return `The commit the last release of this package was derived from is not in the direct history of the "${branch}" branch. + return `The commit the last release of this package was derived from is not in the direct history of the "${ + branch + }" branch. This means semantic-release can not extract the commits between now and then. This is usually caused by force pushing, releasing from an unrelated branch, or using an already existing package name. -You can recover from this error by restoring the commit "${gitHead}" or by creating a tag for the version "${version}" on the commit corresponding to this release: +You can recover from this error by restoring the commit "${gitHead}" or by creating a tag for the version "${ + version + }" on the commit corresponding to this release: $ git tag -f v${version || ''} $ git push -f --tags origin ${branch} `; diff --git a/src/lib/get-version-head.js b/src/lib/get-version-head.js index bac56f25..99377e5f 100644 --- a/src/lib/get-version-head.js +++ b/src/lib/get-version-head.js @@ -7,7 +7,7 @@ const {debugShell} = require('./debug'); * Get the commit sha for a given tag. * * @param {string} tagName Tag name for which to retrieve the commit sha. - * + * * @return {string} The commit sha of the tag in parameter or `null`. */ async function gitTagHead(tagName) { @@ -23,9 +23,9 @@ async function gitTagHead(tagName) { /** * Verify if the commist `sha` is in the direct history of the current branch. - * + * * @param {string} sha The sha of the commit to look for. - * + * * @return {boolean} `true` if the commit `sha` is in the history of the current branch, `false` otherwise. */ async function isCommitInHistory(sha) { @@ -39,9 +39,9 @@ async function isCommitInHistory(sha) { * * @param {string} gitHead The commit sha to look for. * @param {string} version The version corresponding to the commit sha to look for. Used to search in git tags. - * + * * @return {Promise} A Promise that resolves to the commit sha of the version, either `gitHead` of the commit associated with the `version` tag. - * + * * @throws {SemanticReleaseError} with code `ENOTINHISTORY` if `gitHead` or the commit sha dereived from `version` is not in the direct history of `branch`. * @throws {SemanticReleaseError} with code `ENOGITHEAD` if `gitHead` is undefined and no commit sha can be found for the `version`. */ diff --git a/src/lib/logger.js b/src/lib/logger.js index 6990398e..1dd50298 100644 --- a/src/lib/logger.js +++ b/src/lib/logger.js @@ -7,9 +7,9 @@ module.exports = { log(...args) { const [format, ...rest] = args; console.log( - `${chalk.grey('[Semantic release]:')}${typeof format === 'string' - ? ` ${format.replace(/%[^%]/g, seq => chalk.magenta(seq))}` - : ''}`, + `${chalk.grey('[Semantic release]:')}${ + typeof format === 'string' ? ` ${format.replace(/%[^%]/g, seq => chalk.magenta(seq))}` : '' + }`, ...(typeof format === 'string' ? [] : [format]).concat(rest) ); }, diff --git a/test/helpers/git-utils.js b/test/helpers/git-utils.js index d01a0d38..b15af1d8 100644 --- a/test/helpers/git-utils.js +++ b/test/helpers/git-utils.js @@ -5,7 +5,7 @@ import pMapSeries from 'p-map-series'; /** * Commit message informations. - * + * * @typedef {Object} Commit * @property {string} branch The commit branch. * @property {string} hash The commit hash. @@ -13,13 +13,13 @@ import pMapSeries from 'p-map-series'; */ /** - * Create a temporary git repository and change the current working directory to the repository root. - * - * @method gitCommits - * @param {Array} commits the created commits. - * - * @return {string} The path of the repository. - */ + * Create a temporary git repository and change the current working directory to the repository root. + * + * @method gitCommits + * @param {Array} commits the created commits. + * + * @return {string} The path of the repository. + */ export async function gitRepo() { const dir = tempy.directory(); @@ -34,7 +34,7 @@ export async function gitRepo() { * Create commits on the current git repository. * * @param {Array} messages commit messages. - * + * * @returns {Array} The created commits, in reverse order (to match `git log` order). */ export async function gitCommits(messages) { @@ -49,7 +49,7 @@ export async function gitCommits(messages) { * Amend a commit (rewriting the sha) on the current git repository. * * @param {string} messages commit message. - * + * * @returns {Array} the created commits. */ export async function gitAmmendCommit(msg) { @@ -105,7 +105,7 @@ export async function gitLog() { /** * Create a shallow clone of a git repository and change the current working directory to the cloned repository root. * The shallow will contain a limited number of commit and no tags. - * + * * @param {string} origin The path of the repository to clone. * @param {number} [depth=1] The number of commit to clone. * @return {string} The path of the cloned repository. @@ -120,7 +120,7 @@ export async function gitShallowClone(origin, branch = 'master', depth = 1) { /** * Create a git repo with a detached head from another git repository and change the current working directory to the new repository root. - * + * * @param {string} origin The path of the repository to clone. * @param {number} head A commit sha of the origin repo that will become the detached head of the new one. * @return {string} The path of the new repository. diff --git a/test/helpers/mock-github.js b/test/helpers/mock-github.js index e3b066cb..c1d6a26b 100644 --- a/test/helpers/mock-github.js +++ b/test/helpers/mock-github.js @@ -2,7 +2,7 @@ import nock from 'nock'; /** * Retun a `nock` object setup to respond to a github authentication request. Other expectation and responses can be chained. - * + * * @param {String} [githubToken='GH_TOKEN'] The github token to return in the authentication response. * @param {String} [githubUrl='https://api.github.com'] The url on which to intercept http requests. * @return {Object} A `nock` object ready to respond to a github authentication request. diff --git a/test/helpers/mockserver.js b/test/helpers/mockserver.js index da762cb4..15b99c2b 100644 --- a/test/helpers/mockserver.js +++ b/test/helpers/mockserver.js @@ -47,7 +47,7 @@ const url = `http://${MOCK_SERVER_HOST}:${MOCK_SERVER_PORT}`; * @param {Object} request Request expectation. The http request made on `path` has to match those criteria in order to be valid. * @param {Object} request.body The JSON body the expected request must match. * @param {Object} request.headers The headers the expected request must match. - * @param {Object} response The http response to return when receiving a request on `path`. + * @param {Object} response The http response to return when receiving a request on `path`. * @param {String} [response.method='POST'] The http method for which to respond. * @param {number} [response.statusCode=200] The status code to respond. * @param {Object} response.body The JSON object to respond in the response body. diff --git a/test/integration.test.js b/test/integration.test.js index d541497c..2d42af57 100644 --- a/test/integration.test.js +++ b/test/integration.test.js @@ -408,7 +408,9 @@ test.serial('Create a tag as a recovery solution for "ENOTINHISTORY" error', asy t.regex( stderr, new RegExp( - `You can recover from this error by restoring the commit "${head}" or by creating a tag for the version "${version}" on the commit corresponding to this release` + `You can recover from this error by restoring the commit "${head}" or by creating a tag for the version "${ + version + }" on the commit corresponding to this release` ) );