fix(repositoryUrl): on beta repositoryUrl needs auth for pre-release flows (#1186)

This commit is contained in:
jmodjeski75 2019-06-05 13:33:54 -05:00 committed by Gregor Martynus
parent 37bcc9e515
commit 3610422959
8 changed files with 51 additions and 44 deletions

View File

@ -53,7 +53,8 @@ async function run(context, plugins) {
// Verify config // Verify config
await verify(context); await verify(context);
context.branches = await getBranches(context); options.repositoryUrl = await getGitAuthUrl(context);
context.branches = await getBranches(options.repositoryUrl, context);
context.branch = context.branches.find(({name}) => name === ciBranch); context.branch = context.branches.find(({name}) => name === ciBranch);
if (!context.branch) { if (!context.branch) {
@ -69,13 +70,11 @@ async function run(context, plugins) {
`Run automated release from branch ${ciBranch}${options.dryRun ? ' in dry-run mode' : ''}` `Run automated release from branch ${ciBranch}${options.dryRun ? ' in dry-run mode' : ''}`
); );
options.repositoryUrl = await getGitAuthUrl(context);
try { try {
try { try {
await verifyAuth(options.repositoryUrl, context.branch.name, {cwd, env}); await verifyAuth(options.repositoryUrl, context.branch.name, {cwd, env});
} catch (error) { } catch (error) {
if (!(await isBranchUpToDate(context.branch.name, {cwd, env}))) { if (!(await isBranchUpToDate(options.repositoryUrl, context.branch.name, {cwd, env}))) {
logger.log( logger.log(
`The local branch ${ `The local branch ${
context.branch.name context.branch.name

View File

@ -2,8 +2,8 @@ const {isString, remove, omit, mapValues, template} = require('lodash');
const micromatch = require('micromatch'); const micromatch = require('micromatch');
const {getBranches} = require('../git'); const {getBranches} = require('../git');
module.exports = async ({cwd}, branches) => { module.exports = async (repositoryUrl, {cwd}, branches) => {
const gitBranches = await getBranches({cwd}); const gitBranches = await getBranches(repositoryUrl, {cwd});
return branches.reduce( return branches.reduce(
(branches, branch) => [ (branches, branch) => [

View File

@ -8,16 +8,17 @@ const expand = require('./expand');
const getTags = require('./get-tags'); const getTags = require('./get-tags');
const normalize = require('./normalize'); const normalize = require('./normalize');
module.exports = async context => { module.exports = async (repositoryUrl, context) => {
const {cwd, env} = context; const {cwd, env} = context;
const remoteBranches = await expand( const remoteBranches = await expand(
repositoryUrl,
context, context,
context.options.branches.map(branch => (isString(branch) || isRegExp(branch) ? {name: branch} : branch)) context.options.branches.map(branch => (isString(branch) || isRegExp(branch) ? {name: branch} : branch))
); );
await pEachSeries(remoteBranches, async ({name}) => { await pEachSeries(remoteBranches, async ({name}) => {
await fetch(name, {cwd, env}); await fetch(repositoryUrl, name, {cwd, env});
}); });
const branches = await getTags(context, remoteBranches); const branches = await getTags(context, remoteBranches);

View File

@ -57,13 +57,14 @@ async function getCommits(from, to, execaOpts) {
/** /**
* Get all the repository branches. * Get all the repository branches.
* *
* @param {String} repositoryUrl The remote repository URL.
* @param {Object} [execaOpts] Options to pass to `execa`. * @param {Object} [execaOpts] Options to pass to `execa`.
* *
* @return {Array<String>} List of git branches. * @return {Array<String>} List of git branches.
* @throws {Error} If the `git` command fails. * @throws {Error} If the `git` command fails.
*/ */
async function getBranches(execaOpts) { async function getBranches(repositoryUrl, execaOpts) {
return (await execa.stdout('git', ['ls-remote', '--heads', 'origin'], execaOpts)) return (await execa.stdout('git', ['ls-remote', '--heads', repositoryUrl], execaOpts))
.split('\n') .split('\n')
.map(branch => branch.match(/^.+refs\/heads\/(.+)$/)[1]) .map(branch => branch.match(/^.+refs\/heads\/(.+)$/)[1])
.filter(Boolean); .filter(Boolean);
@ -127,10 +128,11 @@ async function isRefExists(ref, execaOpts) {
/** /**
* Unshallow the git repository if necessary and fetch all the tags. * Unshallow the git repository if necessary and fetch all the tags.
* *
* @param {String} repositoryUrl The remote repository URL.
* @param {String} branch The repository branch to fetch. * @param {String} branch The repository branch to fetch.
* @param {Object} [execaOpts] Options to pass to `execa`. * @param {Object} [execaOpts] Options to pass to `execa`.
*/ */
async function fetch(branch, execaOpts) { async function fetch(repositoryUrl, branch, execaOpts) {
const isLocalExists = const isLocalExists =
(await execa('git', ['rev-parse', '--verify', branch], {...execaOpts, reject: false})).code === 0; (await execa('git', ['rev-parse', '--verify', branch], {...execaOpts, reject: false})).code === 0;
@ -141,14 +143,18 @@ async function fetch(branch, execaOpts) {
'fetch', 'fetch',
'--unshallow', '--unshallow',
'--tags', '--tags',
...(isLocalExists ? [] : ['origin', `+refs/heads/${branch}:refs/heads/${branch}`]), ...(isLocalExists ? [repositoryUrl] : [repositoryUrl, `+refs/heads/${branch}:refs/remotes/upstream/${branch}`]),
], ],
execaOpts execaOpts
); );
} catch (error) { } catch (error) {
await execa( await execa(
'git', 'git',
['fetch', '--tags', ...(isLocalExists ? [] : ['origin', `+refs/heads/${branch}:refs/heads/${branch}`])], [
'fetch',
'--tags',
...(isLocalExists ? [repositoryUrl] : [repositoryUrl, `+refs/heads/${branch}:refs/remotes/upstream/${branch}`]),
],
execaOpts execaOpts
); );
} }
@ -273,13 +279,14 @@ async function verifyBranchName(branch, execaOpts) {
/** /**
* Verify the local branch is up to date with the remote one. * Verify the local branch is up to date with the remote one.
* *
* @param {String} repositoryUrl The remote repository URL.
* @param {String} branch The repository branch for which to verify status. * @param {String} branch The repository branch for which to verify status.
* @param {Object} [execaOpts] Options to pass to `execa`. * @param {Object} [execaOpts] Options to pass to `execa`.
* *
* @return {Boolean} `true` is the HEAD of the current local branch is the same as the HEAD of the remote branch, falsy otherwise. * @return {Boolean} `true` is the HEAD of the current local branch is the same as the HEAD of the remote branch, falsy otherwise.
*/ */
async function isBranchUpToDate(branch, execaOpts) { async function isBranchUpToDate(repositoryUrl, branch, execaOpts) {
const remoteHead = await execa.stdout('git', ['ls-remote', '--heads', 'origin', branch], execaOpts); const remoteHead = await execa.stdout('git', ['ls-remote', '--heads', repositoryUrl, branch], execaOpts);
try { try {
return await isRefInHistory(remoteHead.match(/^(\w+)?/)[1], branch, false, execaOpts); return await isRefInHistory(remoteHead.match(/^(\w+)?/)[1], branch, false, execaOpts);
} catch (error) { } catch (error) {

View File

@ -24,7 +24,7 @@ test('Enforce ranges with branching release workflow', async t => {
]; ];
const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []}); const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []});
let result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); let result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, '1.0.x').range, '>=1.0.0 <1.0.0', 'Cannot release on 1.0.x before a releasing on master'); t.is(getBranch(result, '1.0.x').range, '>=1.0.0 <1.0.0', 'Cannot release on 1.0.x before a releasing on master');
t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.0', 'Cannot release on 1.x before a releasing on master'); t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.0', 'Cannot release on 1.x before a releasing on master');
t.is(getBranch(result, 'master').range, '>=1.0.0 <1.1.0', 'Can release only patch on master'); t.is(getBranch(result, 'master').range, '>=1.0.0 <1.1.0', 'Can release only patch on master');
@ -32,43 +32,43 @@ test('Enforce ranges with branching release workflow', async t => {
t.is(getBranch(result, 'next-major').range, '>=2.0.0', 'Can release only major on next-major'); t.is(getBranch(result, 'next-major').range, '>=2.0.0', 'Can release only major on next-major');
release(branches, 'master', '1.0.0'); release(branches, 'master', '1.0.0');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, '1.0.x').range, '>=1.0.0 <1.0.0', 'Cannot release on 1.0.x before a releasing on master'); t.is(getBranch(result, '1.0.x').range, '>=1.0.0 <1.0.0', 'Cannot release on 1.0.x before a releasing on master');
t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.0', 'Cannot release on 1.x before a releasing on master'); t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.0', 'Cannot release on 1.x before a releasing on master');
t.is(getBranch(result, 'master').range, '>=1.0.0 <1.1.0', 'Can release only patch on master'); t.is(getBranch(result, 'master').range, '>=1.0.0 <1.1.0', 'Can release only patch on master');
release(branches, 'master', '1.0.1'); release(branches, 'master', '1.0.1');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master'); t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master');
merge(branches, 'master', 'next'); merge(branches, 'master', 'next');
merge(branches, 'master', 'next-major'); merge(branches, 'master', 'next-major');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master'); t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master');
t.is(getBranch(result, 'next').range, '>=1.1.0 <2.0.0', 'Can release only minor on next'); t.is(getBranch(result, 'next').range, '>=1.1.0 <2.0.0', 'Can release only minor on next');
t.is(getBranch(result, 'next-major').range, '>=2.0.0', 'Can release only major on next-major'); t.is(getBranch(result, 'next-major').range, '>=2.0.0', 'Can release only major on next-major');
release(branches, 'next', '1.1.0'); release(branches, 'next', '1.1.0');
release(branches, 'next', '1.1.1'); release(branches, 'next', '1.1.1');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'next').range, '>=1.1.1 <2.0.0', 'Can release only patch or minor, > than 1.1.0 on next'); t.is(getBranch(result, 'next').range, '>=1.1.1 <2.0.0', 'Can release only patch or minor, > than 1.1.0 on next');
release(branches, 'next-major', '2.0.0'); release(branches, 'next-major', '2.0.0');
release(branches, 'next-major', '2.0.1'); release(branches, 'next-major', '2.0.1');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major'); t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major');
merge(branches, 'next-major', 'beta'); merge(branches, 'next-major', 'beta');
release(branches, 'beta', '3.0.0-beta.1'); release(branches, 'beta', '3.0.0-beta.1');
merge(branches, 'beta', 'alpha'); merge(branches, 'beta', 'alpha');
release(branches, 'alpha', '4.0.0-alpha.1'); release(branches, 'alpha', '4.0.0-alpha.1');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major'); t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major');
merge(branches, 'master', '1.0.x'); merge(branches, 'master', '1.0.x');
merge(branches, 'master', '1.x'); merge(branches, 'master', '1.x');
release(branches, 'master', '1.0.1'); release(branches, 'master', '1.0.1');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master'); t.is(getBranch(result, 'master').range, '>=1.0.1 <1.1.0', 'Can release only patch, > than 1.0.1 on master');
t.is( t.is(
getBranch(result, '1.0.x').range, getBranch(result, '1.0.x').range,
@ -80,7 +80,7 @@ test('Enforce ranges with branching release workflow', async t => {
release(branches, 'master', '1.0.2'); release(branches, 'master', '1.0.2');
release(branches, 'master', '1.0.3'); release(branches, 'master', '1.0.3');
release(branches, 'master', '1.0.4'); release(branches, 'master', '1.0.4');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=1.0.4 <1.1.0', 'Can release only patch, > than 1.0.4 on master'); t.is(getBranch(result, 'master').range, '>=1.0.4 <1.1.0', 'Can release only patch, > than 1.0.4 on master');
t.is( t.is(
getBranch(result, '1.0.x').range, getBranch(result, '1.0.x').range,
@ -90,7 +90,7 @@ test('Enforce ranges with branching release workflow', async t => {
t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.2', 'Cannot release on 1.x before >= 1.2.0 is released on master'); t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.2', 'Cannot release on 1.x before >= 1.2.0 is released on master');
merge(branches, 'next', 'master'); merge(branches, 'next', 'master');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=1.1.1 <1.2.0', 'Can release only patch, > than 1.1.1 on master'); t.is(getBranch(result, 'master').range, '>=1.1.1 <1.2.0', 'Can release only patch, > than 1.1.1 on master');
t.is(getBranch(result, 'next').range, '>=1.2.0 <2.0.0', 'Can release only patch or minor, > than 1.2.0 on next'); t.is(getBranch(result, 'next').range, '>=1.2.0 <2.0.0', 'Can release only patch or minor, > than 1.2.0 on next');
t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major'); t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major');
@ -102,34 +102,34 @@ test('Enforce ranges with branching release workflow', async t => {
t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.2', 'Cannot release on 1.x before >= 2.0.0 is released on master'); t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.2', 'Cannot release on 1.x before >= 2.0.0 is released on master');
merge(branches, 'master', '1.0.x', '1.0.4'); merge(branches, 'master', '1.0.x', '1.0.4');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=1.1.1 <1.2.0', 'Can release only patch, > than 1.1.1 on master'); t.is(getBranch(result, 'master').range, '>=1.1.1 <1.2.0', 'Can release only patch, > than 1.1.1 on master');
t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range'); t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range');
t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.1.0', 'Cannot release on 1.x before >= 2.0.0 is released on master'); t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.1.0', 'Cannot release on 1.x before >= 2.0.0 is released on master');
merge(branches, 'master', '1.x'); merge(branches, 'master', '1.x');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=1.1.1 <1.2.0', 'Can release only patch, > than 1.1.1 on master'); t.is(getBranch(result, 'master').range, '>=1.1.1 <1.2.0', 'Can release only patch, > than 1.1.1 on master');
t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range'); t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range');
t.is(getBranch(result, '1.x').range, '>=1.1.1 <1.1.1', 'Cannot release on 1.x before >= 2.0.0 is released on master'); t.is(getBranch(result, '1.x').range, '>=1.1.1 <1.1.1', 'Cannot release on 1.x before >= 2.0.0 is released on master');
merge(branches, 'next-major', 'next'); merge(branches, 'next-major', 'next');
merge(branches, 'next', 'master'); merge(branches, 'next', 'master');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=2.0.1 <2.1.0', 'Can release only patch, > than 2.0.1 on master'); t.is(getBranch(result, 'master').range, '>=2.0.1 <2.1.0', 'Can release only patch, > than 2.0.1 on master');
t.is(getBranch(result, 'next').range, '>=2.1.0 <3.0.0', 'Can release only minor on next'); t.is(getBranch(result, 'next').range, '>=2.1.0 <3.0.0', 'Can release only minor on next');
t.is(getBranch(result, 'next-major').range, '>=3.0.0', 'Can release only major on next-major'); t.is(getBranch(result, 'next-major').range, '>=3.0.0', 'Can release only major on next-major');
t.is(getBranch(result, '1.x').range, '>=1.1.1 <2.0.0', 'Can release on 1.x only within range'); t.is(getBranch(result, '1.x').range, '>=1.1.1 <2.0.0', 'Can release on 1.x only within range');
merge(branches, 'beta', 'master'); merge(branches, 'beta', 'master');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, 'master').range, '>=2.0.1 <2.1.0', 'Can release only patch, > than 2.0.1 on master'); t.is(getBranch(result, 'master').range, '>=2.0.1 <2.1.0', 'Can release only patch, > than 2.0.1 on master');
t.is(getBranch(result, 'next').range, '>=2.1.0 <3.0.0', 'Can release only minor on next'); t.is(getBranch(result, 'next').range, '>=2.1.0 <3.0.0', 'Can release only minor on next');
t.is(getBranch(result, 'next-major').range, '>=3.0.0', 'Can release only major on next-major'); t.is(getBranch(result, 'next-major').range, '>=3.0.0', 'Can release only major on next-major');
branches.push({name: '1.1.x', tags: []}); branches.push({name: '1.1.x', tags: []});
merge(branches, '1.x', '1.1.x'); merge(branches, '1.x', '1.1.x');
result = (await getBranches({options: {branches}})).map(({name, range}) => ({name, range})); result = (await getBranches('repositoryUrl', {options: {branches}})).map(({name, range}) => ({name, range}));
t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range'); t.is(getBranch(result, '1.0.x').range, '>=1.0.4 <1.1.0', 'Can release on 1.0.x only within range');
t.is(getBranch(result, '1.1.x').range, '>=1.1.1 <1.2.0', 'Can release on 1.1.x only within range'); t.is(getBranch(result, '1.1.x').range, '>=1.1.1 <1.2.0', 'Can release on 1.1.x only within range');
t.is(getBranch(result, '1.x').range, '>=1.2.0 <2.0.0', 'Can release on 1.x only within range'); t.is(getBranch(result, '1.x').range, '>=1.2.0 <2.0.0', 'Can release on 1.x only within range');
@ -146,7 +146,7 @@ test('Throw SemanticReleaseError for invalid configurations', async t => {
{name: 'preview', prerelease: 'alpha', tags: []}, {name: 'preview', prerelease: 'alpha', tags: []},
]; ];
const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []}); const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []});
const errors = [...(await t.throwsAsync(getBranches({options: {branches}})))]; const errors = [...(await t.throwsAsync(getBranches('repositoryUrl', {options: {branches}})))];
t.is(errors[0].name, 'SemanticReleaseError'); t.is(errors[0].name, 'SemanticReleaseError');
t.is(errors[0].code, 'EMAINTENANCEBRANCH'); t.is(errors[0].code, 'EMAINTENANCEBRANCH');
@ -174,7 +174,7 @@ test('Throw a SemanticReleaseError if there is duplicate branches', async t => {
const branches = [{name: 'master', tags: []}, {name: 'master', tags: []}]; const branches = [{name: 'master', tags: []}, {name: 'master', tags: []}];
const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []}); const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []});
const errors = [...(await t.throwsAsync(getBranches({options: {branches}})))]; const errors = [...(await t.throwsAsync(getBranches('repositoryUrl', {options: {branches}})))];
t.is(errors[0].name, 'SemanticReleaseError'); t.is(errors[0].name, 'SemanticReleaseError');
t.is(errors[0].code, 'EDUPLICATEBRANCHES'); t.is(errors[0].code, 'EDUPLICATEBRANCHES');
@ -186,7 +186,7 @@ test('Throw a SemanticReleaseError for each invalid branch name', async t => {
const branches = [{name: '~master', tags: []}, {name: '^master', tags: []}]; const branches = [{name: '~master', tags: []}, {name: '^master', tags: []}];
const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []}); const getBranches = proxyquire('../../lib/branches', {'./get-tags': () => branches, './expand': () => []});
const errors = [...(await t.throwsAsync(getBranches({options: {branches}})))]; const errors = [...(await t.throwsAsync(getBranches('repositoryUrl', {options: {branches}})))];
t.is(errors[0].name, 'SemanticReleaseError'); t.is(errors[0].name, 'SemanticReleaseError');
t.is(errors[0].code, 'EINVALIDBRANCHNAME'); t.is(errors[0].code, 'EINVALIDBRANCHNAME');

View File

@ -41,7 +41,7 @@ test('Expand branches defined with globs', async t => {
{name: 'beta', channel: `channel-\${name}`, prerelease: true}, {name: 'beta', channel: `channel-\${name}`, prerelease: true},
]; ];
t.deepEqual(await expand({cwd}, branches), [ t.deepEqual(await expand(repositoryUrl, {cwd}, branches), [
{name: '1.0.x'}, {name: '1.0.x'},
{name: '1.x.x'}, {name: '1.x.x'},
{name: '2.x'}, {name: '2.x'},

View File

@ -58,7 +58,7 @@ test('Unshallow and fetch repository', async t => {
// Verify the shallow clone contains only one commit // Verify the shallow clone contains only one commit
t.is((await gitGetCommits(undefined, {cwd})).length, 1); t.is((await gitGetCommits(undefined, {cwd})).length, 1);
await fetch('master', {cwd}); await fetch(repositoryUrl, 'master', {cwd});
// Verify the shallow clone contains all the commits // Verify the shallow clone contains all the commits
t.is((await gitGetCommits(undefined, {cwd})).length, 2); t.is((await gitGetCommits(undefined, {cwd})).length, 2);
@ -73,8 +73,8 @@ test('Do not throw error when unshallow a complete repository', async t => {
await gitCommits(['Second'], {cwd}); await gitCommits(['Second'], {cwd});
await gitPush(repositoryUrl, 'second-branch', {cwd}); await gitPush(repositoryUrl, 'second-branch', {cwd});
await t.notThrowsAsync(fetch('master', {cwd})); await t.notThrowsAsync(fetch(repositoryUrl, 'master', {cwd}));
await t.notThrowsAsync(fetch('second-branch', {cwd})); await t.notThrowsAsync(fetch(repositoryUrl, 'second-branch', {cwd}));
}); });
test('Fetch all tags on a detached head repository', async t => { test('Fetch all tags on a detached head repository', async t => {
@ -89,7 +89,7 @@ test('Fetch all tags on a detached head repository', async t => {
await gitPush(repositoryUrl, 'master', {cwd}); await gitPush(repositoryUrl, 'master', {cwd});
cwd = await gitDetachedHead(repositoryUrl, commit.hash); cwd = await gitDetachedHead(repositoryUrl, commit.hash);
await fetch('master', {cwd}); await fetch(repositoryUrl, 'master', {cwd});
t.deepEqual((await getTags({cwd})).sort(), ['v1.0.0', 'v1.0.1', 'v1.1.0'].sort()); t.deepEqual((await getTags({cwd})).sort(), ['v1.0.0', 'v1.0.1', 'v1.1.0'].sort());
}); });
@ -137,7 +137,7 @@ test('Get all branches', async t => {
await gitCommits(['Third'], {cwd}); await gitCommits(['Third'], {cwd});
await gitPush(repositoryUrl, 'third-branch', {cwd}); await gitPush(repositoryUrl, 'third-branch', {cwd});
t.deepEqual((await getBranches({cwd})).sort(), ['master', 'second-branch', 'third-branch'].sort()); t.deepEqual((await getBranches(repositoryUrl, {cwd})).sort(), ['master', 'second-branch', 'third-branch'].sort());
}); });
test('Get the commit sha for a given tag or falsy if the tag does not exists', async t => { test('Get the commit sha for a given tag or falsy if the tag does not exists', async t => {
@ -251,7 +251,7 @@ test('Return "true" if repository is up to date', async t => {
await gitCommits(['First'], {cwd}); await gitCommits(['First'], {cwd});
await gitPush(repositoryUrl, 'master', {cwd}); await gitPush(repositoryUrl, 'master', {cwd});
t.true(await isBranchUpToDate('master', {cwd})); t.true(await isBranchUpToDate(repositoryUrl, 'master', {cwd}));
}); });
test('Return falsy if repository is not up to date', async t => { test('Return falsy if repository is not up to date', async t => {
@ -260,13 +260,13 @@ test('Return falsy if repository is not up to date', async t => {
await gitCommits(['Second'], {cwd}); await gitCommits(['Second'], {cwd});
await gitPush(repositoryUrl, 'master', {cwd}); await gitPush(repositoryUrl, 'master', {cwd});
t.true(await isBranchUpToDate('master', {cwd})); t.true(await isBranchUpToDate(repositoryUrl, 'master', {cwd}));
const tmpRepo = await gitShallowClone(repositoryUrl); const tmpRepo = await gitShallowClone(repositoryUrl);
await gitCommits(['Third'], {cwd: tmpRepo}); await gitCommits(['Third'], {cwd: tmpRepo});
await gitPush('origin', 'master', {cwd: tmpRepo}); await gitPush('origin', 'master', {cwd: tmpRepo});
t.falsy(await isBranchUpToDate('master', {cwd})); t.falsy(await isBranchUpToDate(repositoryUrl, 'master', {cwd}));
}); });
test('Return "true" if local repository is ahead', async t => { test('Return "true" if local repository is ahead', async t => {
@ -275,5 +275,5 @@ test('Return "true" if local repository is ahead', async t => {
await gitPush(repositoryUrl, 'master', {cwd}); await gitPush(repositoryUrl, 'master', {cwd});
await gitCommits(['Second'], {cwd}); await gitCommits(['Second'], {cwd});
t.true(await isBranchUpToDate('master', {cwd})); t.true(await isBranchUpToDate(repositoryUrl, 'master', {cwd}));
}); });

View File

@ -353,7 +353,7 @@ test('Plugins are called with expected values', async t => {
t.deepEqual(result, { t.deepEqual(result, {
lastRelease, lastRelease,
commits: [{...commits[0], gitTags: '(HEAD -> master, origin/master, origin/HEAD, next)'}], commits: [{...commits[0], gitTags: '(HEAD -> master, next)'}],
nextRelease: {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`}, nextRelease: {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`},
releases, releases,
}); });