feat: add debug logs for git commands
This commit is contained in:
parent
7e785fa757
commit
687435b9a2
@ -42,10 +42,12 @@ module.exports = async (opts, logger) => {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const repositoryUrl = (await pkgRepoUrl()) || (await repoUrl());
|
||||||
|
|
||||||
// Set default options values if not defined yet
|
// Set default options values if not defined yet
|
||||||
options = {
|
options = {
|
||||||
branch: 'master',
|
branch: 'master',
|
||||||
repositoryUrl: getGitAuthUrl((await pkgRepoUrl()) || (await repoUrl())),
|
repositoryUrl: repositoryUrl ? getGitAuthUrl(repositoryUrl) : repositoryUrl,
|
||||||
tagFormat: `v\${version}`,
|
tagFormat: `v\${version}`,
|
||||||
// Remove `null` and `undefined` options so they can be replaced with default ones
|
// Remove `null` and `undefined` options so they can be replaced with default ones
|
||||||
...pickBy(options, option => !isUndefined(option) && !isNull(option)),
|
...pickBy(options, option => !isUndefined(option) && !isNull(option)),
|
||||||
|
44
lib/git.js
44
lib/git.js
@ -9,7 +9,11 @@ const debug = require('debug')('semantic-release:get-version-head');
|
|||||||
* @return {string} The commit sha of the tag in parameter or `null`.
|
* @return {string} The commit sha of the tag in parameter or `null`.
|
||||||
*/
|
*/
|
||||||
async function gitTagHead(tagName) {
|
async function gitTagHead(tagName) {
|
||||||
return execa.stdout('git', ['rev-list', '-1', tagName], {reject: false});
|
try {
|
||||||
|
return await execa.stdout('git', ['rev-list', '-1', tagName]);
|
||||||
|
} catch (err) {
|
||||||
|
debug(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,10 +32,14 @@ async function gitTags() {
|
|||||||
*
|
*
|
||||||
* @param {string} ref The reference to look for.
|
* @param {string} ref The reference to look for.
|
||||||
*
|
*
|
||||||
* @return {boolean} `true` if the reference is in the history of the current branch, `false` otherwise.
|
* @return {boolean} `true` if the reference is in the history of the current branch, falsy otherwise.
|
||||||
*/
|
*/
|
||||||
async function isRefInHistory(ref) {
|
async function isRefInHistory(ref) {
|
||||||
return (await execa('git', ['merge-base', '--is-ancestor', ref, 'HEAD'], {reject: false})).code === 0;
|
try {
|
||||||
|
return (await execa('git', ['merge-base', '--is-ancestor', ref, 'HEAD'])).code === 0;
|
||||||
|
} catch (err) {
|
||||||
|
debug(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,14 +60,22 @@ async function gitHead() {
|
|||||||
* @return {string} The value of the remote git URL.
|
* @return {string} The value of the remote git URL.
|
||||||
*/
|
*/
|
||||||
async function repoUrl() {
|
async function repoUrl() {
|
||||||
return execa.stdout('git', ['remote', 'get-url', 'origin'], {reject: false});
|
try {
|
||||||
|
return await execa.stdout('git', ['remote', 'get-url', 'origin']);
|
||||||
|
} catch (err) {
|
||||||
|
debug(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {Boolean} `true` if the current working directory is in a git repository, `false` otherwise.
|
* @return {Boolean} `true` if the current working directory is in a git repository, falsy otherwise.
|
||||||
*/
|
*/
|
||||||
async function isGitRepo() {
|
async function isGitRepo() {
|
||||||
return (await execa('git', ['rev-parse', '--git-dir'], {reject: false})).code === 0;
|
try {
|
||||||
|
return (await execa('git', ['rev-parse', '--git-dir'])).code === 0;
|
||||||
|
} catch (err) {
|
||||||
|
debug(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,10 +84,14 @@ async function isGitRepo() {
|
|||||||
* @param {String} origin The remote repository URL.
|
* @param {String} origin The remote repository URL.
|
||||||
* @param {String} branch The repositoru branch for which to verify write access.
|
* @param {String} branch The repositoru branch for which to verify write access.
|
||||||
*
|
*
|
||||||
* @return {Boolean} `true` is authorized to push, `false` otherwise.
|
* @return {Boolean} `true` is authorized to push, falsy otherwise.
|
||||||
*/
|
*/
|
||||||
async function verifyAuth(origin, branch) {
|
async function verifyAuth(origin, branch) {
|
||||||
return (await execa('git', ['push', '--dry-run', origin, `HEAD:${branch}`], {reject: false})).code === 0;
|
try {
|
||||||
|
return (await execa('git', ['push', '--dry-run', origin, `HEAD:${branch}`])).code === 0;
|
||||||
|
} catch (err) {
|
||||||
|
debug(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -117,10 +137,14 @@ async function deleteTag(origin, tagName) {
|
|||||||
*
|
*
|
||||||
* @method verifyTagName
|
* @method verifyTagName
|
||||||
* @param {string} tagName the tag name to verify.
|
* @param {string} tagName the tag name to verify.
|
||||||
* @return {boolean} `true` if valid, `false` otherwise.
|
* @return {boolean} `true` if valid, falsy otherwise.
|
||||||
*/
|
*/
|
||||||
async function verifyTagName(tagName) {
|
async function verifyTagName(tagName) {
|
||||||
return (await execa('git', ['check-ref-format', `refs/tags/${tagName}`], {reject: false})).code === 0;
|
try {
|
||||||
|
return (await execa('git', ['check-ref-format', `refs/tags/${tagName}`])).code === 0;
|
||||||
|
} catch (err) {
|
||||||
|
debug(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
@ -88,7 +88,7 @@ test.serial('Verify if the commit `sha` is in the direct history of the current
|
|||||||
await gitCheckout('master', false);
|
await gitCheckout('master', false);
|
||||||
|
|
||||||
t.true(await isRefInHistory(commits[0].hash));
|
t.true(await isRefInHistory(commits[0].hash));
|
||||||
t.false(await isRefInHistory(otherCommits[0].hash));
|
t.falsy(await isRefInHistory(otherCommits[0].hash));
|
||||||
});
|
});
|
||||||
|
|
||||||
test.serial('Get the commit sha for a given tag or falsy if the tag does not exists', async t => {
|
test.serial('Get the commit sha for a given tag or falsy if the tag does not exists', async t => {
|
||||||
@ -169,11 +169,11 @@ test.serial('Return "true" if in a Git repository', async t => {
|
|||||||
t.true(await isGitRepo());
|
t.true(await isGitRepo());
|
||||||
});
|
});
|
||||||
|
|
||||||
test.serial('Return "false" if not in a Git repository', async t => {
|
test.serial('Return falsy if not in a Git repository', async t => {
|
||||||
const dir = tempy.directory();
|
const dir = tempy.directory();
|
||||||
process.chdir(dir);
|
process.chdir(dir);
|
||||||
|
|
||||||
t.false(await isGitRepo());
|
t.falsy(await isGitRepo());
|
||||||
});
|
});
|
||||||
|
|
||||||
test.serial('Return "true" for valid tag names', async t => {
|
test.serial('Return "true" for valid tag names', async t => {
|
||||||
@ -183,11 +183,11 @@ test.serial('Return "true" for valid tag names', async t => {
|
|||||||
t.true(await verifyTagName('tag/name'));
|
t.true(await verifyTagName('tag/name'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test.serial('Return "false" for invalid tag names', async t => {
|
test.serial('Return falsy for invalid tag names', async t => {
|
||||||
t.false(await verifyTagName('?1.0.0'));
|
t.falsy(await verifyTagName('?1.0.0'));
|
||||||
t.false(await verifyTagName('*1.0.0'));
|
t.falsy(await verifyTagName('*1.0.0'));
|
||||||
t.false(await verifyTagName('[1.0.0]'));
|
t.falsy(await verifyTagName('[1.0.0]'));
|
||||||
t.false(await verifyTagName('1.0.0..'));
|
t.falsy(await verifyTagName('1.0.0..'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test.serial('Throws error if obtaining the tags fails', async t => {
|
test.serial('Throws error if obtaining the tags fails', async t => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user