const namedBranches = ["release", "master", "test", "stage", "prod"] as const type NamedBranch = (typeof namedBranches)[number] | (string & {}) export function getSemver( version: string | undefined, branch: NamedBranch ): string | undefined { if (!version || typeof version !== "string") { return undefined } if (version.startsWith("v")) { version = version.substring(1) } if (!/^\d+\.\d+\.\d+/.test(version)) { return undefined } if (!namedBranches.includes(branch as any)) { let cleanedBranch = branch .substring(0, 20) .trim() .replace(/[^a-zA-Z0-9]/g, "-") .toLowerCase() return `${version}-${cleanedBranch}` } return version }