@yuki-no/plugin-release-tracking
Version:
Release tracking plugin for yuki-no - Tracks release status for commits and manages issue labels/comments automatically
37 lines (36 loc) • 1.45 kB
JavaScript
import { splitByNewline } from '@yuki-no/plugin-sdk/utils/input';
import { log } from '@yuki-no/plugin-sdk/utils/log';
import { valid as isValidVersion, parse as parseVersion } from 'semver';
export const getRelease = (git, commitHash) => {
log('I', `getRelease :: Retrieving release list for commit ${commitHash}`);
const result = git.exec(`tag --contains ${commitHash}`);
if (!result.length) {
log('I', 'getRelease :: Not released');
return {
prerelease: undefined,
release: undefined,
};
}
const versions = splitByNewline(result);
const parsedVersions = versions
.filter(v => isValidVersion(v))
.map(v => parseVersion(v));
const firstPrereleaseVersion = parsedVersions.find(v => v?.prerelease.length && v.prerelease.length > 0)?.raw;
const firstReleaseVersion = parsedVersions.find(v => v?.prerelease.length === 0)?.raw;
const releaseInfo = {
prerelease: createTag(git.repoUrl, firstPrereleaseVersion),
release: createTag(git.repoUrl, firstReleaseVersion),
};
log('I', `getRelease :: Released (pre: ${releaseInfo.prerelease?.version ?? ''} / prod: ${releaseInfo.release?.version ?? ''})`);
return releaseInfo;
};
const createTag = (repoUrl, version) => {
if (!version) {
return;
}
const tagUrl = `${repoUrl}/releases/tag/${version}`;
return {
url: tagUrl,
version,
};
};