Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions src/tasks/createGithubRelease/getNextGitTag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,35 @@ type GitTagDetailsMap = {
*
* - If the package is a single-variant package, the tag will be in the format:
* `v0.1.2`
*
* - If isMultiVariant is true, always use variant@v<version> format, even for a single variant
*/
export function getNextGitTag(releaseDetailsMap: GitTagDetailsMap): string {
export function getNextGitTag(releaseDetailsMap: GitTagDetailsMap, isMultiVariant: boolean): string {
const variantVersions = Object.entries(
releaseDetailsMap
).map(([, { variant, nextVersion }]) => ({ variant, nextVersion }));

if (variantVersions.length === 0)
throw Error("Could not generate git tag. Missing variant or nextVersion");

// Not a multi-variant package
if (variantVersions.length === 1) return `v${variantVersions[0].nextVersion}`;

// If any variant is null, throw an error
if (variantVersions.some(({ variant }) => !variant))
throw Error("Could not generate git tag. Missing variant");

// Multi-variant package
// If isMultiVariant, always use variant@v<version> format, even for a single variant
if (isMultiVariant) {
return variantVersions
.sort((a, b) => (a.variant || "").localeCompare(b.variant || ""))
.map(({ variant, nextVersion }) => `${variant}@v${nextVersion}`)
.join("_");
}

// Not a multi-variant package
if (variantVersions.length === 1) return `v${variantVersions[0].nextVersion}`;

// Multi-variant package (fallback, should not hit if isMultiVariant is set correctly)
return variantVersions
.sort((a, b) => (a.variant || "").localeCompare(b.variant || "")) // Sort alphabetically by variant
.map(({ variant, nextVersion }) => `${variant}@${nextVersion}`) // Map to string
.join("_"); // Join into a single string
.sort((a, b) => (a.variant || "").localeCompare(b.variant || ""))
.map(({ variant, nextVersion }) => `${variant}@${nextVersion}`)
Comment thread
Marketen marked this conversation as resolved.
Outdated
.join("_");
}
2 changes: 1 addition & 1 deletion src/tasks/createGithubRelease/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export function createGithubRelease({

return new Listr<ListrContextPublish>(
[
getHandleTagsTask({ github }),
getHandleTagsTask({ github, isMultiVariant }),
getCreateReleaseTask({
github,
composeFileName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export function getCreateReleaseTask({
task: async (ctx, task) => {
const releaseDetailsMap = buildReleaseDetailsMap(ctx);

const tag = getNextGitTag(releaseDetailsMap);
const tag = getNextGitTag(releaseDetailsMap, isMultiVariant);

task.output = "Deleting existing release...";
await github.deleteReleaseAndAssets(tag);
Expand Down
6 changes: 4 additions & 2 deletions src/tasks/createGithubRelease/subtasks/getHandleTagsTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ import { buildReleaseDetailsMap } from "../buildReleaseDetailsMap.js";
* tagged and released on that tag
*/
export function getHandleTagsTask({
github
github,
isMultiVariant
}: {
github: Github;
isMultiVariant: boolean;
}): ListrTask<ListrContextPublish> {
const isCi = process.env.CI;
const triggerTag = process.env.GITHUB_REF || process.env.TRAVIS_TAG;
Expand All @@ -29,7 +31,7 @@ export function getHandleTagsTask({

const releaseDetailsMap = buildReleaseDetailsMap(ctx);

const tag = getNextGitTag(releaseDetailsMap);
const tag = getNextGitTag(releaseDetailsMap, isMultiVariant);

// If the release is triggered in CI,
// the trigger tag must be removed ("release/patch")
Expand Down
Loading