style: prettier
This commit is contained in:
+154
-154
@@ -1,277 +1,277 @@
|
||||
import test from 'ava';
|
||||
import {union} from 'lodash-es';
|
||||
import semver from 'semver';
|
||||
import * as td from 'testdouble';
|
||||
import test from "ava";
|
||||
import { union } from "lodash-es";
|
||||
import semver from "semver";
|
||||
import * as td from "testdouble";
|
||||
|
||||
const getBranch = (branches, branch) => branches.find(({name}) => name === branch);
|
||||
const release = (branches, name, version) => getBranch(branches, name).tags.push({version});
|
||||
const getBranch = (branches, branch) => branches.find(({ name }) => name === branch);
|
||||
const release = (branches, name, version) => getBranch(branches, name).tags.push({ version });
|
||||
const merge = (branches, source, target, tag) => {
|
||||
getBranch(branches, target).tags = union(
|
||||
getBranch(branches, source).tags.filter(({version}) => !tag || semver.cmp(version, '<=', tag)),
|
||||
getBranch(branches, source).tags.filter(({ version }) => !tag || semver.cmp(version, "<=", tag)),
|
||||
getBranch(branches, target).tags
|
||||
);
|
||||
};
|
||||
const remoteBranches = [];
|
||||
const repositoryUrl = 'repositoryUrl';
|
||||
const repositoryUrl = "repositoryUrl";
|
||||
let expand, getTags, getBranches;
|
||||
|
||||
test.beforeEach(async (t) => {
|
||||
getTags = (await td.replaceEsm('../../lib/branches/get-tags.js')).default;
|
||||
expand = (await td.replaceEsm('../../lib/branches/expand.js')).default;
|
||||
getBranches = (await import('../../lib/branches/index.js')).default;
|
||||
})
|
||||
getTags = (await td.replaceEsm("../../lib/branches/get-tags.js")).default;
|
||||
expand = (await td.replaceEsm("../../lib/branches/expand.js")).default;
|
||||
getBranches = (await import("../../lib/branches/index.js")).default;
|
||||
});
|
||||
|
||||
test.afterEach.always((t) => {
|
||||
td.reset();
|
||||
});
|
||||
|
||||
test.serial('Enforce ranges with branching release workflow', async (t) => {
|
||||
test.serial("Enforce ranges with branching release workflow", async (t) => {
|
||||
const branches = [
|
||||
{name: '1.x', tags: []},
|
||||
{name: '1.0.x', tags: []},
|
||||
{name: 'master', tags: []},
|
||||
{name: 'next', tags: []},
|
||||
{name: 'next-major', tags: []},
|
||||
{name: 'beta', prerelease: true, tags: []},
|
||||
{name: 'alpha', prerelease: true, tags: []},
|
||||
{ name: "1.x", tags: [] },
|
||||
{ name: "1.0.x", tags: [] },
|
||||
{ name: "master", tags: [] },
|
||||
{ name: "next", tags: [] },
|
||||
{ name: "next-major", tags: [] },
|
||||
{ name: "beta", prerelease: true, tags: [] },
|
||||
{ name: "alpha", prerelease: true, tags: [] },
|
||||
];
|
||||
const context = {options: {branches}};
|
||||
const context = { options: { branches } };
|
||||
td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches);
|
||||
td.when(getTags(context, remoteBranches)).thenResolve(branches);
|
||||
|
||||
let result = (await getBranches(repositoryUrl, 'master', context)).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.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');
|
||||
t.is(getBranch(result, 'next').range, '>=1.0.0');
|
||||
t.is(getBranch(result, 'next-major').range, '>=1.0.0');
|
||||
let result = (await getBranches(repositoryUrl, "master", context)).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.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");
|
||||
t.is(getBranch(result, "next").range, ">=1.0.0");
|
||||
t.is(getBranch(result, "next-major").range, ">=1.0.0");
|
||||
|
||||
release(branches, 'master', '1.0.0');
|
||||
result = (await getBranches('repositoryUrl', 'master', context)).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.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');
|
||||
t.is(getBranch(result, 'next').range, '>=1.0.0');
|
||||
t.is(getBranch(result, 'next-major').range, '>=1.0.0');
|
||||
release(branches, "master", "1.0.0");
|
||||
result = (await getBranches("repositoryUrl", "master", context)).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.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");
|
||||
t.is(getBranch(result, "next").range, ">=1.0.0");
|
||||
t.is(getBranch(result, "next-major").range, ">=1.0.0");
|
||||
|
||||
release(branches, 'master', '1.0.1');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
release(branches, "master", "1.0.1");
|
||||
result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({
|
||||
name,
|
||||
range,
|
||||
}));
|
||||
t.is(getBranch(result, 'master').range, '>=1.0.1', 'Can release only > than 1.0.1 on master');
|
||||
t.is(getBranch(result, 'next').range, '>=1.0.1', 'Can release only > than 1.0.1 on next');
|
||||
t.is(getBranch(result, 'next-major').range, '>=1.0.1', 'Can release only > than 1.0.1 on next-major');
|
||||
t.is(getBranch(result, "master").range, ">=1.0.1", "Can release only > than 1.0.1 on master");
|
||||
t.is(getBranch(result, "next").range, ">=1.0.1", "Can release only > than 1.0.1 on next");
|
||||
t.is(getBranch(result, "next-major").range, ">=1.0.1", "Can release only > than 1.0.1 on next-major");
|
||||
|
||||
merge(branches, 'master', 'next');
|
||||
merge(branches, 'master', 'next-major');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "master", "next");
|
||||
merge(branches, "master", "next-major");
|
||||
result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({
|
||||
name,
|
||||
range,
|
||||
}));
|
||||
t.is(getBranch(result, 'master').range, '>=1.0.1', 'Can release only > than 1.0.1 on master');
|
||||
t.is(getBranch(result, 'next').range, '>=1.0.1', 'Can release only > than 1.0.1 on next');
|
||||
t.is(getBranch(result, 'next-major').range, '>=1.0.1', 'Can release only > than 1.0.1 on next-major');
|
||||
t.is(getBranch(result, "master").range, ">=1.0.1", "Can release only > than 1.0.1 on master");
|
||||
t.is(getBranch(result, "next").range, ">=1.0.1", "Can release only > than 1.0.1 on next");
|
||||
t.is(getBranch(result, "next-major").range, ">=1.0.1", "Can release only > than 1.0.1 on next-major");
|
||||
|
||||
release(branches, 'next', '1.1.0');
|
||||
release(branches, 'next', '1.1.1');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
release(branches, "next", "1.1.0");
|
||||
release(branches, "next", "1.1.1");
|
||||
result = (await getBranches("repositoryUrl", "master", { 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, 'next').range, '>=1.1.1', 'Can release only > than 1.1.1 on next');
|
||||
t.is(getBranch(result, 'next-major').range, '>=1.1.1', 'Can release > than 1.1.1 on next-major');
|
||||
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.1", "Can release only > than 1.1.1 on next");
|
||||
t.is(getBranch(result, "next-major").range, ">=1.1.1", "Can release > than 1.1.1 on next-major");
|
||||
|
||||
release(branches, 'next-major', '2.0.0');
|
||||
release(branches, 'next-major', '2.0.1');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
release(branches, "next-major", "2.0.0");
|
||||
release(branches, "next-major", "2.0.1");
|
||||
result = (await getBranches("repositoryUrl", "master", { 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, '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-major').range, '>=2.0.1', 'Can release any version, > than 2.0.1 on next-major');
|
||||
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.1 <2.0.0", "Can release only patch or minor, > than 1.1.0 on next");
|
||||
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');
|
||||
release(branches, 'beta', '3.0.0-beta.1');
|
||||
merge(branches, 'beta', 'alpha');
|
||||
release(branches, 'alpha', '4.0.0-alpha.1');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "next-major", "beta");
|
||||
release(branches, "beta", "3.0.0-beta.1");
|
||||
merge(branches, "beta", "alpha");
|
||||
release(branches, "alpha", "4.0.0-alpha.1");
|
||||
result = (await getBranches("repositoryUrl", "master", { 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.x');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "master", "1.0.x");
|
||||
merge(branches, "master", "1.x");
|
||||
result = (await getBranches("repositoryUrl", "master", { 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, '1.0.x').range,
|
||||
'>=1.0.1 <1.0.1',
|
||||
'Cannot release on 1.0.x before >= 1.1.0 is released on master'
|
||||
getBranch(result, "1.0.x").range,
|
||||
">=1.0.1 <1.0.1",
|
||||
"Cannot release on 1.0.x before >= 1.1.0 is released on master"
|
||||
);
|
||||
t.is(getBranch(result, '1.x').range, '>=1.1.0 <1.0.1', '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.1", "Cannot release on 1.x before >= 1.2.0 is released on master");
|
||||
|
||||
release(branches, 'master', '1.0.2');
|
||||
release(branches, 'master', '1.0.3');
|
||||
release(branches, 'master', '1.0.4');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
release(branches, "master", "1.0.2");
|
||||
release(branches, "master", "1.0.3");
|
||||
release(branches, "master", "1.0.4");
|
||||
result = (await getBranches("repositoryUrl", "master", { 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(
|
||||
getBranch(result, '1.0.x').range,
|
||||
'>=1.0.1 <1.0.2',
|
||||
'Cannot release on 1.0.x before >= 1.1.0 is released on master'
|
||||
getBranch(result, "1.0.x").range,
|
||||
">=1.0.1 <1.0.2",
|
||||
"Cannot release on 1.0.x before >= 1.1.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');
|
||||
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');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "next", "master");
|
||||
result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({
|
||||
name,
|
||||
range,
|
||||
}));
|
||||
|
||||
t.is(getBranch(result, 'master').range, '>=1.1.1', 'Can release only > than 1.1.1 on master');
|
||||
t.is(getBranch(result, 'next').range, '>=1.1.1 <2.0.0', 'Can release only patch or minor, > than 1.1.1 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, "master").range, ">=1.1.1", "Can release only > than 1.1.1 on master");
|
||||
t.is(getBranch(result, "next").range, ">=1.1.1 <2.0.0", "Can release only patch or minor, > than 1.1.1 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, '1.0.x').range,
|
||||
'>=1.0.1 <1.0.2',
|
||||
'Cannot release on 1.0.x before 1.0.x version from master are merged'
|
||||
getBranch(result, "1.0.x").range,
|
||||
">=1.0.1 <1.0.2",
|
||||
"Cannot release on 1.0.x before 1.0.x version from master are merged"
|
||||
);
|
||||
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');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "master", "1.0.x", "1.0.4");
|
||||
result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({
|
||||
name,
|
||||
range,
|
||||
}));
|
||||
t.is(getBranch(result, 'master').range, '>=1.1.1', 'Can release only > 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.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, "master").range, ">=1.1.1", "Can release only > 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.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');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "master", "1.x");
|
||||
result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({
|
||||
name,
|
||||
range,
|
||||
}));
|
||||
t.is(getBranch(result, 'master').range, '>=1.1.1', 'Can release only > 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.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, "master").range, ">=1.1.1", "Can release only > 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.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', 'master');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "next-major", "next");
|
||||
merge(branches, "next", "master");
|
||||
result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({
|
||||
name,
|
||||
range,
|
||||
}));
|
||||
t.is(getBranch(result, 'master').range, '>=2.0.1', 'Can release only > than 2.0.1 on master');
|
||||
t.is(getBranch(result, 'next').range, '>=2.0.1', 'Can release only > than 2.0.1 on next');
|
||||
t.is(getBranch(result, 'next-major').range, '>=2.0.1', 'Can release only > than 2.0.1 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, "master").range, ">=2.0.1", "Can release only > than 2.0.1 on master");
|
||||
t.is(getBranch(result, "next").range, ">=2.0.1", "Can release only > than 2.0.1 on next");
|
||||
t.is(getBranch(result, "next-major").range, ">=2.0.1", "Can release only > than 2.0.1 on next-major");
|
||||
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');
|
||||
release(branches, 'master', '3.0.0');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
merge(branches, "beta", "master");
|
||||
release(branches, "master", "3.0.0");
|
||||
result = (await getBranches("repositoryUrl", "master", { options: { branches } })).map(({ name, range }) => ({
|
||||
name,
|
||||
range,
|
||||
}));
|
||||
t.is(getBranch(result, 'master').range, '>=3.0.0', 'Can release only > than 3.0.0 on master');
|
||||
t.is(getBranch(result, 'next').range, '>=3.0.0', 'Can release only > than 3.0.0 on next');
|
||||
t.is(getBranch(result, 'next-major').range, '>=3.0.0', 'Can release only > than 3.0.0 on next-major');
|
||||
t.is(getBranch(result, "master").range, ">=3.0.0", "Can release only > than 3.0.0 on master");
|
||||
t.is(getBranch(result, "next").range, ">=3.0.0", "Can release only > than 3.0.0 on next");
|
||||
t.is(getBranch(result, "next-major").range, ">=3.0.0", "Can release only > than 3.0.0 on next-major");
|
||||
|
||||
branches.push({name: '1.1.x', tags: []});
|
||||
merge(branches, '1.x', '1.1.x');
|
||||
result = (await getBranches('repositoryUrl', 'master', {options: {branches}})).map(({name, range}) => ({
|
||||
branches.push({ name: "1.1.x", tags: [] });
|
||||
merge(branches, "1.x", "1.1.x");
|
||||
result = (await getBranches("repositoryUrl", "master", { 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.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.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.x").range, ">=1.2.0 <2.0.0", "Can release on 1.x only within range");
|
||||
});
|
||||
|
||||
test.serial('Throw SemanticReleaseError for invalid configurations', async (t) => {
|
||||
test.serial("Throw SemanticReleaseError for invalid configurations", async (t) => {
|
||||
const branches = [
|
||||
{name: '123', range: '123', tags: []},
|
||||
{name: '1.x', tags: []},
|
||||
{name: 'maintenance-1', range: '1.x', tags: []},
|
||||
{name: '1.x.x', tags: []},
|
||||
{name: 'beta', prerelease: '', tags: []},
|
||||
{name: 'alpha', prerelease: 'alpha', tags: []},
|
||||
{name: 'preview', prerelease: 'alpha', tags: []},
|
||||
{ name: "123", range: "123", tags: [] },
|
||||
{ name: "1.x", tags: [] },
|
||||
{ name: "maintenance-1", range: "1.x", tags: [] },
|
||||
{ name: "1.x.x", tags: [] },
|
||||
{ name: "beta", prerelease: "", tags: [] },
|
||||
{ name: "alpha", prerelease: "alpha", tags: [] },
|
||||
{ name: "preview", prerelease: "alpha", tags: [] },
|
||||
];
|
||||
const context = {options: {branches}};
|
||||
const context = { options: { branches } };
|
||||
td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches);
|
||||
td.when(getTags(context, remoteBranches)).thenResolve(branches);
|
||||
|
||||
const error = await t.throwsAsync(getBranches(repositoryUrl, 'master', context));
|
||||
const error = await t.throwsAsync(getBranches(repositoryUrl, "master", context));
|
||||
const errors = [...error.errors];
|
||||
|
||||
t.is(errors[0].name, 'SemanticReleaseError');
|
||||
t.is(errors[0].code, 'EMAINTENANCEBRANCH');
|
||||
t.is(errors[0].name, "SemanticReleaseError");
|
||||
t.is(errors[0].code, "EMAINTENANCEBRANCH");
|
||||
t.truthy(errors[0].message);
|
||||
t.truthy(errors[0].details);
|
||||
t.is(errors[1].name, 'SemanticReleaseError');
|
||||
t.is(errors[1].code, 'EMAINTENANCEBRANCHES');
|
||||
t.is(errors[1].name, "SemanticReleaseError");
|
||||
t.is(errors[1].code, "EMAINTENANCEBRANCHES");
|
||||
t.truthy(errors[1].message);
|
||||
t.truthy(errors[1].details);
|
||||
t.is(errors[2].name, 'SemanticReleaseError');
|
||||
t.is(errors[2].code, 'EPRERELEASEBRANCH');
|
||||
t.is(errors[2].name, "SemanticReleaseError");
|
||||
t.is(errors[2].code, "EPRERELEASEBRANCH");
|
||||
t.truthy(errors[2].message);
|
||||
t.truthy(errors[2].details);
|
||||
t.is(errors[3].name, 'SemanticReleaseError');
|
||||
t.is(errors[3].code, 'EPRERELEASEBRANCHES');
|
||||
t.is(errors[3].name, "SemanticReleaseError");
|
||||
t.is(errors[3].code, "EPRERELEASEBRANCHES");
|
||||
t.truthy(errors[3].message);
|
||||
t.truthy(errors[3].details);
|
||||
t.is(errors[4].name, 'SemanticReleaseError');
|
||||
t.is(errors[4].code, 'ERELEASEBRANCHES');
|
||||
t.is(errors[4].name, "SemanticReleaseError");
|
||||
t.is(errors[4].code, "ERELEASEBRANCHES");
|
||||
t.truthy(errors[4].message);
|
||||
t.truthy(errors[4].details);
|
||||
});
|
||||
|
||||
test.serial('Throw a SemanticReleaseError if there is duplicate branches', async (t) => {
|
||||
test.serial("Throw a SemanticReleaseError if there is duplicate branches", async (t) => {
|
||||
const branches = [
|
||||
{name: 'master', tags: []},
|
||||
{name: 'master', tags: []},
|
||||
{ name: "master", tags: [] },
|
||||
{ name: "master", tags: [] },
|
||||
];
|
||||
const context = {options: {branches}};
|
||||
const context = { options: { branches } };
|
||||
td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches);
|
||||
td.when(getTags(context, remoteBranches)).thenResolve(branches);
|
||||
|
||||
const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, 'master', context))).errors];
|
||||
const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, "master", context))).errors];
|
||||
|
||||
t.is(errors[0].name, 'SemanticReleaseError');
|
||||
t.is(errors[0].code, 'EDUPLICATEBRANCHES');
|
||||
t.is(errors[0].name, "SemanticReleaseError");
|
||||
t.is(errors[0].code, "EDUPLICATEBRANCHES");
|
||||
t.truthy(errors[0].message);
|
||||
t.truthy(errors[0].details);
|
||||
});
|
||||
|
||||
test.serial('Throw a SemanticReleaseError for each invalid branch name', async (t) => {
|
||||
test.serial("Throw a SemanticReleaseError for each invalid branch name", async (t) => {
|
||||
const branches = [
|
||||
{name: '~master', tags: []},
|
||||
{name: '^master', tags: []},
|
||||
{ name: "~master", tags: [] },
|
||||
{ name: "^master", tags: [] },
|
||||
];
|
||||
const context = {options: {branches}};
|
||||
const context = { options: { branches } };
|
||||
const remoteBranches = [];
|
||||
td.when(expand(repositoryUrl, context, branches)).thenResolve(remoteBranches);
|
||||
td.when(getTags(context, remoteBranches)).thenResolve(branches);
|
||||
|
||||
const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, 'master', context))).errors];
|
||||
const errors = [...(await t.throwsAsync(getBranches(repositoryUrl, "master", context))).errors];
|
||||
|
||||
t.is(errors[0].name, 'SemanticReleaseError');
|
||||
t.is(errors[0].code, 'EINVALIDBRANCHNAME');
|
||||
t.is(errors[0].name, "SemanticReleaseError");
|
||||
t.is(errors[0].code, "EINVALIDBRANCHNAME");
|
||||
t.truthy(errors[0].message);
|
||||
t.truthy(errors[0].details);
|
||||
t.is(errors[1].name, 'SemanticReleaseError');
|
||||
t.is(errors[1].code, 'EINVALIDBRANCHNAME');
|
||||
t.is(errors[1].name, "SemanticReleaseError");
|
||||
t.is(errors[1].code, "EINVALIDBRANCHNAME");
|
||||
t.truthy(errors[1].message);
|
||||
t.truthy(errors[1].details);
|
||||
});
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
import test from 'ava';
|
||||
import expand from '../../lib/branches/expand.js';
|
||||
import {gitCheckout, gitCommits, gitPush, gitRepo} from '../helpers/git-utils.js';
|
||||
import test from "ava";
|
||||
import expand from "../../lib/branches/expand.js";
|
||||
import { gitCheckout, gitCommits, gitPush, gitRepo } from "../helpers/git-utils.js";
|
||||
|
||||
test('Expand branches defined with globs', async (t) => {
|
||||
const {cwd, repositoryUrl} = await gitRepo(true);
|
||||
await gitCommits(['First'], {cwd});
|
||||
await gitPush(repositoryUrl, 'master', {cwd});
|
||||
await gitCheckout('1.0.x', true, {cwd});
|
||||
await gitCommits(['Second'], {cwd});
|
||||
await gitPush(repositoryUrl, '1.0.x', {cwd});
|
||||
await gitCheckout('1.x.x', true, {cwd});
|
||||
await gitCommits(['Third'], {cwd});
|
||||
await gitPush(repositoryUrl, '1.x.x', {cwd});
|
||||
await gitCheckout('2.x', true, {cwd});
|
||||
await gitCommits(['Fourth'], {cwd});
|
||||
await gitPush(repositoryUrl, '2.x', {cwd});
|
||||
await gitCheckout('next', true, {cwd});
|
||||
await gitCommits(['Fifth'], {cwd});
|
||||
await gitPush(repositoryUrl, 'next', {cwd});
|
||||
await gitCheckout('pre/foo', true, {cwd});
|
||||
await gitCommits(['Sixth'], {cwd});
|
||||
await gitPush(repositoryUrl, 'pre/foo', {cwd});
|
||||
await gitCheckout('pre/bar', true, {cwd});
|
||||
await gitCommits(['Seventh'], {cwd});
|
||||
await gitPush(repositoryUrl, 'pre/bar', {cwd});
|
||||
await gitCheckout('beta', true, {cwd});
|
||||
await gitCommits(['Eighth'], {cwd});
|
||||
await gitPush(repositoryUrl, 'beta', {cwd});
|
||||
test("Expand branches defined with globs", async (t) => {
|
||||
const { cwd, repositoryUrl } = await gitRepo(true);
|
||||
await gitCommits(["First"], { cwd });
|
||||
await gitPush(repositoryUrl, "master", { cwd });
|
||||
await gitCheckout("1.0.x", true, { cwd });
|
||||
await gitCommits(["Second"], { cwd });
|
||||
await gitPush(repositoryUrl, "1.0.x", { cwd });
|
||||
await gitCheckout("1.x.x", true, { cwd });
|
||||
await gitCommits(["Third"], { cwd });
|
||||
await gitPush(repositoryUrl, "1.x.x", { cwd });
|
||||
await gitCheckout("2.x", true, { cwd });
|
||||
await gitCommits(["Fourth"], { cwd });
|
||||
await gitPush(repositoryUrl, "2.x", { cwd });
|
||||
await gitCheckout("next", true, { cwd });
|
||||
await gitCommits(["Fifth"], { cwd });
|
||||
await gitPush(repositoryUrl, "next", { cwd });
|
||||
await gitCheckout("pre/foo", true, { cwd });
|
||||
await gitCommits(["Sixth"], { cwd });
|
||||
await gitPush(repositoryUrl, "pre/foo", { cwd });
|
||||
await gitCheckout("pre/bar", true, { cwd });
|
||||
await gitCommits(["Seventh"], { cwd });
|
||||
await gitPush(repositoryUrl, "pre/bar", { cwd });
|
||||
await gitCheckout("beta", true, { cwd });
|
||||
await gitCommits(["Eighth"], { cwd });
|
||||
await gitPush(repositoryUrl, "beta", { cwd });
|
||||
|
||||
const branches = [
|
||||
// Should match all maintenance type branches
|
||||
{name: '+([0-9])?(.{+([0-9]),x}).x'},
|
||||
{name: 'master', channel: 'latest'},
|
||||
{name: 'next'},
|
||||
{name: 'pre/{foo,bar}', channel: `\${name.replace(/^pre\\//g, '')}`, prerelease: true},
|
||||
{ name: "+([0-9])?(.{+([0-9]),x}).x" },
|
||||
{ name: "master", channel: "latest" },
|
||||
{ name: "next" },
|
||||
{ name: "pre/{foo,bar}", channel: `\${name.replace(/^pre\\//g, '')}`, prerelease: true },
|
||||
// Should be ignored as there is no matching branches in the repo
|
||||
{name: 'missing'},
|
||||
{ name: "missing" },
|
||||
// Should be ignored as the matching branch in the repo is already matched by `/^pre\\/(\\w+)$/gi`
|
||||
{name: '*/foo', channel: 'foo', prerelease: 'foo'},
|
||||
{name: 'beta', channel: `channel-\${name}`, prerelease: true},
|
||||
{ name: "*/foo", channel: "foo", prerelease: "foo" },
|
||||
{ name: "beta", channel: `channel-\${name}`, prerelease: true },
|
||||
];
|
||||
|
||||
t.deepEqual(await expand(repositoryUrl, {cwd}, branches), [
|
||||
{name: '1.0.x'},
|
||||
{name: '1.x.x'},
|
||||
{name: '2.x'},
|
||||
{name: 'master', channel: 'latest'},
|
||||
{name: 'next'},
|
||||
{name: 'pre/bar', channel: 'bar', prerelease: true},
|
||||
{name: 'pre/foo', channel: 'foo', prerelease: true},
|
||||
{name: 'beta', channel: 'channel-beta', prerelease: true},
|
||||
t.deepEqual(await expand(repositoryUrl, { cwd }, branches), [
|
||||
{ name: "1.0.x" },
|
||||
{ name: "1.x.x" },
|
||||
{ name: "2.x" },
|
||||
{ name: "master", channel: "latest" },
|
||||
{ name: "next" },
|
||||
{ name: "pre/bar", channel: "bar", prerelease: true },
|
||||
{ name: "pre/foo", channel: "foo", prerelease: true },
|
||||
{ name: "beta", channel: "channel-beta", prerelease: true },
|
||||
]);
|
||||
});
|
||||
|
||||
+100
-97
@@ -1,153 +1,156 @@
|
||||
import test from 'ava';
|
||||
import getTags from '../../lib/branches/get-tags.js';
|
||||
import {gitAddNote, gitCheckout, gitCommits, gitRepo, gitTagVersion} from '../helpers/git-utils.js';
|
||||
import test from "ava";
|
||||
import getTags from "../../lib/branches/get-tags.js";
|
||||
import { gitAddNote, gitCheckout, gitCommits, gitRepo, gitTagVersion } from "../helpers/git-utils.js";
|
||||
|
||||
test('Get the valid tags', async (t) => {
|
||||
const {cwd} = await gitRepo();
|
||||
const commits = await gitCommits(['First'], {cwd});
|
||||
await gitTagVersion('foo', undefined, {cwd});
|
||||
await gitTagVersion('v2.0.0', undefined, {cwd});
|
||||
commits.push(...(await gitCommits(['Second'], {cwd})));
|
||||
await gitTagVersion('v1.0.0', undefined, {cwd});
|
||||
commits.push(...(await gitCommits(['Third'], {cwd})));
|
||||
await gitTagVersion('v3.0', undefined, {cwd});
|
||||
commits.push(...(await gitCommits(['Fourth'], {cwd})));
|
||||
await gitTagVersion('v3.0.0-beta.1', undefined, {cwd});
|
||||
test("Get the valid tags", async (t) => {
|
||||
const { cwd } = await gitRepo();
|
||||
const commits = await gitCommits(["First"], { cwd });
|
||||
await gitTagVersion("foo", undefined, { cwd });
|
||||
await gitTagVersion("v2.0.0", undefined, { cwd });
|
||||
commits.push(...(await gitCommits(["Second"], { cwd })));
|
||||
await gitTagVersion("v1.0.0", undefined, { cwd });
|
||||
commits.push(...(await gitCommits(["Third"], { cwd })));
|
||||
await gitTagVersion("v3.0", undefined, { cwd });
|
||||
commits.push(...(await gitCommits(["Fourth"], { cwd })));
|
||||
await gitTagVersion("v3.0.0-beta.1", undefined, { cwd });
|
||||
|
||||
const result = await getTags({cwd, options: {tagFormat: `v\${version}`}}, [{name: 'master'}]);
|
||||
const result = await getTags({ cwd, options: { tagFormat: `v\${version}` } }, [{ name: "master" }]);
|
||||
|
||||
t.deepEqual(result, [
|
||||
{
|
||||
name: 'master',
|
||||
name: "master",
|
||||
tags: [
|
||||
{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]},
|
||||
{gitTag: 'v2.0.0', version: '2.0.0', channels: [null]},
|
||||
{gitTag: 'v3.0.0-beta.1', version: '3.0.0-beta.1', channels: [null]},
|
||||
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null] },
|
||||
{ gitTag: "v2.0.0", version: "2.0.0", channels: [null] },
|
||||
{ gitTag: "v3.0.0-beta.1", version: "3.0.0-beta.1", channels: [null] },
|
||||
],
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
test('Get the valid tags from multiple branches', async (t) => {
|
||||
const {cwd} = await gitRepo();
|
||||
await gitCommits(['First'], {cwd});
|
||||
await gitTagVersion('v1.0.0', undefined, {cwd});
|
||||
await gitAddNote(JSON.stringify({channels: [null, '1.x']}), 'v1.0.0', {cwd});
|
||||
await gitCommits(['Second'], {cwd});
|
||||
await gitTagVersion('v1.1.0', undefined, {cwd});
|
||||
await gitAddNote(JSON.stringify({channels: [null, '1.x']}), 'v1.1.0', {cwd});
|
||||
await gitCheckout('1.x', true, {cwd});
|
||||
await gitCheckout('master', false, {cwd});
|
||||
await gitCommits(['Third'], {cwd});
|
||||
await gitTagVersion('v2.0.0', undefined, {cwd});
|
||||
await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v2.0.0', {cwd});
|
||||
await gitCheckout('next', true, {cwd});
|
||||
await gitCommits(['Fourth'], {cwd});
|
||||
await gitTagVersion('v3.0.0', undefined, {cwd});
|
||||
await gitAddNote(JSON.stringify({channels: ['next']}), 'v3.0.0', {cwd});
|
||||
test("Get the valid tags from multiple branches", async (t) => {
|
||||
const { cwd } = await gitRepo();
|
||||
await gitCommits(["First"], { cwd });
|
||||
await gitTagVersion("v1.0.0", undefined, { cwd });
|
||||
await gitAddNote(JSON.stringify({ channels: [null, "1.x"] }), "v1.0.0", { cwd });
|
||||
await gitCommits(["Second"], { cwd });
|
||||
await gitTagVersion("v1.1.0", undefined, { cwd });
|
||||
await gitAddNote(JSON.stringify({ channels: [null, "1.x"] }), "v1.1.0", { cwd });
|
||||
await gitCheckout("1.x", true, { cwd });
|
||||
await gitCheckout("master", false, { cwd });
|
||||
await gitCommits(["Third"], { cwd });
|
||||
await gitTagVersion("v2.0.0", undefined, { cwd });
|
||||
await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v2.0.0", { cwd });
|
||||
await gitCheckout("next", true, { cwd });
|
||||
await gitCommits(["Fourth"], { cwd });
|
||||
await gitTagVersion("v3.0.0", undefined, { cwd });
|
||||
await gitAddNote(JSON.stringify({ channels: ["next"] }), "v3.0.0", { cwd });
|
||||
|
||||
const result = await getTags({cwd, options: {tagFormat: `v\${version}`}}, [
|
||||
{name: '1.x'},
|
||||
{name: 'master'},
|
||||
{name: 'next'},
|
||||
const result = await getTags({ cwd, options: { tagFormat: `v\${version}` } }, [
|
||||
{ name: "1.x" },
|
||||
{ name: "master" },
|
||||
{ name: "next" },
|
||||
]);
|
||||
|
||||
t.deepEqual(result, [
|
||||
{
|
||||
name: '1.x',
|
||||
name: "1.x",
|
||||
tags: [
|
||||
{gitTag: 'v1.0.0', version: '1.0.0', channels: [null, '1.x']},
|
||||
{gitTag: 'v1.1.0', version: '1.1.0', channels: [null, '1.x']},
|
||||
{ gitTag: "v1.0.0", version: "1.0.0", channels: [null, "1.x"] },
|
||||
{ gitTag: "v1.1.0", version: "1.1.0", channels: [null, "1.x"] },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'master',
|
||||
tags: [...result[0].tags, {gitTag: 'v2.0.0', version: '2.0.0', channels: [null, 'next']}],
|
||||
name: "master",
|
||||
tags: [...result[0].tags, { gitTag: "v2.0.0", version: "2.0.0", channels: [null, "next"] }],
|
||||
},
|
||||
{
|
||||
name: 'next',
|
||||
tags: [...result[1].tags, {gitTag: 'v3.0.0', version: '3.0.0', channels: ['next']}],
|
||||
name: "next",
|
||||
tags: [...result[1].tags, { gitTag: "v3.0.0", version: "3.0.0", channels: ["next"] }],
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
test('Return branches with and empty tags array if no valid tag is found', async (t) => {
|
||||
const {cwd} = await gitRepo();
|
||||
await gitCommits(['First'], {cwd});
|
||||
await gitTagVersion('foo', undefined, {cwd});
|
||||
await gitCommits(['Second'], {cwd});
|
||||
await gitTagVersion('v2.0.x', undefined, {cwd});
|
||||
await gitCommits(['Third'], {cwd});
|
||||
await gitTagVersion('v3.0', undefined, {cwd});
|
||||
test("Return branches with and empty tags array if no valid tag is found", async (t) => {
|
||||
const { cwd } = await gitRepo();
|
||||
await gitCommits(["First"], { cwd });
|
||||
await gitTagVersion("foo", undefined, { cwd });
|
||||
await gitCommits(["Second"], { cwd });
|
||||
await gitTagVersion("v2.0.x", undefined, { cwd });
|
||||
await gitCommits(["Third"], { cwd });
|
||||
await gitTagVersion("v3.0", undefined, { cwd });
|
||||
|
||||
const result = await getTags({cwd, options: {tagFormat: `prefix@v\${version}`}}, [{name: 'master'}]);
|
||||
const result = await getTags({ cwd, options: { tagFormat: `prefix@v\${version}` } }, [{ name: "master" }]);
|
||||
|
||||
t.deepEqual(result, [{name: 'master', tags: []}]);
|
||||
t.deepEqual(result, [{ name: "master", tags: [] }]);
|
||||
});
|
||||
|
||||
test('Return branches with and empty tags array if no valid tag is found in history of configured branches', async (t) => {
|
||||
const {cwd} = await gitRepo();
|
||||
await gitCommits(['First'], {cwd});
|
||||
await gitCheckout('next', true, {cwd});
|
||||
await gitCommits(['Second'], {cwd});
|
||||
await gitTagVersion('v1.0.0', undefined, {cwd});
|
||||
await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v1.0.0', {cwd});
|
||||
await gitCommits(['Third'], {cwd});
|
||||
await gitTagVersion('v2.0.0', undefined, {cwd});
|
||||
await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v2.0.0', {cwd});
|
||||
await gitCommits(['Fourth'], {cwd});
|
||||
await gitTagVersion('v3.0.0', undefined, {cwd});
|
||||
await gitAddNote(JSON.stringify({channels: [null, 'next']}), 'v3.0.0', {cwd});
|
||||
await gitCheckout('master', false, {cwd});
|
||||
test("Return branches with and empty tags array if no valid tag is found in history of configured branches", async (t) => {
|
||||
const { cwd } = await gitRepo();
|
||||
await gitCommits(["First"], { cwd });
|
||||
await gitCheckout("next", true, { cwd });
|
||||
await gitCommits(["Second"], { cwd });
|
||||
await gitTagVersion("v1.0.0", undefined, { cwd });
|
||||
await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v1.0.0", { cwd });
|
||||
await gitCommits(["Third"], { cwd });
|
||||
await gitTagVersion("v2.0.0", undefined, { cwd });
|
||||
await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v2.0.0", { cwd });
|
||||
await gitCommits(["Fourth"], { cwd });
|
||||
await gitTagVersion("v3.0.0", undefined, { cwd });
|
||||
await gitAddNote(JSON.stringify({ channels: [null, "next"] }), "v3.0.0", { cwd });
|
||||
await gitCheckout("master", false, { cwd });
|
||||
|
||||
const result = await getTags({cwd, options: {tagFormat: `prefix@v\${version}`}}, [{name: 'master'}, {name: 'next'}]);
|
||||
const result = await getTags({ cwd, options: { tagFormat: `prefix@v\${version}` } }, [
|
||||
{ name: "master" },
|
||||
{ name: "next" },
|
||||
]);
|
||||
|
||||
t.deepEqual(result, [
|
||||
{name: 'master', tags: []},
|
||||
{name: 'next', tags: []},
|
||||
{ name: "master", tags: [] },
|
||||
{ name: "next", tags: [] },
|
||||
]);
|
||||
});
|
||||
|
||||
test('Get the highest valid tag corresponding to the "tagFormat"', async (t) => {
|
||||
const {cwd} = await gitRepo();
|
||||
await gitCommits(['First'], {cwd});
|
||||
const { cwd } = await gitRepo();
|
||||
await gitCommits(["First"], { cwd });
|
||||
|
||||
await gitTagVersion('1.0.0', undefined, {cwd});
|
||||
t.deepEqual(await getTags({cwd, options: {tagFormat: `\${version}`}}, [{name: 'master'}]), [
|
||||
{name: 'master', tags: [{gitTag: '1.0.0', version: '1.0.0', channels: [null]}]},
|
||||
await gitTagVersion("1.0.0", undefined, { cwd });
|
||||
t.deepEqual(await getTags({ cwd, options: { tagFormat: `\${version}` } }, [{ name: "master" }]), [
|
||||
{ name: "master", tags: [{ gitTag: "1.0.0", version: "1.0.0", channels: [null] }] },
|
||||
]);
|
||||
|
||||
await gitTagVersion('foo-1.0.0-bar', undefined, {cwd});
|
||||
t.deepEqual(await getTags({cwd, options: {tagFormat: `foo-\${version}-bar`}}, [{name: 'master'}]), [
|
||||
{name: 'master', tags: [{gitTag: 'foo-1.0.0-bar', version: '1.0.0', channels: [null]}]},
|
||||
await gitTagVersion("foo-1.0.0-bar", undefined, { cwd });
|
||||
t.deepEqual(await getTags({ cwd, options: { tagFormat: `foo-\${version}-bar` } }, [{ name: "master" }]), [
|
||||
{ name: "master", tags: [{ gitTag: "foo-1.0.0-bar", version: "1.0.0", channels: [null] }] },
|
||||
]);
|
||||
|
||||
await gitTagVersion('foo-v1.0.0-bar', undefined, {cwd});
|
||||
t.deepEqual(await getTags({cwd, options: {tagFormat: `foo-v\${version}-bar`}}, [{name: 'master'}]), [
|
||||
await gitTagVersion("foo-v1.0.0-bar", undefined, { cwd });
|
||||
t.deepEqual(await getTags({ cwd, options: { tagFormat: `foo-v\${version}-bar` } }, [{ name: "master" }]), [
|
||||
{
|
||||
name: 'master',
|
||||
tags: [{gitTag: 'foo-v1.0.0-bar', version: '1.0.0', channels: [null]}],
|
||||
name: "master",
|
||||
tags: [{ gitTag: "foo-v1.0.0-bar", version: "1.0.0", channels: [null] }],
|
||||
},
|
||||
]);
|
||||
|
||||
await gitTagVersion('(.+)/1.0.0/(a-z)', undefined, {cwd});
|
||||
t.deepEqual(await getTags({cwd, options: {tagFormat: `(.+)/\${version}/(a-z)`}}, [{name: 'master'}]), [
|
||||
await gitTagVersion("(.+)/1.0.0/(a-z)", undefined, { cwd });
|
||||
t.deepEqual(await getTags({ cwd, options: { tagFormat: `(.+)/\${version}/(a-z)` } }, [{ name: "master" }]), [
|
||||
{
|
||||
name: 'master',
|
||||
tags: [{gitTag: '(.+)/1.0.0/(a-z)', version: '1.0.0', channels: [null]}],
|
||||
name: "master",
|
||||
tags: [{ gitTag: "(.+)/1.0.0/(a-z)", version: "1.0.0", channels: [null] }],
|
||||
},
|
||||
]);
|
||||
|
||||
await gitTagVersion('2.0.0-1.0.0-bar.1', undefined, {cwd});
|
||||
t.deepEqual(await getTags({cwd, options: {tagFormat: `2.0.0-\${version}-bar.1`}}, [{name: 'master'}]), [
|
||||
await gitTagVersion("2.0.0-1.0.0-bar.1", undefined, { cwd });
|
||||
t.deepEqual(await getTags({ cwd, options: { tagFormat: `2.0.0-\${version}-bar.1` } }, [{ name: "master" }]), [
|
||||
{
|
||||
name: 'master',
|
||||
tags: [{gitTag: '2.0.0-1.0.0-bar.1', version: '1.0.0', channels: [null]}],
|
||||
name: "master",
|
||||
tags: [{ gitTag: "2.0.0-1.0.0-bar.1", version: "1.0.0", channels: [null] }],
|
||||
},
|
||||
]);
|
||||
|
||||
await gitTagVersion('3.0.0-bar.2', undefined, {cwd});
|
||||
t.deepEqual(await getTags({cwd, options: {tagFormat: `\${version}-bar.2`}}, [{name: 'master'}]), [
|
||||
{name: 'master', tags: [{gitTag: '3.0.0-bar.2', version: '3.0.0', channels: [null]}]},
|
||||
await gitTagVersion("3.0.0-bar.2", undefined, { cwd });
|
||||
t.deepEqual(await getTags({ cwd, options: { tagFormat: `\${version}-bar.2` } }, [{ name: "master" }]), [
|
||||
{ name: "master", tags: [{ gitTag: "3.0.0-bar.2", version: "3.0.0", channels: [null] }] },
|
||||
]);
|
||||
});
|
||||
|
||||
+193
-191
@@ -1,17 +1,17 @@
|
||||
import test from 'ava';
|
||||
import * as normalize from '../../lib/branches/normalize.js';
|
||||
import test from "ava";
|
||||
import * as normalize from "../../lib/branches/normalize.js";
|
||||
|
||||
const toTags = (versions) => versions.map((version) => ({version}));
|
||||
const toTags = (versions) => versions.map((version) => ({ version }));
|
||||
|
||||
test('Maintenance branches - initial state', (t) => {
|
||||
test("Maintenance branches - initial state", (t) => {
|
||||
const maintenance = [
|
||||
{name: '1.x', channel: '1.x', tags: []},
|
||||
{name: '1.1.x', tags: []},
|
||||
{name: '1.2.x', tags: []},
|
||||
{ name: "1.x", channel: "1.x", tags: [] },
|
||||
{ name: "1.1.x", tags: [] },
|
||||
{ name: "1.2.x", tags: [] },
|
||||
];
|
||||
const release = [{name: 'master', tags: []}];
|
||||
const release = [{ name: "master", tags: [] }];
|
||||
t.deepEqual(
|
||||
normalize.maintenance({maintenance, release}).map(({type, name, range, accept, channel, mergeRange}) => ({
|
||||
normalize.maintenance({ maintenance, release }).map(({ type, name, range, accept, channel, mergeRange }) => ({
|
||||
type,
|
||||
name,
|
||||
range,
|
||||
@@ -21,51 +21,51 @@ test('Maintenance branches - initial state', (t) => {
|
||||
})),
|
||||
[
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '1.1.x',
|
||||
range: '>=1.1.0 <1.0.0',
|
||||
type: "maintenance",
|
||||
name: "1.1.x",
|
||||
range: ">=1.1.0 <1.0.0",
|
||||
accept: [],
|
||||
channel: '1.1.x',
|
||||
mergeRange: '>=1.1.0 <1.2.0',
|
||||
channel: "1.1.x",
|
||||
mergeRange: ">=1.1.0 <1.2.0",
|
||||
},
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '1.2.x',
|
||||
range: '>=1.2.0 <1.0.0',
|
||||
type: "maintenance",
|
||||
name: "1.2.x",
|
||||
range: ">=1.2.0 <1.0.0",
|
||||
accept: [],
|
||||
channel: '1.2.x',
|
||||
mergeRange: '>=1.2.0 <1.3.0',
|
||||
channel: "1.2.x",
|
||||
mergeRange: ">=1.2.0 <1.3.0",
|
||||
},
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '1.x',
|
||||
range: '>=1.3.0 <1.0.0',
|
||||
type: "maintenance",
|
||||
name: "1.x",
|
||||
range: ">=1.3.0 <1.0.0",
|
||||
accept: [],
|
||||
channel: '1.x',
|
||||
mergeRange: '>=1.3.0 <2.0.0',
|
||||
channel: "1.x",
|
||||
mergeRange: ">=1.3.0 <2.0.0",
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Maintenance branches - cap range to first release present on default branch and not in any Maintenance one', (t) => {
|
||||
test("Maintenance branches - cap range to first release present on default branch and not in any Maintenance one", (t) => {
|
||||
const maintenance = [
|
||||
{name: '1.x', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1', '1.3.0', '1.4.0', '1.5.0'])},
|
||||
{name: 'name', range: '1.1.x', tags: toTags(['1.0.0', '1.0.1', '1.1.0', '1.1.1'])},
|
||||
{name: '1.2.x', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1'])},
|
||||
{name: '2.x.x', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1', '1.5.0'])},
|
||||
{ name: "1.x", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1", "1.3.0", "1.4.0", "1.5.0"]) },
|
||||
{ name: "name", range: "1.1.x", tags: toTags(["1.0.0", "1.0.1", "1.1.0", "1.1.1"]) },
|
||||
{ name: "1.2.x", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1"]) },
|
||||
{ name: "2.x.x", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1", "1.5.0"]) },
|
||||
];
|
||||
const release = [
|
||||
{
|
||||
name: 'master',
|
||||
tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.2.1', '1.3.0', '1.4.0', '1.5.0', '1.6.0', '2.0.0']),
|
||||
name: "master",
|
||||
tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "1.2.1", "1.3.0", "1.4.0", "1.5.0", "1.6.0", "2.0.0"]),
|
||||
},
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize
|
||||
.maintenance({maintenance, release})
|
||||
.map(({type, name, range, accept, channel, mergeRange: maintenanceRange}) => ({
|
||||
.maintenance({ maintenance, release })
|
||||
.map(({ type, name, range, accept, channel, mergeRange: maintenanceRange }) => ({
|
||||
type,
|
||||
name,
|
||||
range,
|
||||
@@ -75,50 +75,50 @@ test('Maintenance branches - cap range to first release present on default branc
|
||||
})),
|
||||
[
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: 'name',
|
||||
range: '>=1.1.1 <1.2.0',
|
||||
accept: ['patch'],
|
||||
channel: 'name',
|
||||
mergeRange: '>=1.1.0 <1.2.0',
|
||||
type: "maintenance",
|
||||
name: "name",
|
||||
range: ">=1.1.1 <1.2.0",
|
||||
accept: ["patch"],
|
||||
channel: "name",
|
||||
mergeRange: ">=1.1.0 <1.2.0",
|
||||
},
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '1.2.x',
|
||||
range: '>=1.2.1 <1.3.0',
|
||||
accept: ['patch'],
|
||||
channel: '1.2.x',
|
||||
mergeRange: '>=1.2.0 <1.3.0',
|
||||
type: "maintenance",
|
||||
name: "1.2.x",
|
||||
range: ">=1.2.1 <1.3.0",
|
||||
accept: ["patch"],
|
||||
channel: "1.2.x",
|
||||
mergeRange: ">=1.2.0 <1.3.0",
|
||||
},
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '1.x',
|
||||
range: '>=1.5.0 <1.6.0',
|
||||
accept: ['patch'],
|
||||
channel: '1.x',
|
||||
mergeRange: '>=1.3.0 <2.0.0',
|
||||
type: "maintenance",
|
||||
name: "1.x",
|
||||
range: ">=1.5.0 <1.6.0",
|
||||
accept: ["patch"],
|
||||
channel: "1.x",
|
||||
mergeRange: ">=1.3.0 <2.0.0",
|
||||
},
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '2.x.x',
|
||||
range: '>=2.0.0 <1.6.0',
|
||||
type: "maintenance",
|
||||
name: "2.x.x",
|
||||
range: ">=2.0.0 <1.6.0",
|
||||
accept: [],
|
||||
channel: '2.x.x',
|
||||
mergeRange: '>=2.0.0 <3.0.0',
|
||||
channel: "2.x.x",
|
||||
mergeRange: ">=2.0.0 <3.0.0",
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Maintenance branches - cap range to default branch last release if all release are also present on maintenance branch', (t) => {
|
||||
test("Maintenance branches - cap range to default branch last release if all release are also present on maintenance branch", (t) => {
|
||||
const maintenance = [
|
||||
{name: '1.x', tags: toTags(['1.0.0', '1.2.0', '1.3.0'])},
|
||||
{name: '2.x.x', tags: toTags(['1.0.0', '1.2.0', '1.3.0', '2.0.0'])},
|
||||
{ name: "1.x", tags: toTags(["1.0.0", "1.2.0", "1.3.0"]) },
|
||||
{ name: "2.x.x", tags: toTags(["1.0.0", "1.2.0", "1.3.0", "2.0.0"]) },
|
||||
];
|
||||
const release = [{name: 'master', tags: toTags(['1.0.0', '1.2.0', '1.3.0', '2.0.0'])}];
|
||||
const release = [{ name: "master", tags: toTags(["1.0.0", "1.2.0", "1.3.0", "2.0.0"]) }];
|
||||
|
||||
t.deepEqual(
|
||||
normalize.maintenance({maintenance, release}).map(({type, name, range, accept, channel, mergeRange}) => ({
|
||||
normalize.maintenance({ maintenance, release }).map(({ type, name, range, accept, channel, mergeRange }) => ({
|
||||
type,
|
||||
name,
|
||||
range,
|
||||
@@ -128,270 +128,272 @@ test('Maintenance branches - cap range to default branch last release if all rel
|
||||
})),
|
||||
[
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '1.x',
|
||||
range: '>=1.3.0 <2.0.0',
|
||||
accept: ['patch', 'minor'],
|
||||
channel: '1.x',
|
||||
mergeRange: '>=1.0.0 <2.0.0',
|
||||
type: "maintenance",
|
||||
name: "1.x",
|
||||
range: ">=1.3.0 <2.0.0",
|
||||
accept: ["patch", "minor"],
|
||||
channel: "1.x",
|
||||
mergeRange: ">=1.0.0 <2.0.0",
|
||||
},
|
||||
{
|
||||
type: 'maintenance',
|
||||
name: '2.x.x',
|
||||
range: '>=2.0.0 <2.0.0',
|
||||
type: "maintenance",
|
||||
name: "2.x.x",
|
||||
range: ">=2.0.0 <2.0.0",
|
||||
accept: [],
|
||||
channel: '2.x.x',
|
||||
mergeRange: '>=2.0.0 <3.0.0',
|
||||
channel: "2.x.x",
|
||||
mergeRange: ">=2.0.0 <3.0.0",
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Release branches - initial state', (t) => {
|
||||
test("Release branches - initial state", (t) => {
|
||||
const release = [
|
||||
{name: 'master', tags: []},
|
||||
{name: 'next', channel: 'next', tags: []},
|
||||
{name: 'next-major', tags: []},
|
||||
{ name: "master", tags: [] },
|
||||
{ name: "next", channel: "next", tags: [] },
|
||||
{ name: "next-major", tags: [] },
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize
|
||||
.release({release})
|
||||
.map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})),
|
||||
.release({ release })
|
||||
.map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })),
|
||||
[
|
||||
{
|
||||
type: 'release',
|
||||
name: 'master',
|
||||
range: '>=1.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
type: "release",
|
||||
name: "master",
|
||||
range: ">=1.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: undefined,
|
||||
main: true,
|
||||
},
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next',
|
||||
range: '>=1.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next',
|
||||
type: "release",
|
||||
name: "next",
|
||||
range: ">=1.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next",
|
||||
main: false,
|
||||
},
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next-major',
|
||||
range: '>=1.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next-major',
|
||||
type: "release",
|
||||
name: "next-major",
|
||||
range: ">=1.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next-major",
|
||||
main: false,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Release branches - 3 release branches', (t) => {
|
||||
test("Release branches - 3 release branches", (t) => {
|
||||
const release = [
|
||||
{name: 'master', tags: toTags(['1.0.0', '1.0.1', '1.0.2'])},
|
||||
{name: 'next', tags: toTags(['1.0.0', '1.0.1', '1.0.2', '1.1.0', '1.2.0'])},
|
||||
{name: 'next-major', tags: toTags(['1.0.0', '1.0.1', '1.0.2', '1.1.0', '1.2.0', '2.0.0', '2.0.1', '2.1.0'])},
|
||||
{ name: "master", tags: toTags(["1.0.0", "1.0.1", "1.0.2"]) },
|
||||
{ name: "next", tags: toTags(["1.0.0", "1.0.1", "1.0.2", "1.1.0", "1.2.0"]) },
|
||||
{ name: "next-major", tags: toTags(["1.0.0", "1.0.1", "1.0.2", "1.1.0", "1.2.0", "2.0.0", "2.0.1", "2.1.0"]) },
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize
|
||||
.release({release})
|
||||
.map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})),
|
||||
.release({ release })
|
||||
.map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })),
|
||||
[
|
||||
{type: 'release', name: 'master', range: '>=1.0.2 <1.1.0', accept: ['patch'], channel: undefined, main: true},
|
||||
{ type: "release", name: "master", range: ">=1.0.2 <1.1.0", accept: ["patch"], channel: undefined, main: true },
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next',
|
||||
range: '>=1.2.0 <2.0.0',
|
||||
accept: ['patch', 'minor'],
|
||||
channel: 'next',
|
||||
type: "release",
|
||||
name: "next",
|
||||
range: ">=1.2.0 <2.0.0",
|
||||
accept: ["patch", "minor"],
|
||||
channel: "next",
|
||||
main: false,
|
||||
},
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next-major',
|
||||
range: '>=2.1.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next-major',
|
||||
type: "release",
|
||||
name: "next-major",
|
||||
range: ">=2.1.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next-major",
|
||||
main: false,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Release branches - 2 release branches', (t) => {
|
||||
test("Release branches - 2 release branches", (t) => {
|
||||
const release = [
|
||||
{name: 'master', tags: toTags(['1.0.0', '1.0.1', '1.1.0', '1.1.1', '1.2.0'])},
|
||||
{name: 'next', tags: toTags(['1.0.0', '1.0.1', '1.1.0', '1.1.1', '1.2.0', '2.0.0', '2.0.1', '2.1.0'])},
|
||||
{ name: "master", tags: toTags(["1.0.0", "1.0.1", "1.1.0", "1.1.1", "1.2.0"]) },
|
||||
{ name: "next", tags: toTags(["1.0.0", "1.0.1", "1.1.0", "1.1.1", "1.2.0", "2.0.0", "2.0.1", "2.1.0"]) },
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize
|
||||
.release({release})
|
||||
.map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})),
|
||||
.release({ release })
|
||||
.map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })),
|
||||
[
|
||||
{
|
||||
type: 'release',
|
||||
name: 'master',
|
||||
range: '>=1.2.0 <2.0.0',
|
||||
accept: ['patch', 'minor'],
|
||||
type: "release",
|
||||
name: "master",
|
||||
range: ">=1.2.0 <2.0.0",
|
||||
accept: ["patch", "minor"],
|
||||
channel: undefined,
|
||||
main: true,
|
||||
},
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next',
|
||||
range: '>=2.1.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next',
|
||||
type: "release",
|
||||
name: "next",
|
||||
range: ">=2.1.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next",
|
||||
main: false,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Release branches - 1 release branches', (t) => {
|
||||
const release = [{name: 'master', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0'])}];
|
||||
test("Release branches - 1 release branches", (t) => {
|
||||
const release = [{ name: "master", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0"]) }];
|
||||
|
||||
t.deepEqual(
|
||||
normalize.release({release}).map(({type, name, range, accept, channel}) => ({type, name, range, accept, channel})),
|
||||
[{type: 'release', name: 'master', range: '>=1.2.0', accept: ['patch', 'minor', 'major'], channel: undefined}]
|
||||
normalize
|
||||
.release({ release })
|
||||
.map(({ type, name, range, accept, channel }) => ({ type, name, range, accept, channel })),
|
||||
[{ type: "release", name: "master", range: ">=1.2.0", accept: ["patch", "minor", "major"], channel: undefined }]
|
||||
);
|
||||
});
|
||||
|
||||
test('Release branches - cap ranges to first release only present on following branch', (t) => {
|
||||
test("Release branches - cap ranges to first release only present on following branch", (t) => {
|
||||
const release = [
|
||||
{name: 'master', tags: toTags(['1.0.0', '1.1.0', '1.2.0', '2.0.0'])},
|
||||
{name: 'next', tags: toTags(['1.0.0', '1.1.0', '1.2.0', '2.0.0', '2.1.0'])},
|
||||
{name: 'next-major', tags: toTags(['1.0.0', '1.1.0', '1.2.0', '2.0.0', '2.1.0', '2.2.0'])},
|
||||
{ name: "master", tags: toTags(["1.0.0", "1.1.0", "1.2.0", "2.0.0"]) },
|
||||
{ name: "next", tags: toTags(["1.0.0", "1.1.0", "1.2.0", "2.0.0", "2.1.0"]) },
|
||||
{ name: "next-major", tags: toTags(["1.0.0", "1.1.0", "1.2.0", "2.0.0", "2.1.0", "2.2.0"]) },
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize
|
||||
.release({release})
|
||||
.map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})),
|
||||
.release({ release })
|
||||
.map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })),
|
||||
[
|
||||
{type: 'release', name: 'master', range: '>=2.0.0 <2.1.0', accept: ['patch'], channel: undefined, main: true},
|
||||
{type: 'release', name: 'next', range: '>=2.1.0 <2.2.0', accept: ['patch'], channel: 'next', main: false},
|
||||
{ type: "release", name: "master", range: ">=2.0.0 <2.1.0", accept: ["patch"], channel: undefined, main: true },
|
||||
{ type: "release", name: "next", range: ">=2.1.0 <2.2.0", accept: ["patch"], channel: "next", main: false },
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next-major',
|
||||
range: '>=2.2.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next-major',
|
||||
type: "release",
|
||||
name: "next-major",
|
||||
range: ">=2.2.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next-major",
|
||||
main: false,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Release branches - Handle missing previous tags in branch history', (t) => {
|
||||
test("Release branches - Handle missing previous tags in branch history", (t) => {
|
||||
const release = [
|
||||
{name: 'master', tags: toTags(['1.0.0', '2.0.0'])},
|
||||
{name: 'next', tags: toTags(['1.0.0', '1.1.0', '1.1.1', '1.2.0', '2.0.0'])},
|
||||
{ name: "master", tags: toTags(["1.0.0", "2.0.0"]) },
|
||||
{ name: "next", tags: toTags(["1.0.0", "1.1.0", "1.1.1", "1.2.0", "2.0.0"]) },
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize
|
||||
.release({release})
|
||||
.map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})),
|
||||
.release({ release })
|
||||
.map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })),
|
||||
[
|
||||
{
|
||||
type: 'release',
|
||||
name: 'master',
|
||||
range: '>=2.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
type: "release",
|
||||
name: "master",
|
||||
range: ">=2.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: undefined,
|
||||
main: true,
|
||||
},
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next',
|
||||
range: '>=2.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next',
|
||||
type: "release",
|
||||
name: "next",
|
||||
range: ">=2.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next",
|
||||
main: false,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Release branches - limit releases on 2nd and 3rd branch based on 1st branch last release', (t) => {
|
||||
test("Release branches - limit releases on 2nd and 3rd branch based on 1st branch last release", (t) => {
|
||||
const release = [
|
||||
{name: 'master', tags: toTags(['1.0.0', '1.1.0', '2.0.0', '3.0.0'])},
|
||||
{name: 'next', tags: toTags(['1.0.0', '1.1.0'])},
|
||||
{name: 'next-major', tags: toTags(['1.0.0', '1.1.0', '2.0.0'])},
|
||||
{ name: "master", tags: toTags(["1.0.0", "1.1.0", "2.0.0", "3.0.0"]) },
|
||||
{ name: "next", tags: toTags(["1.0.0", "1.1.0"]) },
|
||||
{ name: "next-major", tags: toTags(["1.0.0", "1.1.0", "2.0.0"]) },
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize
|
||||
.release({release})
|
||||
.map(({type, name, range, accept, channel, main}) => ({type, name, range, accept, channel, main})),
|
||||
.release({ release })
|
||||
.map(({ type, name, range, accept, channel, main }) => ({ type, name, range, accept, channel, main })),
|
||||
[
|
||||
{
|
||||
type: 'release',
|
||||
name: 'master',
|
||||
range: '>=3.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
type: "release",
|
||||
name: "master",
|
||||
range: ">=3.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: undefined,
|
||||
main: true,
|
||||
},
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next',
|
||||
range: '>=3.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next',
|
||||
type: "release",
|
||||
name: "next",
|
||||
range: ">=3.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next",
|
||||
main: false,
|
||||
},
|
||||
{
|
||||
type: 'release',
|
||||
name: 'next-major',
|
||||
range: '>=3.0.0',
|
||||
accept: ['patch', 'minor', 'major'],
|
||||
channel: 'next-major',
|
||||
type: "release",
|
||||
name: "next-major",
|
||||
range: ">=3.0.0",
|
||||
accept: ["patch", "minor", "major"],
|
||||
channel: "next-major",
|
||||
main: false,
|
||||
},
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Prerelease branches', (t) => {
|
||||
test("Prerelease branches", (t) => {
|
||||
const prerelease = [
|
||||
{name: 'beta', channel: 'beta', prerelease: true, tags: []},
|
||||
{name: 'alpha', prerelease: 'preview', tags: []},
|
||||
{ name: "beta", channel: "beta", prerelease: true, tags: [] },
|
||||
{ name: "alpha", prerelease: "preview", tags: [] },
|
||||
];
|
||||
|
||||
t.deepEqual(
|
||||
normalize.prerelease({prerelease}).map(({type, name, channel}) => ({type, name, channel})),
|
||||
normalize.prerelease({ prerelease }).map(({ type, name, channel }) => ({ type, name, channel })),
|
||||
[
|
||||
{type: 'prerelease', name: 'beta', channel: 'beta'},
|
||||
{type: 'prerelease', name: 'alpha', channel: 'alpha'},
|
||||
{ type: "prerelease", name: "beta", channel: "beta" },
|
||||
{ type: "prerelease", name: "alpha", channel: "alpha" },
|
||||
]
|
||||
);
|
||||
});
|
||||
|
||||
test('Allow to set channel to "false" to prevent default', (t) => {
|
||||
const maintenance = [{name: '1.x', channel: false, tags: []}];
|
||||
const maintenance = [{ name: "1.x", channel: false, tags: [] }];
|
||||
const release = [
|
||||
{name: 'master', channel: false, tags: []},
|
||||
{name: 'next', channel: false, tags: []},
|
||||
{ name: "master", channel: false, tags: [] },
|
||||
{ name: "next", channel: false, tags: [] },
|
||||
];
|
||||
const prerelease = [{name: 'beta', channel: false, prerelease: true, tags: []}];
|
||||
const prerelease = [{ name: "beta", channel: false, prerelease: true, tags: [] }];
|
||||
t.deepEqual(
|
||||
normalize.maintenance({maintenance, release}).map(({name, channel}) => ({name, channel})),
|
||||
[{name: '1.x', channel: false}]
|
||||
normalize.maintenance({ maintenance, release }).map(({ name, channel }) => ({ name, channel })),
|
||||
[{ name: "1.x", channel: false }]
|
||||
);
|
||||
t.deepEqual(
|
||||
normalize.release({release}).map(({name, channel}) => ({name, channel})),
|
||||
normalize.release({ release }).map(({ name, channel }) => ({ name, channel })),
|
||||
[
|
||||
{name: 'master', channel: false},
|
||||
{name: 'next', channel: false},
|
||||
{ name: "master", channel: false },
|
||||
{ name: "next", channel: false },
|
||||
]
|
||||
);
|
||||
t.deepEqual(
|
||||
normalize.prerelease({prerelease}).map(({name, channel}) => ({name, channel})),
|
||||
[{name: 'beta', channel: false}]
|
||||
normalize.prerelease({ prerelease }).map(({ name, channel }) => ({ name, channel })),
|
||||
[{ name: "beta", channel: false }]
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user