fix custom tag prefix

This commit is contained in:
Mathieu Dutour 2021-01-04 11:02:35 +01:00
parent 4011b0c046
commit f9c1f5572a
3 changed files with 37 additions and 20 deletions

View File

@ -53,9 +53,15 @@ export default async function main() {
? appendToPreReleaseTag
: currentBranch;
const validTags = await getValidTags();
const latestTag = getLatestTag(validTags);
const latestPrereleaseTag = getLatestPrereleaseTag(validTags, identifier);
const prefixRegex = new RegExp(`^${tagPrefix}`);
const validTags = await getValidTags(prefixRegex);
const latestTag = getLatestTag(validTags, prefixRegex);
const latestPrereleaseTag = getLatestPrereleaseTag(
validTags,
identifier,
prefixRegex
);
const commits = await getCommits(latestTag.commit.sha);
@ -66,12 +72,15 @@ export default async function main() {
} else {
let previousTag: SemVer | null;
if (!latestPrereleaseTag) {
previousTag = parse(latestTag.name);
previousTag = parse(latestTag.name.replace(prefixRegex, ''));
} else {
previousTag = parse(
gte(latestTag.name, latestPrereleaseTag.name)
? latestTag.name
: latestPrereleaseTag.name
gte(
latestTag.name.replace(prefixRegex, ''),
latestPrereleaseTag.name.replace(prefixRegex, '')
)
? latestTag.name.replace(prefixRegex, '')
: latestPrereleaseTag.name.replace(prefixRegex, '')
);
}

View File

@ -5,18 +5,20 @@ import DEFAULT_RELEASE_TYPES from '@semantic-release/commit-analyzer/lib/default
import { compareCommits, listTags } from './github';
import { Await } from './ts';
export async function getValidTags() {
export async function getValidTags(prefixRegex: RegExp) {
const tags = await listTags();
const invalidTags = tags
.map((tag) => tag.name)
.filter((name) => !valid(name));
const invalidTags = tags.filter(
(tag) => !valid(tag.name.replace(prefixRegex, ''))
);
invalidTags.forEach((name) => core.debug(`Found Invalid Tag: ${name}.`));
const validTags = tags
.filter((tag) => valid(tag.name))
.sort((a, b) => rcompare(a.name, b.name));
.filter((tag) => valid(tag.name.replace(prefixRegex, '')))
.sort((a, b) =>
rcompare(a.name.replace(prefixRegex, ''), b.name.replace(prefixRegex, ''))
);
validTags.forEach((tag) => core.debug(`Found Valid Tag: ${tag.name}.`));
@ -38,9 +40,12 @@ export function getBranchFromRef(ref: string) {
return ref.replace('refs/heads/', '');
}
export function getLatestTag(tags: Await<ReturnType<typeof listTags>>) {
export function getLatestTag(
tags: Await<ReturnType<typeof listTags>>,
prefixRegex: RegExp
) {
return (
tags.find((tag) => !prerelease(tag.name)) || {
tags.find((tag) => !prerelease(tag.name.replace(prefixRegex, ''))) || {
name: '0.0.0',
commit: {
sha: 'HEAD',
@ -51,11 +56,12 @@ export function getLatestTag(tags: Await<ReturnType<typeof listTags>>) {
export function getLatestPrereleaseTag(
tags: Await<ReturnType<typeof listTags>>,
identifier: string
identifier: string,
prefixRegex: RegExp
) {
return tags
.filter((tag) => prerelease(tag.name))
.find((tag) => tag.name.match(identifier));
.filter((tag) => prerelease(tag.name.replace(prefixRegex, '')))
.find((tag) => tag.name.replace(prefixRegex, '').match(identifier));
}
export function mapCustomReleaseRules(customReleaseTypes: string) {

View File

@ -6,6 +6,8 @@ import * as github from '../src/github';
jest.spyOn(core, 'debug').mockImplementation(() => {});
jest.spyOn(core, 'warning').mockImplementation(() => {});
const regex = /^v/;
describe('utils', () => {
it('extracts branch from ref', () => {
/*
@ -51,7 +53,7 @@ describe('utils', () => {
/*
* When
*/
const validTags = await getValidTags();
const validTags = await getValidTags(regex);
/*
* Then
@ -101,7 +103,7 @@ describe('utils', () => {
/*
* When
*/
const validTags = await getValidTags();
const validTags = await getValidTags(regex);
/*
* Then