semantic-release-next-version 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,3 @@
1
- var $=Object.create;var H=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var V=(e,r)=>{for(var t in r)H(e,t,{get:r[t],enumerable:!0})},I=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of C(r))!S.call(e,s)&&s!==t&&H(e,s,{get:()=>r[s],enumerable:!(n=O(r,s))||n.enumerable});return e};var c=(e,r,t)=>(t=e!=null?$(M(e)):{},I(r||!e||!e.__esModule?H(t,"default",{value:e,enumerable:!0}):t,e)),j=e=>I(H({},"__esModule",{value:!0}),e);var X={};V(X,{api:()=>x,default:()=>Q,getNextVersion:()=>A});module.exports=j(X);var U=c(require("node:fs/promises"),1),y=c(require("node:os"),1),R=c(require("node:path"),1),b=c(require("debug"),1),F=c(require("semantic-release"),1),w=c(require("semver"),1),N=require("tinyexec"),K="main",o=(0,b.default)("semantic-release-next-version"),L=["GITHUB_TOKEN","GH_TOKEN","GIT_TOKEN"];function k(e){return{repositoryUrl:".",branches:[e,{name:"*",prerelease:!0}],tagFormat:"${version}",plugins:["@semantic-release/commit-analyzer"]}}async function i(e,r){let t=await(0,N.exec)("git",r,{nodeOptions:{cwd:e},throwOnError:!0});if(t.exitCode)throw new Error(`git ${r.join(" ")} failed with code ${t.exitCode}`);return t.stdout.trim()}async function z(e){if(process.env.GITHUB_HEAD_REF)return process.env.GITHUB_HEAD_REF;if(process.env.GITHUB_REF_NAME)return process.env.GITHUB_REF_NAME;try{return await i(e,["rev-parse","--abbrev-ref","HEAD"])}catch{return""}}async function P(e){try{return await i(e,["config","--get","remote.origin.url"])}catch{return""}}function W(e){return/^https?:\/\/[^/]*github\.com[:/]/i.test(e)}function Y(){return L.some(e=>process.env[e])}async function Z(e,r,t){let n=await U.default.mkdtemp(R.default.join(y.default.tmpdir(),"srnv-")),s=R.default.join(n,"remote.git");return await i(e,["init","--bare",s]),o("created temp remote %s",s),await i(e,["--git-dir",s,"symbolic-ref","HEAD",`refs/heads/${t}`]).catch(()=>{}),await i(e,["push",s,`HEAD:refs/heads/${t}`]).catch(()=>{}),r&&r!==t&&(o("pushing current branch %s to temp remote",r),await i(e,["push",s,`HEAD:refs/heads/${r}`]).catch(()=>{})),await i(e,["push",s,"--tags"]).catch(()=>{}),{remote:s,root:n}}function q(e,r){return e.some(t=>typeof t=="string"?t===r:t?.name===r)}function g(e){return e.replace(/[^0-9A-Za-z-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"prerelease"}async function J(e,r){if(process.env.GITHUB_SHA)return process.env.GITHUB_SHA.slice(0,7);try{return await i(e,["rev-parse","--short","HEAD"])}catch{return r}}async function A({cwd:e=process.cwd(),config:r={},repositoryUrl:t,branches:n,tagFormat:s,plugins:G,release:p=!1,mainBranch:u=K}={}){o("start getNextVersion"),o("cwd=%s mainBranch=%s release=%s",e,u,p),o("env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s",process.env.GITHUB_HEAD_REF,process.env.GITHUB_REF,process.env.GITHUB_REF_NAME),process.env.GITHUB_HEAD_REF&&process.env.GITHUB_REF?.startsWith("refs/pull/")&&(process.env.GITHUB_REF=`refs/heads/${process.env.GITHUB_HEAD_REF}`,process.env.GITHUB_REF_NAME=process.env.GITHUB_HEAD_REF);let a=await z(e)||u;o("currentBranch=%s",a);let l=t||r.repositoryUrl||(p?await P(e):".")||".",v="";if(!p&&l==="."||p&&W(l)&&!Y())try{let{remote:T,root:D}=await Z(e,a,u);l=T,v=D}catch(T){o("failed to create temp remote: %o",T)}let f={...k(u),...r,repositoryUrl:l,...s?{tagFormat:s}:{},...G?{plugins:G}:{}};o("loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s",f.branches,n,f.repositoryUrl);let E=n??f.branches,m=Array.isArray(E)?[...E]:E?[E]:[];o("branches before ensure current=%o",m),q(m,a)||m.push({name:a,prerelease:a!==u?g(a):!1}),o("final branches=%o",m);let _;try{_=await(0,F.default)({...f,branches:m,dryRun:!0,ci:!1,repositoryUrl:f.repositoryUrl},{cwd:e,env:{...process.env,GIT_NOTE_REF:"semantic-release-next-version-empty",GIT_NOTES_REF:"",GIT_NOTES_DISPLAY_REF:""},stdout:process.stderr,stderr:process.stderr})}finally{v&&await U.default.rm(v,{recursive:!0,force:!0}).catch(()=>{})}if(!_)throw new Error("semantic-release did not return a next version.");let h=w.default.parse(_.nextRelease.version);if(!h)throw new Error(`Unable to parse semantic-release version: ${_.nextRelease.version}`);let d=`${h.major}.${h.minor}.${h.patch}`;if(p)return d;let B=await J(e,g(a||"preview"));return`${d}-preview-${B}`}var x={getNextVersion:A};var Q=x;0&&(module.exports={api,getNextVersion});
1
+ var V=Object.create;var H=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var K=(e,r)=>{for(var t in r)H(e,t,{get:r[t],enumerable:!0})},F=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of k(r))!M.call(e,s)&&s!==t&&H(e,s,{get:()=>r[s],enumerable:!(n=j(r,s))||n.enumerable});return e};var m=(e,r,t)=>(t=e!=null?V(C(e)):{},F(r||!e||!e.__esModule?H(t,"default",{value:e,enumerable:!0}):t,e)),P=e=>F(H({},"__esModule",{value:!0}),e);var oe={};K(oe,{default:()=>ne,getNextVersion:()=>I});module.exports=P(oe);var y=m(require("node:fs/promises"),1),N=m(require("node:os"),1),w=m(require("node:path"),1),x=m(require("debug"),1),D=m(require("semantic-release"),1),u=m(require("semver"),1),O=require("tinyexec"),L="main",c=(0,x.default)("semantic-release-next-version"),z=["GITHUB_TOKEN","GH_TOKEN","GIT_TOKEN"],b="__srnv_version_marker__",J=[/\$\{\s*version\s*\}/g,/<%=\s*version\s*%>/g];function W(e){return{repositoryUrl:".",branches:[e,{name:"*",prerelease:!0}],tagFormat:"${version}",plugins:["@semantic-release/commit-analyzer"]}}async function p(e,r){let t=await(0,O.exec)("git",r,{nodeOptions:{cwd:e},throwOnError:!0});if(t.exitCode)throw new Error(`git ${r.join(" ")} failed with code ${t.exitCode}`);return t.stdout.trim()}async function q(e){if(process.env.GITHUB_HEAD_REF)return process.env.GITHUB_HEAD_REF;if(process.env.GITHUB_REF_NAME)return process.env.GITHUB_REF_NAME;try{return await p(e,["rev-parse","--abbrev-ref","HEAD"])}catch{return""}}async function Y(e){try{return await p(e,["config","--get","remote.origin.url"])}catch{return""}}async function Z(e){try{return await p(e,["rev-parse","--is-shallow-repository"])==="true"}catch{return!1}}function Q(e){return/^https?:\/\/[^/]*github\.com[:/]/i.test(e)}function X(){return z.some(e=>process.env[e])}async function ee(e,r,t){let n=await y.default.mkdtemp(w.default.join(N.default.tmpdir(),"srnv-")),s=w.default.join(n,"remote.git");await p(e,["init","--bare",s]),c("created temp remote %s",s);try{await p(e,["--git-dir",s,"symbolic-ref","HEAD",`refs/heads/${t}`])}catch{}try{await p(e,["push",s,`HEAD:refs/heads/${t}`])}catch{}if(r&&r!==t){c("pushing current branch %s to temp remote",r);try{await p(e,["push",s,`HEAD:refs/heads/${r}`])}catch{}}try{await p(e,["push",s,"--tags"])}catch{}return{remote:s,root:n}}function re(e,r){return e.some(t=>typeof t=="string"?t===r:t?.name===r)}function G(e){return e.replace(/[^0-9A-Za-z-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"prerelease"}function te(e,r){if(!e)return"";if(r){let s=r,i=0;for(let a of J)s=s.replace(a,()=>(i+=1,b));if(i===1){let[a,h]=s.split(b);if(e.startsWith(a)&&e.endsWith(h)){let v=h?e.length-h.length:e.length;if(v>=a.length){let l=e.slice(a.length,v),o=u.default.parse(l);if(o)return`${o.major}.${o.minor}.${o.patch}`}}}}let t=u.default.clean(e),n=u.default.parse(t||"");return n?`${n.major}.${n.minor}.${n.patch}`:""}async function se(e,r){try{let n=(await p(e,["tag","--list"])).split(`
2
+ `).map(s=>te(s.trim(),r)).filter(Boolean);if(n.length>0)return u.default.rsort([...new Set(n)])[0]}catch{}try{let t=w.default.join(e,"package.json"),n=await y.default.readFile(t,"utf8"),s=JSON.parse(n)?.version,i=u.default.parse(s);if(i)return`${i.major}.${i.minor}.${i.patch}`}catch{}throw new Error("semantic-release did not return a next version and no valid version was found in git tags or package.json.")}async function B(e,r){if(process.env.GITHUB_SHA)return process.env.GITHUB_SHA.slice(0,7);try{return await p(e,["rev-parse","--short","HEAD"])}catch{return r}}async function I({cwd:e=process.cwd(),config:r={},repositoryUrl:t,branches:n,tagFormat:s,plugins:i,release:a=!1,defaultBranch:h,mainBranch:v}={}){let l=h??v??L;c("start getNextVersion"),c("cwd=%s defaultBranch=%s release=%s",e,l,a),c("env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s",process.env.GITHUB_HEAD_REF,process.env.GITHUB_REF,process.env.GITHUB_REF_NAME),process.env.GITHUB_HEAD_REF&&process.env.GITHUB_REF?.startsWith("refs/pull/")&&(process.env.GITHUB_REF=`refs/heads/${process.env.GITHUB_HEAD_REF}`,process.env.GITHUB_REF_NAME=process.env.GITHUB_HEAD_REF);let o=await q(e)||l;if(c("currentBranch=%s",o),await Z(e))throw new Error("Shallow git clone detected. This tool requires full git history and tags; use actions/checkout with fetch-depth: 0 (or run git fetch --unshallow --tags).");let g=t||r.repositoryUrl||(a?await Y(e):".")||".",A="";if(!a&&g==="."||a&&Q(g)&&!X())try{let{remote:_,root:U}=await ee(e,o,l);g=_,A=U}catch(_){c("failed to create temp remote: %o",_)}let f={...W(l),...r,repositoryUrl:g,...s?{tagFormat:s}:{},...i?{plugins:i}:{}};c("loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s",f.branches,n,f.repositoryUrl);let T=n??f.branches,E=Array.isArray(T)?[...T]:T?[T]:[];c("branches before ensure current=%o",E),re(E,o)||E.push({name:o,prerelease:o!==l?G(o):!1}),c("final branches=%o",E);let d;try{d=await(0,D.default)({...f,branches:E,dryRun:!0,ci:!1,repositoryUrl:f.repositoryUrl},{cwd:e,env:{...process.env,GIT_NOTE_REF:"semantic-release-next-version-empty",GIT_NOTES_REF:"",GIT_NOTES_DISPLAY_REF:""},stdout:process.stderr,stderr:process.stderr})}finally{if(A)try{await y.default.rm(A,{recursive:!0,force:!0})}catch{}}if(!d){if(!a){let _=await se(e,f.tagFormat),U=await B(e,G(o||"preview"));return`${_}-preview-${U}`}throw new Error("semantic-release did not return a next version.")}let R=u.default.parse(d.nextRelease.version);if(!R)throw new Error(`Unable to parse semantic-release version: ${d.nextRelease.version}`);let $=`${R.major}.${R.minor}.${R.patch}`;if(a)return $;let S=await B(e,G(o||"preview"));return`${$}-preview-${S}`}var ne={getNextVersion:I};0&&(module.exports={getNextVersion});
2
3
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.js", "../src/next-version.js"],
4
- "sourcesContent": ["// @ts-check\n\nimport { getNextVersion } from './next-version.js'\n\nconst api = { getNextVersion }\n\nexport { getNextVersion }\nexport { api }\n\nexport default api\n", "// @ts-check\n\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport createDebug from 'debug'\nimport semanticRelease from 'semantic-release'\nimport semver from 'semver'\nimport { exec } from 'tinyexec'\n\nconst DEFAULT_MAIN_BRANCH = 'main'\nconst debug = createDebug('semantic-release-next-version')\nconst TOKEN_ENV_VARS = ['GITHUB_TOKEN', 'GH_TOKEN', 'GIT_TOKEN']\n\n/** @param {string} mainBranch */\nfunction buildDefaultOptions(mainBranch) {\n /** @type {import('semantic-release').Options} */\n return {\n repositoryUrl: '.',\n branches: [mainBranch, { name: '*', prerelease: true }],\n // eslint-disable-next-line no-template-curly-in-string\n tagFormat: '${version}',\n plugins: ['@semantic-release/commit-analyzer'],\n }\n}\n\n/**\n * @param {string} cwd\n * @param {string[]} args\n */\nasync function runGit(cwd, args) {\n const result = await exec('git', args, {\n nodeOptions: { cwd },\n throwOnError: true,\n })\n if (result.exitCode) {\n throw new Error(`git ${args.join(' ')} failed with code ${result.exitCode}`)\n }\n return result.stdout.trim()\n}\n\n/** @param {string} cwd */\nasync function getCurrentBranch(cwd) {\n if (process.env.GITHUB_HEAD_REF) return process.env.GITHUB_HEAD_REF\n if (process.env.GITHUB_REF_NAME) return process.env.GITHUB_REF_NAME\n try {\n return await runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function getRemoteOriginUrl(cwd) {\n try {\n return await runGit(cwd, ['config', '--get', 'remote.origin.url'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} url */\nfunction isGithubHttpUrl(url) {\n return /^https?:\\/\\/[^/]*github\\.com[:/]/i.test(url)\n}\n\nfunction hasGitToken() {\n return TOKEN_ENV_VARS.some((key) => process.env[key])\n}\n\n/**\n * @param {string} cwd\n * @param {string} currentBranch\n * @param {string} mainBranch\n */\nasync function createTempRemote(cwd, currentBranch, mainBranch) {\n const root = await fs.mkdtemp(path.join(os.tmpdir(), 'srnv-'))\n const remote = path.join(root, 'remote.git')\n\n await runGit(cwd, ['init', '--bare', remote])\n debug('created temp remote %s', remote)\n await runGit(cwd, [\n '--git-dir',\n remote,\n 'symbolic-ref',\n 'HEAD',\n `refs/heads/${mainBranch}`,\n ]).catch(() => {})\n await runGit(cwd, ['push', remote, `HEAD:refs/heads/${mainBranch}`]).catch(\n () => {}\n )\n if (currentBranch && currentBranch !== mainBranch) {\n debug('pushing current branch %s to temp remote', currentBranch)\n await runGit(cwd, [\n 'push',\n remote,\n `HEAD:refs/heads/${currentBranch}`,\n ]).catch(() => {})\n }\n await runGit(cwd, ['push', remote, '--tags']).catch(() => {})\n\n return { remote, root }\n}\n\n/**\n * @param {import('semantic-release').BranchSpec[]} branches\n * @param {string} branchName\n */\nfunction branchExists(branches, branchName) {\n return branches.some((entry) => {\n if (typeof entry === 'string') return entry === branchName\n return entry?.name === branchName\n })\n}\n\n/** @param {string} branchName */\nfunction toPrereleaseId(branchName) {\n const slug = branchName\n .replace(/[^0-9A-Za-z-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n return slug || 'prerelease'\n}\n\n/**\n * @param {string} cwd\n * @param {string} fallback\n */\nasync function resolveCommitHash(cwd, fallback) {\n if (process.env.GITHUB_SHA) return process.env.GITHUB_SHA.slice(0, 7)\n try {\n return await runGit(cwd, ['rev-parse', '--short', 'HEAD'])\n } catch {\n return fallback\n }\n}\n\n/**\n * Calculate the next semantic-release version without pushing tags or\n * publishing.\n *\n * @param {import('./index.js').GetNextVersionOptions} [options]\n * @returns {Promise<string>} Next release version.\n */\nexport async function getNextVersion({\n cwd = process.cwd(),\n config = {},\n repositoryUrl,\n branches: overrideBranches,\n tagFormat,\n plugins,\n release = false,\n mainBranch = DEFAULT_MAIN_BRANCH,\n} = {}) {\n debug('start getNextVersion')\n debug('cwd=%s mainBranch=%s release=%s', cwd, mainBranch, release)\n debug(\n 'env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s',\n process.env.GITHUB_HEAD_REF,\n process.env.GITHUB_REF,\n process.env.GITHUB_REF_NAME\n )\n if (\n process.env.GITHUB_HEAD_REF &&\n process.env.GITHUB_REF?.startsWith('refs/pull/')\n ) {\n // Force env-ci to treat the source branch as the release branch on PRs.\n process.env.GITHUB_REF = `refs/heads/${process.env.GITHUB_HEAD_REF}`\n process.env.GITHUB_REF_NAME = process.env.GITHUB_HEAD_REF\n }\n\n const currentBranch = (await getCurrentBranch(cwd)) || mainBranch\n debug('currentBranch=%s', currentBranch)\n\n let effectiveRepoUrl =\n repositoryUrl ||\n config.repositoryUrl ||\n (release ? await getRemoteOriginUrl(cwd) : '.') ||\n '.'\n let tempRemoteRoot = ''\n const needsLocalRemote =\n (!release && effectiveRepoUrl === '.') ||\n (release && isGithubHttpUrl(effectiveRepoUrl) && !hasGitToken())\n\n if (needsLocalRemote) {\n try {\n const { remote, root } = await createTempRemote(\n cwd,\n currentBranch,\n mainBranch\n )\n effectiveRepoUrl = remote\n tempRemoteRoot = root\n } catch (err) {\n debug('failed to create temp remote: %o', err)\n }\n }\n\n const loadedConfig = {\n ...buildDefaultOptions(mainBranch),\n ...config,\n repositoryUrl: effectiveRepoUrl,\n ...(tagFormat ? { tagFormat } : {}),\n ...(plugins ? { plugins } : {}),\n }\n debug(\n 'loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s',\n loadedConfig.branches,\n overrideBranches,\n loadedConfig.repositoryUrl\n )\n const baseBranches = overrideBranches ?? loadedConfig.branches\n const branches = Array.isArray(baseBranches)\n ? [...baseBranches]\n : baseBranches\n ? [baseBranches]\n : []\n debug('branches before ensure current=%o', branches)\n\n if (!branchExists(branches, currentBranch)) {\n branches.push({\n name: currentBranch,\n prerelease:\n currentBranch !== mainBranch ? toPrereleaseId(currentBranch) : false,\n })\n }\n debug('final branches=%o', branches)\n\n let result\n try {\n result = await semanticRelease(\n {\n ...loadedConfig,\n branches,\n dryRun: true,\n ci: false,\n repositoryUrl: loadedConfig.repositoryUrl,\n },\n {\n cwd,\n // Clear notes refs so stray git notes cannot break tag parsing.\n env: {\n ...process.env,\n GIT_NOTE_REF: 'semantic-release-next-version-empty',\n GIT_NOTES_REF: '',\n GIT_NOTES_DISPLAY_REF: '',\n },\n // Route semantic-release logs to stderr so CLI consumers can safely\n // capture stdout for the version string.\n stdout: process.stderr,\n stderr: process.stderr,\n }\n )\n } finally {\n if (tempRemoteRoot) {\n await fs\n .rm(tempRemoteRoot, { recursive: true, force: true })\n .catch(() => {})\n }\n }\n\n if (!result) {\n throw new Error('semantic-release did not return a next version.')\n }\n\n const parsed = semver.parse(result.nextRelease.version)\n if (!parsed) {\n throw new Error(\n `Unable to parse semantic-release version: ${result.nextRelease.version}`\n )\n }\n\n const baseVersion = `${parsed.major}.${parsed.minor}.${parsed.patch}`\n if (release) return baseVersion\n\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n\n return `${baseVersion}-preview-${commitHash}`\n}\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,SAAAE,EAAA,YAAAC,EAAA,mBAAAC,IAAA,eAAAC,EAAAL,GCEA,IAAAM,EAAe,iCACfC,EAAe,wBACfC,EAAiB,0BAEjBC,EAAwB,sBACxBC,EAA4B,iCAC5BC,EAAmB,uBACnBC,EAAqB,oBAEfC,EAAsB,OACtBC,KAAQ,EAAAC,SAAY,+BAA+B,EACnDC,EAAiB,CAAC,eAAgB,WAAY,WAAW,EAG/D,SAASC,EAAoBC,EAAY,CAEvC,MAAO,CACL,cAAe,IACf,SAAU,CAACA,EAAY,CAAE,KAAM,IAAK,WAAY,EAAK,CAAC,EAEtD,UAAW,aACX,QAAS,CAAC,mCAAmC,CAC/C,CACF,CAMA,eAAeC,EAAOC,EAAKC,EAAM,CAC/B,IAAMC,EAAS,QAAM,QAAK,MAAOD,EAAM,CACrC,YAAa,CAAE,IAAAD,CAAI,EACnB,aAAc,EAChB,CAAC,EACD,GAAIE,EAAO,SACT,MAAM,IAAI,MAAM,OAAOD,EAAK,KAAK,GAAG,CAAC,qBAAqBC,EAAO,QAAQ,EAAE,EAE7E,OAAOA,EAAO,OAAO,KAAK,CAC5B,CAGA,eAAeC,EAAiBH,EAAK,CACnC,GAAI,QAAQ,IAAI,gBAAiB,OAAO,QAAQ,IAAI,gBACpD,GAAI,QAAQ,IAAI,gBAAiB,OAAO,QAAQ,IAAI,gBACpD,GAAI,CACF,OAAO,MAAMD,EAAOC,EAAK,CAAC,YAAa,eAAgB,MAAM,CAAC,CAChE,MAAQ,CACN,MAAO,EACT,CACF,CAGA,eAAeI,EAAmBJ,EAAK,CACrC,GAAI,CACF,OAAO,MAAMD,EAAOC,EAAK,CAAC,SAAU,QAAS,mBAAmB,CAAC,CACnE,MAAQ,CACN,MAAO,EACT,CACF,CAGA,SAASK,EAAgBC,EAAK,CAC5B,MAAO,oCAAoC,KAAKA,CAAG,CACrD,CAEA,SAASC,GAAc,CACrB,OAAOX,EAAe,KAAMY,GAAQ,QAAQ,IAAIA,CAAG,CAAC,CACtD,CAOA,eAAeC,EAAiBT,EAAKU,EAAeZ,EAAY,CAC9D,IAAMa,EAAO,MAAM,EAAAC,QAAG,QAAQ,EAAAC,QAAK,KAAK,EAAAC,QAAG,OAAO,EAAG,OAAO,CAAC,EACvDC,EAAS,EAAAF,QAAK,KAAKF,EAAM,YAAY,EAE3C,aAAMZ,EAAOC,EAAK,CAAC,OAAQ,SAAUe,CAAM,CAAC,EAC5CrB,EAAM,yBAA0BqB,CAAM,EACtC,MAAMhB,EAAOC,EAAK,CAChB,YACAe,EACA,eACA,OACA,cAAcjB,CAAU,EAC1B,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,EACjB,MAAMC,EAAOC,EAAK,CAAC,OAAQe,EAAQ,mBAAmBjB,CAAU,EAAE,CAAC,EAAE,MACnE,IAAM,CAAC,CACT,EACIY,GAAiBA,IAAkBZ,IACrCJ,EAAM,2CAA4CgB,CAAa,EAC/D,MAAMX,EAAOC,EAAK,CAChB,OACAe,EACA,mBAAmBL,CAAa,EAClC,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,GAEnB,MAAMX,EAAOC,EAAK,CAAC,OAAQe,EAAQ,QAAQ,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,EAErD,CAAE,OAAAA,EAAQ,KAAAJ,CAAK,CACxB,CAMA,SAASK,EAAaC,EAAUC,EAAY,CAC1C,OAAOD,EAAS,KAAME,GAChB,OAAOA,GAAU,SAAiBA,IAAUD,EACzCC,GAAO,OAASD,CACxB,CACH,CAGA,SAASE,EAAeF,EAAY,CAKlC,OAJaA,EACV,QAAQ,iBAAkB,GAAG,EAC7B,QAAQ,MAAO,GAAG,EAClB,QAAQ,WAAY,EAAE,GACV,YACjB,CAMA,eAAeG,EAAkBrB,EAAKsB,EAAU,CAC9C,GAAI,QAAQ,IAAI,WAAY,OAAO,QAAQ,IAAI,WAAW,MAAM,EAAG,CAAC,EACpE,GAAI,CACF,OAAO,MAAMvB,EAAOC,EAAK,CAAC,YAAa,UAAW,MAAM,CAAC,CAC3D,MAAQ,CACN,OAAOsB,CACT,CACF,CASA,eAAsBC,EAAe,CACnC,IAAAvB,EAAM,QAAQ,IAAI,EAClB,OAAAwB,EAAS,CAAC,EACV,cAAAC,EACA,SAAUC,EACV,UAAAC,EACA,QAAAC,EACA,QAAAC,EAAU,GACV,WAAA/B,EAAaL,CACf,EAAI,CAAC,EAAG,CACNC,EAAM,sBAAsB,EAC5BA,EAAM,kCAAmCM,EAAKF,EAAY+B,CAAO,EACjEnC,EACE,0DACA,QAAQ,IAAI,gBACZ,QAAQ,IAAI,WACZ,QAAQ,IAAI,eACd,EAEE,QAAQ,IAAI,iBACZ,QAAQ,IAAI,YAAY,WAAW,YAAY,IAG/C,QAAQ,IAAI,WAAa,cAAc,QAAQ,IAAI,eAAe,GAClE,QAAQ,IAAI,gBAAkB,QAAQ,IAAI,iBAG5C,IAAMgB,EAAiB,MAAMP,EAAiBH,CAAG,GAAMF,EACvDJ,EAAM,mBAAoBgB,CAAa,EAEvC,IAAIoB,EACFL,GACAD,EAAO,gBACNK,EAAU,MAAMzB,EAAmBJ,CAAG,EAAI,MAC3C,IACE+B,EAAiB,GAKrB,GAHG,CAACF,GAAWC,IAAqB,KACjCD,GAAWxB,EAAgByB,CAAgB,GAAK,CAACvB,EAAY,EAG9D,GAAI,CACF,GAAM,CAAE,OAAAQ,EAAQ,KAAAJ,CAAK,EAAI,MAAMF,EAC7BT,EACAU,EACAZ,CACF,EACAgC,EAAmBf,EACnBgB,EAAiBpB,CACnB,OAASqB,EAAK,CACZtC,EAAM,mCAAoCsC,CAAG,CAC/C,CAGF,IAAMC,EAAe,CACnB,GAAGpC,EAAoBC,CAAU,EACjC,GAAG0B,EACH,cAAeM,EACf,GAAIH,EAAY,CAAE,UAAAA,CAAU,EAAI,CAAC,EACjC,GAAIC,EAAU,CAAE,QAAAA,CAAQ,EAAI,CAAC,CAC/B,EACAlC,EACE,gEACAuC,EAAa,SACbP,EACAO,EAAa,aACf,EACA,IAAMC,EAAeR,GAAoBO,EAAa,SAChDhB,EAAW,MAAM,QAAQiB,CAAY,EACvC,CAAC,GAAGA,CAAY,EAChBA,EACE,CAACA,CAAY,EACb,CAAC,EACPxC,EAAM,oCAAqCuB,CAAQ,EAE9CD,EAAaC,EAAUP,CAAa,GACvCO,EAAS,KAAK,CACZ,KAAMP,EACN,WACEA,IAAkBZ,EAAasB,EAAeV,CAAa,EAAI,EACnE,CAAC,EAEHhB,EAAM,oBAAqBuB,CAAQ,EAEnC,IAAIf,EACJ,GAAI,CACFA,EAAS,QAAM,EAAAiC,SACb,CACE,GAAGF,EACH,SAAAhB,EACA,OAAQ,GACR,GAAI,GACJ,cAAegB,EAAa,aAC9B,EACA,CACE,IAAAjC,EAEA,IAAK,CACH,GAAG,QAAQ,IACX,aAAc,sCACd,cAAe,GACf,sBAAuB,EACzB,EAGA,OAAQ,QAAQ,OAChB,OAAQ,QAAQ,MAClB,CACF,CACF,QAAE,CACI+B,GACF,MAAM,EAAAnB,QACH,GAAGmB,EAAgB,CAAE,UAAW,GAAM,MAAO,EAAK,CAAC,EACnD,MAAM,IAAM,CAAC,CAAC,CAErB,CAEA,GAAI,CAAC7B,EACH,MAAM,IAAI,MAAM,iDAAiD,EAGnE,IAAMkC,EAAS,EAAAC,QAAO,MAAMnC,EAAO,YAAY,OAAO,EACtD,GAAI,CAACkC,EACH,MAAM,IAAI,MACR,6CAA6ClC,EAAO,YAAY,OAAO,EACzE,EAGF,IAAMoC,EAAc,GAAGF,EAAO,KAAK,IAAIA,EAAO,KAAK,IAAIA,EAAO,KAAK,GACnE,GAAIP,EAAS,OAAOS,EAEpB,IAAMC,EAAa,MAAMlB,EACvBrB,EACAoB,EAAeV,GAAiB,SAAS,CAC3C,EAEA,MAAO,GAAG4B,CAAW,YAAYC,CAAU,EAC7C,CDtRA,IAAMC,EAAM,CAAE,eAAAC,CAAe,EAK7B,IAAOC,EAAQC",
6
- "names": ["index_exports", "__export", "api", "index_default", "getNextVersion", "__toCommonJS", "import_promises", "import_node_os", "import_node_path", "import_debug", "import_semantic_release", "import_semver", "import_tinyexec", "DEFAULT_MAIN_BRANCH", "debug", "createDebug", "TOKEN_ENV_VARS", "buildDefaultOptions", "mainBranch", "runGit", "cwd", "args", "result", "getCurrentBranch", "getRemoteOriginUrl", "isGithubHttpUrl", "url", "hasGitToken", "key", "createTempRemote", "currentBranch", "root", "fs", "path", "os", "remote", "branchExists", "branches", "branchName", "entry", "toPrereleaseId", "resolveCommitHash", "fallback", "getNextVersion", "config", "repositoryUrl", "overrideBranches", "tagFormat", "plugins", "release", "effectiveRepoUrl", "tempRemoteRoot", "err", "loadedConfig", "baseBranches", "semanticRelease", "parsed", "semver", "baseVersion", "commitHash", "api", "getNextVersion", "index_default", "api"]
4
+ "sourcesContent": ["// @ts-check\n\nimport { getNextVersion } from './next-version.js'\n\nexport { getNextVersion }\nexport default { getNextVersion }\n", "// @ts-check\n\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport createDebug from 'debug'\nimport semanticRelease from 'semantic-release'\nimport semver from 'semver'\nimport { exec } from 'tinyexec'\n\nconst DEFAULT_BRANCH = 'main'\nconst debug = createDebug('semantic-release-next-version')\nconst TOKEN_ENV_VARS = ['GITHUB_TOKEN', 'GH_TOKEN', 'GIT_TOKEN']\nconst TAG_FORMAT_VERSION_MARKER = '__srnv_version_marker__'\nconst TAG_FORMAT_VERSION_PATTERNS = [\n /\\$\\{\\s*version\\s*\\}/g,\n /<%=\\s*version\\s*%>/g,\n]\n\n/** @param {string} defaultBranch */\nfunction buildDefaultOptions(defaultBranch) {\n /** @type {import('semantic-release').Options} */\n return {\n repositoryUrl: '.',\n branches: [defaultBranch, { name: '*', prerelease: true }],\n // eslint-disable-next-line no-template-curly-in-string\n tagFormat: '${version}',\n plugins: ['@semantic-release/commit-analyzer'],\n }\n}\n\n/**\n * @param {string} cwd\n * @param {string[]} args\n */\nasync function runGit(cwd, args) {\n const result = await exec('git', args, {\n nodeOptions: { cwd },\n throwOnError: true,\n })\n if (result.exitCode) {\n throw new Error(`git ${args.join(' ')} failed with code ${result.exitCode}`)\n }\n return result.stdout.trim()\n}\n\n/** @param {string} cwd */\nasync function getCurrentBranch(cwd) {\n if (process.env.GITHUB_HEAD_REF) return process.env.GITHUB_HEAD_REF\n if (process.env.GITHUB_REF_NAME) return process.env.GITHUB_REF_NAME\n try {\n return await runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function getRemoteOriginUrl(cwd) {\n try {\n return await runGit(cwd, ['config', '--get', 'remote.origin.url'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function isShallowRepository(cwd) {\n try {\n return (\n (await runGit(cwd, ['rev-parse', '--is-shallow-repository'])) === 'true'\n )\n } catch {\n return false\n }\n}\n\n/** @param {string} url */\nfunction isGithubHttpUrl(url) {\n return /^https?:\\/\\/[^/]*github\\.com[:/]/i.test(url)\n}\n\nfunction hasGitToken() {\n return TOKEN_ENV_VARS.some((key) => process.env[key])\n}\n\n/**\n * @param {string} cwd\n * @param {string} currentBranch\n * @param {string} defaultBranch\n */\nasync function createTempRemote(cwd, currentBranch, defaultBranch) {\n const root = await fs.mkdtemp(path.join(os.tmpdir(), 'srnv-'))\n const remote = path.join(root, 'remote.git')\n\n await runGit(cwd, ['init', '--bare', remote])\n debug('created temp remote %s', remote)\n try {\n await runGit(cwd, [\n '--git-dir',\n remote,\n 'symbolic-ref',\n 'HEAD',\n `refs/heads/${defaultBranch}`,\n ])\n } catch {}\n try {\n await runGit(cwd, ['push', remote, `HEAD:refs/heads/${defaultBranch}`])\n } catch {}\n if (currentBranch && currentBranch !== defaultBranch) {\n debug('pushing current branch %s to temp remote', currentBranch)\n try {\n await runGit(cwd, ['push', remote, `HEAD:refs/heads/${currentBranch}`])\n } catch {}\n }\n try {\n await runGit(cwd, ['push', remote, '--tags'])\n } catch {}\n\n return { remote, root }\n}\n\n/**\n * @param {import('semantic-release').BranchSpec[]} branches\n * @param {string} branchName\n */\nfunction branchExists(branches, branchName) {\n return branches.some((entry) => {\n if (typeof entry === 'string') return entry === branchName\n return entry?.name === branchName\n })\n}\n\n/** @param {string} branchName */\nfunction toPrereleaseId(branchName) {\n const slug = branchName\n .replace(/[^0-9A-Za-z-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n return slug || 'prerelease'\n}\n\n/**\n * @param {string} tag\n * @param {string} tagFormat\n */\nfunction parseVersionFromTag(tag, tagFormat) {\n if (!tag) return ''\n\n if (tagFormat) {\n let normalizedTagFormat = tagFormat\n let replacements = 0\n for (const pattern of TAG_FORMAT_VERSION_PATTERNS) {\n normalizedTagFormat = normalizedTagFormat.replace(pattern, () => {\n replacements += 1\n return TAG_FORMAT_VERSION_MARKER\n })\n }\n\n if (replacements === 1) {\n const [prefix, suffix] = normalizedTagFormat.split(\n TAG_FORMAT_VERSION_MARKER\n )\n if (tag.startsWith(prefix) && tag.endsWith(suffix)) {\n const endIndex = suffix ? tag.length - suffix.length : tag.length\n if (endIndex >= prefix.length) {\n const versionSegment = tag.slice(prefix.length, endIndex)\n const parsed = semver.parse(versionSegment)\n if (parsed) return `${parsed.major}.${parsed.minor}.${parsed.patch}`\n }\n }\n }\n }\n\n const cleaned = semver.clean(tag)\n const parsed = semver.parse(cleaned || '')\n if (!parsed) return ''\n return `${parsed.major}.${parsed.minor}.${parsed.patch}`\n}\n\n/**\n * @param {string} cwd\n * @param {string} tagFormat\n */\nasync function resolveCurrentBaseVersion(cwd, tagFormat) {\n try {\n const rawTags = await runGit(cwd, ['tag', '--list'])\n const versions = rawTags\n .split('\\n')\n .map((tag) => parseVersionFromTag(tag.trim(), tagFormat))\n .filter(Boolean)\n if (versions.length > 0) {\n return semver.rsort([...new Set(versions)])[0]\n }\n } catch {}\n\n try {\n const packageJsonPath = path.join(cwd, 'package.json')\n const rawPackageJson = await fs.readFile(packageJsonPath, 'utf8')\n const packageVersion = JSON.parse(rawPackageJson)?.version\n const parsed = semver.parse(packageVersion)\n if (parsed) return `${parsed.major}.${parsed.minor}.${parsed.patch}`\n } catch {}\n\n throw new Error(\n 'semantic-release did not return a next version and no valid version was found in git tags or package.json.'\n )\n}\n\n/**\n * @param {string} cwd\n * @param {string} fallback\n */\nasync function resolveCommitHash(cwd, fallback) {\n if (process.env.GITHUB_SHA) return process.env.GITHUB_SHA.slice(0, 7)\n try {\n return await runGit(cwd, ['rev-parse', '--short', 'HEAD'])\n } catch {\n return fallback\n }\n}\n\n/**\n * Calculate the next semantic-release version without pushing tags or\n * publishing.\n *\n * @param {import('./index.js').GetNextVersionOptions} [options]\n * @returns {Promise<string>} Next release version.\n */\nexport async function getNextVersion({\n cwd = process.cwd(),\n config = {},\n repositoryUrl,\n branches: overrideBranches,\n tagFormat,\n plugins,\n release = false,\n defaultBranch,\n mainBranch,\n} = {}) {\n const resolvedDefaultBranch = defaultBranch ?? mainBranch ?? DEFAULT_BRANCH\n debug('start getNextVersion')\n debug(\n 'cwd=%s defaultBranch=%s release=%s',\n cwd,\n resolvedDefaultBranch,\n release\n )\n debug(\n 'env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s',\n process.env.GITHUB_HEAD_REF,\n process.env.GITHUB_REF,\n process.env.GITHUB_REF_NAME\n )\n if (\n process.env.GITHUB_HEAD_REF &&\n process.env.GITHUB_REF?.startsWith('refs/pull/')\n ) {\n // Force env-ci to treat the source branch as the release branch on PRs.\n process.env.GITHUB_REF = `refs/heads/${process.env.GITHUB_HEAD_REF}`\n process.env.GITHUB_REF_NAME = process.env.GITHUB_HEAD_REF\n }\n\n const currentBranch = (await getCurrentBranch(cwd)) || resolvedDefaultBranch\n debug('currentBranch=%s', currentBranch)\n\n if (await isShallowRepository(cwd)) {\n throw new Error(\n 'Shallow git clone detected. This tool requires full git history and tags; use actions/checkout with fetch-depth: 0 (or run git fetch --unshallow --tags).'\n )\n }\n\n let effectiveRepoUrl =\n repositoryUrl ||\n config.repositoryUrl ||\n (release ? await getRemoteOriginUrl(cwd) : '.') ||\n '.'\n let tempRemoteRoot = ''\n const needsLocalRemote =\n (!release && effectiveRepoUrl === '.') ||\n (release && isGithubHttpUrl(effectiveRepoUrl) && !hasGitToken())\n\n if (needsLocalRemote) {\n try {\n const { remote, root } = await createTempRemote(\n cwd,\n currentBranch,\n resolvedDefaultBranch\n )\n effectiveRepoUrl = remote\n tempRemoteRoot = root\n } catch (err) {\n debug('failed to create temp remote: %o', err)\n }\n }\n\n /** @type {import('semantic-release').Options} */\n const loadedConfig = {\n ...buildDefaultOptions(resolvedDefaultBranch),\n ...config,\n repositoryUrl: effectiveRepoUrl,\n ...(tagFormat ? { tagFormat } : {}),\n ...(plugins ? { plugins } : {}),\n }\n debug(\n 'loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s',\n loadedConfig.branches,\n overrideBranches,\n loadedConfig.repositoryUrl\n )\n const baseBranches = overrideBranches ?? loadedConfig.branches\n const branches = Array.isArray(baseBranches)\n ? [...baseBranches]\n : baseBranches\n ? [baseBranches]\n : []\n debug('branches before ensure current=%o', branches)\n\n if (!branchExists(branches, currentBranch)) {\n branches.push({\n name: currentBranch,\n prerelease:\n currentBranch !== resolvedDefaultBranch\n ? toPrereleaseId(currentBranch)\n : false,\n })\n }\n debug('final branches=%o', branches)\n\n let result\n try {\n result = await semanticRelease(\n {\n ...loadedConfig,\n branches,\n dryRun: true,\n ci: false,\n repositoryUrl: loadedConfig.repositoryUrl,\n },\n {\n cwd,\n // Clear notes refs so stray git notes cannot break tag parsing.\n env: {\n ...process.env,\n GIT_NOTE_REF: 'semantic-release-next-version-empty',\n GIT_NOTES_REF: '',\n GIT_NOTES_DISPLAY_REF: '',\n },\n // Route semantic-release logs to stderr so CLI consumers can safely\n // capture stdout for the version string.\n stdout: process.stderr,\n stderr: process.stderr,\n }\n )\n } finally {\n if (tempRemoteRoot) {\n try {\n await fs.rm(tempRemoteRoot, { recursive: true, force: true })\n } catch {}\n }\n }\n\n if (!result) {\n if (!release) {\n const baseVersion = await resolveCurrentBaseVersion(\n cwd,\n loadedConfig.tagFormat\n )\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n return `${baseVersion}-preview-${commitHash}`\n }\n throw new Error('semantic-release did not return a next version.')\n }\n\n const parsed = semver.parse(result.nextRelease.version)\n if (!parsed) {\n throw new Error(\n `Unable to parse semantic-release version: ${result.nextRelease.version}`\n )\n }\n\n const baseVersion = `${parsed.major}.${parsed.minor}.${parsed.patch}`\n if (release) return baseVersion\n\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n\n return `${baseVersion}-preview-${commitHash}`\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["index_exports", "__export", "index_default", "getNextVersion", "__toCommonJS", "import_promises", "import_node_os", "import_node_path", "import_debug", "import_semantic_release", "import_semver", "import_tinyexec", "DEFAULT_BRANCH", "debug", "createDebug", "TOKEN_ENV_VARS", "TAG_FORMAT_VERSION_MARKER", "TAG_FORMAT_VERSION_PATTERNS", "buildDefaultOptions", "defaultBranch", "runGit", "cwd", "args", "result", "getCurrentBranch", "getRemoteOriginUrl", "isShallowRepository", "isGithubHttpUrl", "url", "hasGitToken", "key", "createTempRemote", "currentBranch", "root", "fs", "path", "os", "remote", "branchExists", "branches", "branchName", "entry", "toPrereleaseId", "parseVersionFromTag", "tag", "tagFormat", "normalizedTagFormat", "replacements", "pattern", "prefix", "suffix", "endIndex", "versionSegment", "parsed", "semver", "cleaned", "resolveCurrentBaseVersion", "versions", "packageJsonPath", "rawPackageJson", "packageVersion", "resolveCommitHash", "fallback", "getNextVersion", "config", "repositoryUrl", "overrideBranches", "plugins", "release", "mainBranch", "resolvedDefaultBranch", "effectiveRepoUrl", "tempRemoteRoot", "err", "loadedConfig", "baseBranches", "semanticRelease", "baseVersion", "commitHash", "index_default", "getNextVersion"]
7
7
  }
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
- import A from"node:fs/promises";import g from"node:os";import R from"node:path";import y from"debug";import b from"semantic-release";import F from"semver";import{exec as w}from"tinyexec";var N="main",o=y("semantic-release-next-version"),x=["GITHUB_TOKEN","GH_TOKEN","GIT_TOKEN"];function B(e){return{repositoryUrl:".",branches:[e,{name:"*",prerelease:!0}],tagFormat:"${version}",plugins:["@semantic-release/commit-analyzer"]}}async function n(e,r){let t=await w("git",r,{nodeOptions:{cwd:e},throwOnError:!0});if(t.exitCode)throw new Error(`git ${r.join(" ")} failed with code ${t.exitCode}`);return t.stdout.trim()}async function D(e){if(process.env.GITHUB_HEAD_REF)return process.env.GITHUB_HEAD_REF;if(process.env.GITHUB_REF_NAME)return process.env.GITHUB_REF_NAME;try{return await n(e,["rev-parse","--abbrev-ref","HEAD"])}catch{return""}}async function $(e){try{return await n(e,["config","--get","remote.origin.url"])}catch{return""}}function O(e){return/^https?:\/\/[^/]*github\.com[:/]/i.test(e)}function C(){return x.some(e=>process.env[e])}async function M(e,r,t){let a=await A.mkdtemp(R.join(g.tmpdir(),"srnv-")),s=R.join(a,"remote.git");return await n(e,["init","--bare",s]),o("created temp remote %s",s),await n(e,["--git-dir",s,"symbolic-ref","HEAD",`refs/heads/${t}`]).catch(()=>{}),await n(e,["push",s,`HEAD:refs/heads/${t}`]).catch(()=>{}),r&&r!==t&&(o("pushing current branch %s to temp remote",r),await n(e,["push",s,`HEAD:refs/heads/${r}`]).catch(()=>{})),await n(e,["push",s,"--tags"]).catch(()=>{}),{remote:s,root:a}}function S(e,r){return e.some(t=>typeof t=="string"?t===r:t?.name===r)}function U(e){return e.replace(/[^0-9A-Za-z-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"prerelease"}async function V(e,r){if(process.env.GITHUB_SHA)return process.env.GITHUB_SHA.slice(0,7);try{return await n(e,["rev-parse","--short","HEAD"])}catch{return r}}async function G({cwd:e=process.cwd(),config:r={},repositoryUrl:t,branches:a,tagFormat:s,plugins:v,release:c=!1,mainBranch:p=N}={}){o("start getNextVersion"),o("cwd=%s mainBranch=%s release=%s",e,p,c),o("env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s",process.env.GITHUB_HEAD_REF,process.env.GITHUB_REF,process.env.GITHUB_REF_NAME),process.env.GITHUB_HEAD_REF&&process.env.GITHUB_REF?.startsWith("refs/pull/")&&(process.env.GITHUB_REF=`refs/heads/${process.env.GITHUB_HEAD_REF}`,process.env.GITHUB_REF_NAME=process.env.GITHUB_HEAD_REF);let i=await D(e)||p;o("currentBranch=%s",i);let m=t||r.repositoryUrl||(c?await $(e):".")||".",h="";if(!c&&m==="."||c&&O(m)&&!C())try{let{remote:H,root:I}=await M(e,i,p);m=H,h=I}catch(H){o("failed to create temp remote: %o",H)}let u={...B(p),...r,repositoryUrl:m,...s?{tagFormat:s}:{},...v?{plugins:v}:{}};o("loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s",u.branches,a,u.repositoryUrl);let l=a??u.branches,f=Array.isArray(l)?[...l]:l?[l]:[];o("branches before ensure current=%o",f),S(f,i)||f.push({name:i,prerelease:i!==p?U(i):!1}),o("final branches=%o",f);let E;try{E=await b({...u,branches:f,dryRun:!0,ci:!1,repositoryUrl:u.repositoryUrl},{cwd:e,env:{...process.env,GIT_NOTE_REF:"semantic-release-next-version-empty",GIT_NOTES_REF:"",GIT_NOTES_DISPLAY_REF:""},stdout:process.stderr,stderr:process.stderr})}finally{h&&await A.rm(h,{recursive:!0,force:!0}).catch(()=>{})}if(!E)throw new Error("semantic-release did not return a next version.");let _=F.parse(E.nextRelease.version);if(!_)throw new Error(`Unable to parse semantic-release version: ${E.nextRelease.version}`);let T=`${_.major}.${_.minor}.${_.patch}`;if(c)return T;let d=await V(e,U(i||"preview"));return`${T}-preview-${d}`}var j={getNextVersion:G};var Q=j;export{j as api,Q as default,G as getNextVersion};
1
+ import A from"node:fs/promises";import b from"node:os";import y from"node:path";import B from"debug";import N from"semantic-release";import f from"semver";import{exec as x}from"tinyexec";var D="main",c=B("semantic-release-next-version"),O=["GITHUB_TOKEN","GH_TOKEN","GIT_TOKEN"],G="__srnv_version_marker__",S=[/\$\{\s*version\s*\}/g,/<%=\s*version\s*%>/g];function V(e){return{repositoryUrl:".",branches:[e,{name:"*",prerelease:!0}],tagFormat:"${version}",plugins:["@semantic-release/commit-analyzer"]}}async function p(e,r){let t=await x("git",r,{nodeOptions:{cwd:e},throwOnError:!0});if(t.exitCode)throw new Error(`git ${r.join(" ")} failed with code ${t.exitCode}`);return t.stdout.trim()}async function j(e){if(process.env.GITHUB_HEAD_REF)return process.env.GITHUB_HEAD_REF;if(process.env.GITHUB_REF_NAME)return process.env.GITHUB_REF_NAME;try{return await p(e,["rev-parse","--abbrev-ref","HEAD"])}catch{return""}}async function k(e){try{return await p(e,["config","--get","remote.origin.url"])}catch{return""}}async function C(e){try{return await p(e,["rev-parse","--is-shallow-repository"])==="true"}catch{return!1}}function M(e){return/^https?:\/\/[^/]*github\.com[:/]/i.test(e)}function K(){return O.some(e=>process.env[e])}async function P(e,r,t){let n=await A.mkdtemp(y.join(b.tmpdir(),"srnv-")),s=y.join(n,"remote.git");await p(e,["init","--bare",s]),c("created temp remote %s",s);try{await p(e,["--git-dir",s,"symbolic-ref","HEAD",`refs/heads/${t}`])}catch{}try{await p(e,["push",s,`HEAD:refs/heads/${t}`])}catch{}if(r&&r!==t){c("pushing current branch %s to temp remote",r);try{await p(e,["push",s,`HEAD:refs/heads/${r}`])}catch{}}try{await p(e,["push",s,"--tags"])}catch{}return{remote:s,root:n}}function L(e,r){return e.some(t=>typeof t=="string"?t===r:t?.name===r)}function w(e){return e.replace(/[^0-9A-Za-z-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"prerelease"}function z(e,r){if(!e)return"";if(r){let s=r,i=0;for(let a of S)s=s.replace(a,()=>(i+=1,G));if(i===1){let[a,m]=s.split(G);if(e.startsWith(a)&&e.endsWith(m)){let _=m?e.length-m.length:e.length;if(_>=a.length){let l=e.slice(a.length,_),o=f.parse(l);if(o)return`${o.major}.${o.minor}.${o.patch}`}}}}let t=f.clean(e),n=f.parse(t||"");return n?`${n.major}.${n.minor}.${n.patch}`:""}async function J(e,r){try{let n=(await p(e,["tag","--list"])).split(`
2
+ `).map(s=>z(s.trim(),r)).filter(Boolean);if(n.length>0)return f.rsort([...new Set(n)])[0]}catch{}try{let t=y.join(e,"package.json"),n=await A.readFile(t,"utf8"),s=JSON.parse(n)?.version,i=f.parse(s);if(i)return`${i.major}.${i.minor}.${i.patch}`}catch{}throw new Error("semantic-release did not return a next version and no valid version was found in git tags or package.json.")}async function I(e,r){if(process.env.GITHUB_SHA)return process.env.GITHUB_SHA.slice(0,7);try{return await p(e,["rev-parse","--short","HEAD"])}catch{return r}}async function $({cwd:e=process.cwd(),config:r={},repositoryUrl:t,branches:n,tagFormat:s,plugins:i,release:a=!1,defaultBranch:m,mainBranch:_}={}){let l=m??_??D;c("start getNextVersion"),c("cwd=%s defaultBranch=%s release=%s",e,l,a),c("env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s",process.env.GITHUB_HEAD_REF,process.env.GITHUB_REF,process.env.GITHUB_REF_NAME),process.env.GITHUB_HEAD_REF&&process.env.GITHUB_REF?.startsWith("refs/pull/")&&(process.env.GITHUB_REF=`refs/heads/${process.env.GITHUB_HEAD_REF}`,process.env.GITHUB_REF_NAME=process.env.GITHUB_HEAD_REF);let o=await j(e)||l;if(c("currentBranch=%s",o),await C(e))throw new Error("Shallow git clone detected. This tool requires full git history and tags; use actions/checkout with fetch-depth: 0 (or run git fetch --unshallow --tags).");let v=t||r.repositoryUrl||(a?await k(e):".")||".",R="";if(!a&&v==="."||a&&M(v)&&!K())try{let{remote:E,root:H}=await P(e,o,l);v=E,R=H}catch(E){c("failed to create temp remote: %o",E)}let u={...V(l),...r,repositoryUrl:v,...s?{tagFormat:s}:{},...i?{plugins:i}:{}};c("loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s",u.branches,n,u.repositoryUrl);let g=n??u.branches,h=Array.isArray(g)?[...g]:g?[g]:[];c("branches before ensure current=%o",h),L(h,o)||h.push({name:o,prerelease:o!==l?w(o):!1}),c("final branches=%o",h);let T;try{T=await N({...u,branches:h,dryRun:!0,ci:!1,repositoryUrl:u.repositoryUrl},{cwd:e,env:{...process.env,GIT_NOTE_REF:"semantic-release-next-version-empty",GIT_NOTES_REF:"",GIT_NOTES_DISPLAY_REF:""},stdout:process.stderr,stderr:process.stderr})}finally{if(R)try{await A.rm(R,{recursive:!0,force:!0})}catch{}}if(!T){if(!a){let E=await J(e,u.tagFormat),H=await I(e,w(o||"preview"));return`${E}-preview-${H}`}throw new Error("semantic-release did not return a next version.")}let d=f.parse(T.nextRelease.version);if(!d)throw new Error(`Unable to parse semantic-release version: ${T.nextRelease.version}`);let U=`${d.major}.${d.minor}.${d.patch}`;if(a)return U;let F=await I(e,w(o||"preview"));return`${U}-preview-${F}`}var ne={getNextVersion:$};export{ne as default,$ as getNextVersion};
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/next-version.js", "../src/index.js"],
4
- "sourcesContent": ["// @ts-check\n\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport createDebug from 'debug'\nimport semanticRelease from 'semantic-release'\nimport semver from 'semver'\nimport { exec } from 'tinyexec'\n\nconst DEFAULT_MAIN_BRANCH = 'main'\nconst debug = createDebug('semantic-release-next-version')\nconst TOKEN_ENV_VARS = ['GITHUB_TOKEN', 'GH_TOKEN', 'GIT_TOKEN']\n\n/** @param {string} mainBranch */\nfunction buildDefaultOptions(mainBranch) {\n /** @type {import('semantic-release').Options} */\n return {\n repositoryUrl: '.',\n branches: [mainBranch, { name: '*', prerelease: true }],\n // eslint-disable-next-line no-template-curly-in-string\n tagFormat: '${version}',\n plugins: ['@semantic-release/commit-analyzer'],\n }\n}\n\n/**\n * @param {string} cwd\n * @param {string[]} args\n */\nasync function runGit(cwd, args) {\n const result = await exec('git', args, {\n nodeOptions: { cwd },\n throwOnError: true,\n })\n if (result.exitCode) {\n throw new Error(`git ${args.join(' ')} failed with code ${result.exitCode}`)\n }\n return result.stdout.trim()\n}\n\n/** @param {string} cwd */\nasync function getCurrentBranch(cwd) {\n if (process.env.GITHUB_HEAD_REF) return process.env.GITHUB_HEAD_REF\n if (process.env.GITHUB_REF_NAME) return process.env.GITHUB_REF_NAME\n try {\n return await runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function getRemoteOriginUrl(cwd) {\n try {\n return await runGit(cwd, ['config', '--get', 'remote.origin.url'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} url */\nfunction isGithubHttpUrl(url) {\n return /^https?:\\/\\/[^/]*github\\.com[:/]/i.test(url)\n}\n\nfunction hasGitToken() {\n return TOKEN_ENV_VARS.some((key) => process.env[key])\n}\n\n/**\n * @param {string} cwd\n * @param {string} currentBranch\n * @param {string} mainBranch\n */\nasync function createTempRemote(cwd, currentBranch, mainBranch) {\n const root = await fs.mkdtemp(path.join(os.tmpdir(), 'srnv-'))\n const remote = path.join(root, 'remote.git')\n\n await runGit(cwd, ['init', '--bare', remote])\n debug('created temp remote %s', remote)\n await runGit(cwd, [\n '--git-dir',\n remote,\n 'symbolic-ref',\n 'HEAD',\n `refs/heads/${mainBranch}`,\n ]).catch(() => {})\n await runGit(cwd, ['push', remote, `HEAD:refs/heads/${mainBranch}`]).catch(\n () => {}\n )\n if (currentBranch && currentBranch !== mainBranch) {\n debug('pushing current branch %s to temp remote', currentBranch)\n await runGit(cwd, [\n 'push',\n remote,\n `HEAD:refs/heads/${currentBranch}`,\n ]).catch(() => {})\n }\n await runGit(cwd, ['push', remote, '--tags']).catch(() => {})\n\n return { remote, root }\n}\n\n/**\n * @param {import('semantic-release').BranchSpec[]} branches\n * @param {string} branchName\n */\nfunction branchExists(branches, branchName) {\n return branches.some((entry) => {\n if (typeof entry === 'string') return entry === branchName\n return entry?.name === branchName\n })\n}\n\n/** @param {string} branchName */\nfunction toPrereleaseId(branchName) {\n const slug = branchName\n .replace(/[^0-9A-Za-z-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n return slug || 'prerelease'\n}\n\n/**\n * @param {string} cwd\n * @param {string} fallback\n */\nasync function resolveCommitHash(cwd, fallback) {\n if (process.env.GITHUB_SHA) return process.env.GITHUB_SHA.slice(0, 7)\n try {\n return await runGit(cwd, ['rev-parse', '--short', 'HEAD'])\n } catch {\n return fallback\n }\n}\n\n/**\n * Calculate the next semantic-release version without pushing tags or\n * publishing.\n *\n * @param {import('./index.js').GetNextVersionOptions} [options]\n * @returns {Promise<string>} Next release version.\n */\nexport async function getNextVersion({\n cwd = process.cwd(),\n config = {},\n repositoryUrl,\n branches: overrideBranches,\n tagFormat,\n plugins,\n release = false,\n mainBranch = DEFAULT_MAIN_BRANCH,\n} = {}) {\n debug('start getNextVersion')\n debug('cwd=%s mainBranch=%s release=%s', cwd, mainBranch, release)\n debug(\n 'env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s',\n process.env.GITHUB_HEAD_REF,\n process.env.GITHUB_REF,\n process.env.GITHUB_REF_NAME\n )\n if (\n process.env.GITHUB_HEAD_REF &&\n process.env.GITHUB_REF?.startsWith('refs/pull/')\n ) {\n // Force env-ci to treat the source branch as the release branch on PRs.\n process.env.GITHUB_REF = `refs/heads/${process.env.GITHUB_HEAD_REF}`\n process.env.GITHUB_REF_NAME = process.env.GITHUB_HEAD_REF\n }\n\n const currentBranch = (await getCurrentBranch(cwd)) || mainBranch\n debug('currentBranch=%s', currentBranch)\n\n let effectiveRepoUrl =\n repositoryUrl ||\n config.repositoryUrl ||\n (release ? await getRemoteOriginUrl(cwd) : '.') ||\n '.'\n let tempRemoteRoot = ''\n const needsLocalRemote =\n (!release && effectiveRepoUrl === '.') ||\n (release && isGithubHttpUrl(effectiveRepoUrl) && !hasGitToken())\n\n if (needsLocalRemote) {\n try {\n const { remote, root } = await createTempRemote(\n cwd,\n currentBranch,\n mainBranch\n )\n effectiveRepoUrl = remote\n tempRemoteRoot = root\n } catch (err) {\n debug('failed to create temp remote: %o', err)\n }\n }\n\n const loadedConfig = {\n ...buildDefaultOptions(mainBranch),\n ...config,\n repositoryUrl: effectiveRepoUrl,\n ...(tagFormat ? { tagFormat } : {}),\n ...(plugins ? { plugins } : {}),\n }\n debug(\n 'loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s',\n loadedConfig.branches,\n overrideBranches,\n loadedConfig.repositoryUrl\n )\n const baseBranches = overrideBranches ?? loadedConfig.branches\n const branches = Array.isArray(baseBranches)\n ? [...baseBranches]\n : baseBranches\n ? [baseBranches]\n : []\n debug('branches before ensure current=%o', branches)\n\n if (!branchExists(branches, currentBranch)) {\n branches.push({\n name: currentBranch,\n prerelease:\n currentBranch !== mainBranch ? toPrereleaseId(currentBranch) : false,\n })\n }\n debug('final branches=%o', branches)\n\n let result\n try {\n result = await semanticRelease(\n {\n ...loadedConfig,\n branches,\n dryRun: true,\n ci: false,\n repositoryUrl: loadedConfig.repositoryUrl,\n },\n {\n cwd,\n // Clear notes refs so stray git notes cannot break tag parsing.\n env: {\n ...process.env,\n GIT_NOTE_REF: 'semantic-release-next-version-empty',\n GIT_NOTES_REF: '',\n GIT_NOTES_DISPLAY_REF: '',\n },\n // Route semantic-release logs to stderr so CLI consumers can safely\n // capture stdout for the version string.\n stdout: process.stderr,\n stderr: process.stderr,\n }\n )\n } finally {\n if (tempRemoteRoot) {\n await fs\n .rm(tempRemoteRoot, { recursive: true, force: true })\n .catch(() => {})\n }\n }\n\n if (!result) {\n throw new Error('semantic-release did not return a next version.')\n }\n\n const parsed = semver.parse(result.nextRelease.version)\n if (!parsed) {\n throw new Error(\n `Unable to parse semantic-release version: ${result.nextRelease.version}`\n )\n }\n\n const baseVersion = `${parsed.major}.${parsed.minor}.${parsed.patch}`\n if (release) return baseVersion\n\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n\n return `${baseVersion}-preview-${commitHash}`\n}\n", "// @ts-check\n\nimport { getNextVersion } from './next-version.js'\n\nconst api = { getNextVersion }\n\nexport { getNextVersion }\nexport { api }\n\nexport default api\n"],
5
- "mappings": "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",
6
- "names": ["fs", "os", "path", "createDebug", "semanticRelease", "semver", "exec", "DEFAULT_MAIN_BRANCH", "debug", "TOKEN_ENV_VARS", "buildDefaultOptions", "mainBranch", "runGit", "cwd", "args", "result", "getCurrentBranch", "getRemoteOriginUrl", "isGithubHttpUrl", "url", "hasGitToken", "key", "createTempRemote", "currentBranch", "root", "remote", "branchExists", "branches", "branchName", "entry", "toPrereleaseId", "resolveCommitHash", "fallback", "getNextVersion", "config", "repositoryUrl", "overrideBranches", "tagFormat", "plugins", "release", "effectiveRepoUrl", "tempRemoteRoot", "err", "loadedConfig", "baseBranches", "parsed", "baseVersion", "commitHash", "api", "getNextVersion", "index_default", "api"]
4
+ "sourcesContent": ["// @ts-check\n\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport createDebug from 'debug'\nimport semanticRelease from 'semantic-release'\nimport semver from 'semver'\nimport { exec } from 'tinyexec'\n\nconst DEFAULT_BRANCH = 'main'\nconst debug = createDebug('semantic-release-next-version')\nconst TOKEN_ENV_VARS = ['GITHUB_TOKEN', 'GH_TOKEN', 'GIT_TOKEN']\nconst TAG_FORMAT_VERSION_MARKER = '__srnv_version_marker__'\nconst TAG_FORMAT_VERSION_PATTERNS = [\n /\\$\\{\\s*version\\s*\\}/g,\n /<%=\\s*version\\s*%>/g,\n]\n\n/** @param {string} defaultBranch */\nfunction buildDefaultOptions(defaultBranch) {\n /** @type {import('semantic-release').Options} */\n return {\n repositoryUrl: '.',\n branches: [defaultBranch, { name: '*', prerelease: true }],\n // eslint-disable-next-line no-template-curly-in-string\n tagFormat: '${version}',\n plugins: ['@semantic-release/commit-analyzer'],\n }\n}\n\n/**\n * @param {string} cwd\n * @param {string[]} args\n */\nasync function runGit(cwd, args) {\n const result = await exec('git', args, {\n nodeOptions: { cwd },\n throwOnError: true,\n })\n if (result.exitCode) {\n throw new Error(`git ${args.join(' ')} failed with code ${result.exitCode}`)\n }\n return result.stdout.trim()\n}\n\n/** @param {string} cwd */\nasync function getCurrentBranch(cwd) {\n if (process.env.GITHUB_HEAD_REF) return process.env.GITHUB_HEAD_REF\n if (process.env.GITHUB_REF_NAME) return process.env.GITHUB_REF_NAME\n try {\n return await runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function getRemoteOriginUrl(cwd) {\n try {\n return await runGit(cwd, ['config', '--get', 'remote.origin.url'])\n } catch {\n return ''\n }\n}\n\n/** @param {string} cwd */\nasync function isShallowRepository(cwd) {\n try {\n return (\n (await runGit(cwd, ['rev-parse', '--is-shallow-repository'])) === 'true'\n )\n } catch {\n return false\n }\n}\n\n/** @param {string} url */\nfunction isGithubHttpUrl(url) {\n return /^https?:\\/\\/[^/]*github\\.com[:/]/i.test(url)\n}\n\nfunction hasGitToken() {\n return TOKEN_ENV_VARS.some((key) => process.env[key])\n}\n\n/**\n * @param {string} cwd\n * @param {string} currentBranch\n * @param {string} defaultBranch\n */\nasync function createTempRemote(cwd, currentBranch, defaultBranch) {\n const root = await fs.mkdtemp(path.join(os.tmpdir(), 'srnv-'))\n const remote = path.join(root, 'remote.git')\n\n await runGit(cwd, ['init', '--bare', remote])\n debug('created temp remote %s', remote)\n try {\n await runGit(cwd, [\n '--git-dir',\n remote,\n 'symbolic-ref',\n 'HEAD',\n `refs/heads/${defaultBranch}`,\n ])\n } catch {}\n try {\n await runGit(cwd, ['push', remote, `HEAD:refs/heads/${defaultBranch}`])\n } catch {}\n if (currentBranch && currentBranch !== defaultBranch) {\n debug('pushing current branch %s to temp remote', currentBranch)\n try {\n await runGit(cwd, ['push', remote, `HEAD:refs/heads/${currentBranch}`])\n } catch {}\n }\n try {\n await runGit(cwd, ['push', remote, '--tags'])\n } catch {}\n\n return { remote, root }\n}\n\n/**\n * @param {import('semantic-release').BranchSpec[]} branches\n * @param {string} branchName\n */\nfunction branchExists(branches, branchName) {\n return branches.some((entry) => {\n if (typeof entry === 'string') return entry === branchName\n return entry?.name === branchName\n })\n}\n\n/** @param {string} branchName */\nfunction toPrereleaseId(branchName) {\n const slug = branchName\n .replace(/[^0-9A-Za-z-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n return slug || 'prerelease'\n}\n\n/**\n * @param {string} tag\n * @param {string} tagFormat\n */\nfunction parseVersionFromTag(tag, tagFormat) {\n if (!tag) return ''\n\n if (tagFormat) {\n let normalizedTagFormat = tagFormat\n let replacements = 0\n for (const pattern of TAG_FORMAT_VERSION_PATTERNS) {\n normalizedTagFormat = normalizedTagFormat.replace(pattern, () => {\n replacements += 1\n return TAG_FORMAT_VERSION_MARKER\n })\n }\n\n if (replacements === 1) {\n const [prefix, suffix] = normalizedTagFormat.split(\n TAG_FORMAT_VERSION_MARKER\n )\n if (tag.startsWith(prefix) && tag.endsWith(suffix)) {\n const endIndex = suffix ? tag.length - suffix.length : tag.length\n if (endIndex >= prefix.length) {\n const versionSegment = tag.slice(prefix.length, endIndex)\n const parsed = semver.parse(versionSegment)\n if (parsed) return `${parsed.major}.${parsed.minor}.${parsed.patch}`\n }\n }\n }\n }\n\n const cleaned = semver.clean(tag)\n const parsed = semver.parse(cleaned || '')\n if (!parsed) return ''\n return `${parsed.major}.${parsed.minor}.${parsed.patch}`\n}\n\n/**\n * @param {string} cwd\n * @param {string} tagFormat\n */\nasync function resolveCurrentBaseVersion(cwd, tagFormat) {\n try {\n const rawTags = await runGit(cwd, ['tag', '--list'])\n const versions = rawTags\n .split('\\n')\n .map((tag) => parseVersionFromTag(tag.trim(), tagFormat))\n .filter(Boolean)\n if (versions.length > 0) {\n return semver.rsort([...new Set(versions)])[0]\n }\n } catch {}\n\n try {\n const packageJsonPath = path.join(cwd, 'package.json')\n const rawPackageJson = await fs.readFile(packageJsonPath, 'utf8')\n const packageVersion = JSON.parse(rawPackageJson)?.version\n const parsed = semver.parse(packageVersion)\n if (parsed) return `${parsed.major}.${parsed.minor}.${parsed.patch}`\n } catch {}\n\n throw new Error(\n 'semantic-release did not return a next version and no valid version was found in git tags or package.json.'\n )\n}\n\n/**\n * @param {string} cwd\n * @param {string} fallback\n */\nasync function resolveCommitHash(cwd, fallback) {\n if (process.env.GITHUB_SHA) return process.env.GITHUB_SHA.slice(0, 7)\n try {\n return await runGit(cwd, ['rev-parse', '--short', 'HEAD'])\n } catch {\n return fallback\n }\n}\n\n/**\n * Calculate the next semantic-release version without pushing tags or\n * publishing.\n *\n * @param {import('./index.js').GetNextVersionOptions} [options]\n * @returns {Promise<string>} Next release version.\n */\nexport async function getNextVersion({\n cwd = process.cwd(),\n config = {},\n repositoryUrl,\n branches: overrideBranches,\n tagFormat,\n plugins,\n release = false,\n defaultBranch,\n mainBranch,\n} = {}) {\n const resolvedDefaultBranch = defaultBranch ?? mainBranch ?? DEFAULT_BRANCH\n debug('start getNextVersion')\n debug(\n 'cwd=%s defaultBranch=%s release=%s',\n cwd,\n resolvedDefaultBranch,\n release\n )\n debug(\n 'env GITHUB_HEAD_REF=%s GITHUB_REF=%s GITHUB_REF_NAME=%s',\n process.env.GITHUB_HEAD_REF,\n process.env.GITHUB_REF,\n process.env.GITHUB_REF_NAME\n )\n if (\n process.env.GITHUB_HEAD_REF &&\n process.env.GITHUB_REF?.startsWith('refs/pull/')\n ) {\n // Force env-ci to treat the source branch as the release branch on PRs.\n process.env.GITHUB_REF = `refs/heads/${process.env.GITHUB_HEAD_REF}`\n process.env.GITHUB_REF_NAME = process.env.GITHUB_HEAD_REF\n }\n\n const currentBranch = (await getCurrentBranch(cwd)) || resolvedDefaultBranch\n debug('currentBranch=%s', currentBranch)\n\n if (await isShallowRepository(cwd)) {\n throw new Error(\n 'Shallow git clone detected. This tool requires full git history and tags; use actions/checkout with fetch-depth: 0 (or run git fetch --unshallow --tags).'\n )\n }\n\n let effectiveRepoUrl =\n repositoryUrl ||\n config.repositoryUrl ||\n (release ? await getRemoteOriginUrl(cwd) : '.') ||\n '.'\n let tempRemoteRoot = ''\n const needsLocalRemote =\n (!release && effectiveRepoUrl === '.') ||\n (release && isGithubHttpUrl(effectiveRepoUrl) && !hasGitToken())\n\n if (needsLocalRemote) {\n try {\n const { remote, root } = await createTempRemote(\n cwd,\n currentBranch,\n resolvedDefaultBranch\n )\n effectiveRepoUrl = remote\n tempRemoteRoot = root\n } catch (err) {\n debug('failed to create temp remote: %o', err)\n }\n }\n\n /** @type {import('semantic-release').Options} */\n const loadedConfig = {\n ...buildDefaultOptions(resolvedDefaultBranch),\n ...config,\n repositoryUrl: effectiveRepoUrl,\n ...(tagFormat ? { tagFormat } : {}),\n ...(plugins ? { plugins } : {}),\n }\n debug(\n 'loadedConfig.branches=%o overrideBranches=%o repositoryUrl=%s',\n loadedConfig.branches,\n overrideBranches,\n loadedConfig.repositoryUrl\n )\n const baseBranches = overrideBranches ?? loadedConfig.branches\n const branches = Array.isArray(baseBranches)\n ? [...baseBranches]\n : baseBranches\n ? [baseBranches]\n : []\n debug('branches before ensure current=%o', branches)\n\n if (!branchExists(branches, currentBranch)) {\n branches.push({\n name: currentBranch,\n prerelease:\n currentBranch !== resolvedDefaultBranch\n ? toPrereleaseId(currentBranch)\n : false,\n })\n }\n debug('final branches=%o', branches)\n\n let result\n try {\n result = await semanticRelease(\n {\n ...loadedConfig,\n branches,\n dryRun: true,\n ci: false,\n repositoryUrl: loadedConfig.repositoryUrl,\n },\n {\n cwd,\n // Clear notes refs so stray git notes cannot break tag parsing.\n env: {\n ...process.env,\n GIT_NOTE_REF: 'semantic-release-next-version-empty',\n GIT_NOTES_REF: '',\n GIT_NOTES_DISPLAY_REF: '',\n },\n // Route semantic-release logs to stderr so CLI consumers can safely\n // capture stdout for the version string.\n stdout: process.stderr,\n stderr: process.stderr,\n }\n )\n } finally {\n if (tempRemoteRoot) {\n try {\n await fs.rm(tempRemoteRoot, { recursive: true, force: true })\n } catch {}\n }\n }\n\n if (!result) {\n if (!release) {\n const baseVersion = await resolveCurrentBaseVersion(\n cwd,\n loadedConfig.tagFormat\n )\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n return `${baseVersion}-preview-${commitHash}`\n }\n throw new Error('semantic-release did not return a next version.')\n }\n\n const parsed = semver.parse(result.nextRelease.version)\n if (!parsed) {\n throw new Error(\n `Unable to parse semantic-release version: ${result.nextRelease.version}`\n )\n }\n\n const baseVersion = `${parsed.major}.${parsed.minor}.${parsed.patch}`\n if (release) return baseVersion\n\n const commitHash = await resolveCommitHash(\n cwd,\n toPrereleaseId(currentBranch || 'preview')\n )\n\n return `${baseVersion}-preview-${commitHash}`\n}\n", "// @ts-check\n\nimport { getNextVersion } from './next-version.js'\n\nexport { getNextVersion }\nexport default { getNextVersion }\n"],
5
+ "mappings": "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",
6
+ "names": ["fs", "os", "path", "createDebug", "semanticRelease", "semver", "exec", "DEFAULT_BRANCH", "debug", "TOKEN_ENV_VARS", "TAG_FORMAT_VERSION_MARKER", "TAG_FORMAT_VERSION_PATTERNS", "buildDefaultOptions", "defaultBranch", "runGit", "cwd", "args", "result", "getCurrentBranch", "getRemoteOriginUrl", "isShallowRepository", "isGithubHttpUrl", "url", "hasGitToken", "key", "createTempRemote", "currentBranch", "root", "remote", "branchExists", "branches", "branchName", "entry", "toPrereleaseId", "parseVersionFromTag", "tag", "tagFormat", "normalizedTagFormat", "replacements", "pattern", "prefix", "suffix", "endIndex", "versionSegment", "parsed", "cleaned", "resolveCurrentBaseVersion", "versions", "packageJsonPath", "rawPackageJson", "packageVersion", "resolveCommitHash", "fallback", "getNextVersion", "config", "repositoryUrl", "overrideBranches", "plugins", "release", "mainBranch", "resolvedDefaultBranch", "effectiveRepoUrl", "tempRemoteRoot", "err", "loadedConfig", "baseBranches", "baseVersion", "commitHash", "index_default", "getNextVersion"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semantic-release-next-version",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Compute the next semantic-release version in dry-run mode for CI and local packaging, without pushing tags or needing tokens",
5
5
  "keywords": [
6
6
  "actions",
@@ -44,7 +44,7 @@
44
44
  "scripts": {
45
45
  "prebuild": "rimraf dist",
46
46
  "build": "npm run build:lib && npm run build:cli && npm run build:types",
47
- "build:cli": "esbuild src/cli.js --bundle --platform=node --target=node22 --format=esm --minify --sourcemap --external:semantic-release --banner:js=\"import { createRequire as __createRequire } from 'module'; const require = __createRequire(import.meta.url);\" --outfile=dist/cli.js",
47
+ "build:cli": "esbuild src/cli.js --bundle --platform=node --target=node22 --format=esm --minify --sourcemap --external:semantic-release --banner:js=\"import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);\" --outfile=dist/cli.js",
48
48
  "build:lib": "npm run build:lib:cjs && npm run build:lib:esm",
49
49
  "build:lib:cjs": "esbuild src/index.js --bundle --packages=external --platform=node --target=node22 --format=cjs --minify --sourcemap --outfile=dist/index.cjs",
50
50
  "build:lib:esm": "esbuild src/index.js --bundle --packages=external --platform=node --target=node22 --format=esm --minify --sourcemap --outfile=dist/index.js",