@tarsilla/commit-wizard 1.4.7 → 1.4.8

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.
@@ -1,2 +1,2 @@
1
- import e from"crypto";import t from"fs";import{Octokit as a}from"@octokit/rest";import{analyzeCommits as r}from"@semantic-release/commit-analyzer";import{prepare as s,verifyConditions as o}from"@semantic-release/git";import{generateNotes as n}from"@semantic-release/release-notes-generator";const i={preset:"conventionalcommits",parserOpts:{headerPattern:RegExp("^(?<type>\\w+)(?<exclamation1>!?)(?:\\((?<scope>[^)]+)\\)(?<exclamation2>!?))?: (?<subject>.+)$"),headerCorrespondence:["type","exclamation1","scope","exclamation2","subject"]},releaseRules:[{type:"feat",exclamation1:"!",release:"major"},{type:"feat",exclamation2:"!",release:"major"},{type:"feat",release:"minor"},{type:"fix",release:"patch"},{type:"docs",release:"patch"},{type:"style",release:"patch"},{type:"refactor",release:"patch"},{type:"perf",release:"patch"},{type:"test",release:"patch"},{type:"build",release:"patch"},{type:"ci",release:"patch"},{type:"chore",release:"patch"},{type:"revert",release:"patch"}]};let c=!1;function l(e,t){const a=new URL(t).pathname,r=(a.startsWith("/")?a.slice(1):a).split("/").pop();return e.tap??`${r}.rb`}async function p(a,r){const{nextRelease:s,logger:o,options:n}=r;if(!s?.version)throw new Error("Next release version is not available.");const i=`v${s.version}`,c=n.repositoryUrl,p=new URL(c).pathname,m=`https://codeload.github.com/${p.startsWith("/")?p.slice(1):p}/tar.gz/refs/tags/${i}`,f=await async function(t,a){const{logger:r}=a;r.log(`Calculating SHA256 for URL: ${t}`);const s=await fetch(t);if(!s.ok)throw new Error(`Failed to fetch file. Status Code: ${s.status}`);if(!s.body)throw new Error("Response body is null.");const o=e.createHash("sha256"),n=s.body.getReader();return new Promise(((e,t)=>{!function a(){n.read().then((({done:t,value:r})=>{t?e(o.digest("hex")):(r&&o.update(r),a())})).catch(t)}()}))}(m,r),h=l(a,c);let y=t.readFileSync(h,"utf8");y=y.replace(/url ".*"/,`url "${m}"`),y=y.replace(/sha256 ".*"/,`sha256 "${f}"`),t.writeFileSync(h,y),o.log(`Updated formula with version ${i}, URL ${m}, and SHA256 ${f}`)}async function m(e,t){if(o){const{options:a}=t,r=l(e,a.repositoryUrl);await o({assets:[r],message:"chore(release): ${nextRelease.version}"},t)}c=!0}const f={addChannel:async function(e,t){},verifyConditions:m,analyzeCommits:async function(e,t){return c||(await m(e,t),c=!0),r(i,t)},generateNotes:async function(e,t){return c||(await m(e,t),c=!0),n({},t)},prepare:async function(e,t){if(c||(await m(e,t),c=!0),s){const{options:r}=t,o=l(e,r.repositoryUrl);await async function(e,t){if(!process.env.GITHUB_TOKEN)throw new Error("GITHUB_TOKEN is not set in the environment.");const{nextRelease:r,logger:s,options:o}=t,n=`v${r.version}`,i=o.repositoryUrl,[c,l]=new URL(i).pathname.slice(1).split("/");s.log(`Creating tag ${n} using GitHub API...`);const p=new a({auth:process.env.GITHUB_TOKEN});try{const e=o.branch??"main";s.log(`Branch name: ${e}`);const{data:t}=await p.repos.getBranch({owner:c,repo:l,branch:e}),a=t.commit.sha;s.log(`Latest commit SHA: ${a}`),s.log(`Creating tag object for ${n}...`),await p.git.createTag({owner:c,repo:l,tag:n,message:`Release ${n}`,object:a,type:"commit"}),s.log(`Creating reference for tag ${n}...`),await p.git.createRef({owner:c,repo:l,ref:`refs/tags/${n}`,sha:a}),s.log(`Tag ${n} created successfully.`)}catch(e){throw s.error(`Failed to create tag ${n}: ${e.message}`),e}}(0,t),await p(e,t),await s({assets:[o],message:"chore(release): ${nextRelease.version}"},t)}},publish:async function(e,t){return null},success:async function(e,t){},fail:async function(e,t){}};export{f as default};
1
+ import e from"crypto";import t from"fs";import{Octokit as a}from"@octokit/rest";import{analyzeCommits as r}from"@semantic-release/commit-analyzer";import{generateNotes as o}from"@semantic-release/release-notes-generator";const n={preset:"conventionalcommits",parserOpts:{headerPattern:RegExp("^(?<type>\\w+)(?<exclamation1>!?)(?:\\((?<scope>[^)]+)\\)(?<exclamation2>!?))?: (?<subject>.+)$"),headerCorrespondence:["type","exclamation1","scope","exclamation2","subject"]},releaseRules:[{type:"feat",exclamation1:"!",release:"major"},{type:"feat",exclamation2:"!",release:"major"},{type:"feat",release:"minor"},{type:"fix",release:"patch"},{type:"docs",release:"patch"},{type:"style",release:"patch"},{type:"refactor",release:"patch"},{type:"perf",release:"patch"},{type:"test",release:"patch"},{type:"build",release:"patch"},{type:"ci",release:"patch"},{type:"chore",release:"patch"},{type:"revert",release:"patch"}]};let s=!1;function i(e,t){const a=new URL(t).pathname,r=(a.startsWith("/")?a.slice(1):a).split("/").pop();return e.tap??`${r}.rb`}async function c(a,r){const{nextRelease:o,logger:n,options:s}=r;if(!o?.version)throw new Error("Next release version is not available.");const c=`v${o.version}`,l=s.repositoryUrl,p=new URL(l).pathname,h=`https://codeload.github.com/${p.startsWith("/")?p.slice(1):p}/tar.gz/refs/tags/${c}`,m=await async function(t,a){const{logger:r}=a;r.log(`Calculating SHA256 for URL: ${t}`);const o=await fetch(t);if(!o.ok)throw new Error(`Failed to fetch file. Status Code: ${o.status}`);if(!o.body)throw new Error("Response body is null.");const n=e.createHash("sha256"),s=o.body.getReader();return new Promise(((e,t)=>{!function a(){s.read().then((({done:t,value:r})=>{t?e(n.digest("hex")):(r&&n.update(r),a())})).catch(t)}()}))}(h,r),f=i(a,l);let u=t.readFileSync(f,"utf8");u=u.replace(/url ".*"/,`url "${h}"`),u=u.replace(/sha256 ".*"/,`sha256 "${m}"`),t.writeFileSync(f,u),n.log(`Updated formula with version ${c}, URL ${h}, and SHA256 ${m}`)}async function l(e,t){s=!0}const p={addChannel:async function(e,t){},verifyConditions:l,analyzeCommits:async function(e,t){return s||(await l(),s=!0),r(n,t)},generateNotes:async function(e,t){return s||(await l(),s=!0),o({},t)},prepare:async function(e,t){},publish:async function(e,r){return s||(await l(),s=!0),await c(e,r),await async function(e,r){if(!process.env.GITHUB_TOKEN)throw new Error("GITHUB_TOKEN is not set in the environment.");const{nextRelease:o,logger:n,options:s}=r,c=s.repositoryUrl,[l,p]=new URL(c).pathname.slice(1).split("/"),h=i(e,c),m=s.branch??"main";n.log(`Committing updated formula file ${h} to branch ${m}...`);const f=new a({auth:process.env.GITHUB_TOKEN});try{const{data:e}=await f.repos.getBranch({owner:l,repo:p,branch:m}),a=e.commit.sha,r=e.commit.commit.tree.sha;n.log(`Latest commit SHA: ${a}`),n.log(`Base tree SHA: ${r}`);const s=t.readFileSync(h,"utf8"),{data:i}=await f.git.createBlob({owner:l,repo:p,content:s,encoding:"utf-8"});n.log(`Created blob for ${h} with SHA: ${i.sha}`);const{data:c}=await f.git.createTree({owner:l,repo:p,base_tree:r,tree:[{path:h,mode:"100644",type:"blob",sha:i.sha}]});n.log(`Created new tree with SHA: ${c.sha}`);const u=`chore(release): ${o.version}`,{data:d}=await f.git.createCommit({owner:l,repo:p,message:u,tree:c.sha,parents:[a]});n.log(`Created new commit with SHA: ${d.sha}`),await f.git.updateRef({owner:l,repo:p,ref:`heads/${m}`,sha:d.sha}),n.log(`Branch ${m} updated to commit ${d.sha}`)}catch(e){throw n.error(`Failed to commit formula file: ${e.message}`),e}}(e,r),null},success:async function(e,t){},fail:async function(e,t){}};export{p as default};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/semantic-release/brew/index.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\n\nimport { Octokit } from '@octokit/rest';\n//@ts-ignore\nimport { analyzeCommits as commitAnalyzerAnalyzeCommits } from '@semantic-release/commit-analyzer';\nimport {\n prepare as gitPrepare,\n verifyConditions as gitVerifyConditions,\n //@ts-ignore\n} from '@semantic-release/git';\n//@ts-ignore\nimport { generateNotes as notesGeneratorGenerateNotes } from '@semantic-release/release-notes-generator';\nimport {\n AddChannelContext,\n AnalyzeCommitsContext,\n FailContext,\n GenerateNotesContext,\n PrepareContext,\n PublishContext,\n SuccessContext,\n VerifyConditionsContext,\n} from 'semantic-release';\n\nimport { SemanticReleasePlugin } from '../types.js';\n\nconst analyzerConfig = {\n preset: 'conventionalcommits',\n parserOpts: {\n headerPattern: /^(?<type>\\w+)(?<exclamation1>!?)(?:\\((?<scope>[^)]+)\\)(?<exclamation2>!?))?: (?<subject>.+)$/,\n headerCorrespondence: ['type', 'exclamation1', 'scope', 'exclamation2', 'subject'],\n },\n releaseRules: [\n { type: 'feat', exclamation1: '!', release: 'major' },\n { type: 'feat', exclamation2: '!', release: 'major' },\n { type: 'feat', release: 'minor' },\n { type: 'fix', release: 'patch' },\n { type: 'docs', release: 'patch' },\n { type: 'style', release: 'patch' },\n { type: 'refactor', release: 'patch' },\n { type: 'perf', release: 'patch' },\n { type: 'test', release: 'patch' },\n { type: 'build', release: 'patch' },\n { type: 'ci', release: 'patch' },\n { type: 'chore', release: 'patch' },\n { type: 'revert', release: 'patch' },\n ],\n};\n\ntype PluginConfig = { tap?: string };\n\nlet verified = false;\n\nasync function createTag(_pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {\n if (!process.env.GITHUB_TOKEN) {\n throw new Error('GITHUB_TOKEN is not set in the environment.');\n }\n\n const { nextRelease, logger, options } = context;\n\n const tagName = `v${nextRelease.version}`;\n\n const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release\n const [owner, repo] = new URL(repositoryUrl).pathname.slice(1).split('/');\n\n logger.log(`Creating tag ${tagName} using GitHub API...`);\n\n const octokit = new Octokit({\n auth: process.env.GITHUB_TOKEN, // Ensure GITHUB_TOKEN is available in the environment\n });\n\n try {\n const branchName = options.branch ?? 'main';\n logger.log(`Branch name: ${branchName}`);\n\n // Get the latest commit SHA from the default branch\n const { data: branch } = await octokit.repos.getBranch({\n owner,\n repo,\n branch: branchName,\n });\n\n const commitSha = branch.commit.sha;\n logger.log(`Latest commit SHA: ${commitSha}`);\n\n // Create the tag object\n logger.log(`Creating tag object for ${tagName}...`);\n await octokit.git.createTag({\n owner,\n repo,\n tag: tagName,\n message: `Release ${tagName}`,\n object: commitSha,\n type: 'commit',\n });\n\n // Create the reference for the tag\n logger.log(`Creating reference for tag ${tagName}...`);\n await octokit.git.createRef({\n owner,\n repo,\n ref: `refs/tags/${tagName}`,\n sha: commitSha,\n });\n\n logger.log(`Tag ${tagName} created successfully.`);\n } catch (error) {\n logger.error(`Failed to create tag ${tagName}: ${(error as Error).message}`);\n throw error;\n }\n}\n\nasync function calculateSha256(url: string, context: PrepareContext): Promise<string> {\n const { logger } = context;\n\n logger.log(`Calculating SHA256 for URL: ${url}`);\n\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch file. Status Code: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null.');\n }\n\n const hash = crypto.createHash('sha256');\n const reader = response.body.getReader();\n\n return new Promise((resolve, reject) => {\n function read() {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n resolve(hash.digest('hex'));\n return;\n }\n if (value) {\n hash.update(value);\n }\n read();\n })\n .catch(reject);\n }\n read();\n });\n}\n\nfunction getFormulaFile(pluginConfig: PluginConfig, repositoryUrl: string): string {\n const url = new URL(repositoryUrl);\n const repositoryPath = url.pathname;\n const repository = repositoryPath.startsWith('/') ? repositoryPath.slice(1) : repositoryPath;\n const project = repository.split('/').pop();\n\n return pluginConfig.tap ?? `${project}.rb`;\n}\n\nasync function updateFormulaFile(pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {\n const { nextRelease, logger, options } = context;\n\n if (!nextRelease?.version) {\n throw new Error('Next release version is not available.');\n }\n\n const tagName = `v${nextRelease.version}`;\n\n const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release\n const url = new URL(repositoryUrl);\n const repositoryPath = url.pathname;\n const repository = repositoryPath.startsWith('/') ? repositoryPath.slice(1) : repositoryPath;\n\n const tarUrl = `https://codeload.github.com/${repository}/tar.gz/refs/tags/${tagName}`;\n const sha256 = await calculateSha256(tarUrl, context);\n const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);\n\n let formulaContent = fs.readFileSync(formulaFile, 'utf8');\n formulaContent = formulaContent.replace(/url \".*\"/, `url \"${tarUrl}\"`);\n formulaContent = formulaContent.replace(/sha256 \".*\"/, `sha256 \"${sha256}\"`);\n fs.writeFileSync(formulaFile, formulaContent);\n\n logger.log(`Updated formula with version ${tagName}, URL ${tarUrl}, and SHA256 ${sha256}`);\n}\n\nasync function addChannel(_pluginConfig: PluginConfig, _context: AddChannelContext): Promise<void> {\n //do nothing\n}\n\nasync function analyzeCommits(pluginConfig: PluginConfig, context: AnalyzeCommitsContext): Promise<string | false> {\n if (!verified) {\n await verifyConditions(pluginConfig, context);\n verified = true;\n }\n\n return commitAnalyzerAnalyzeCommits(analyzerConfig, context);\n}\n\nasync function fail(_pluginConfig: PluginConfig, _context: FailContext): Promise<void> {\n //do nothing\n}\n\nasync function generateNotes(pluginConfig: PluginConfig, context: GenerateNotesContext): Promise<string> {\n if (!verified) {\n await verifyConditions(pluginConfig, context);\n verified = true;\n }\n\n return notesGeneratorGenerateNotes({}, context);\n}\n\nasync function prepare(pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {\n if (!verified) {\n await verifyConditions(pluginConfig, context);\n verified = true;\n }\n\n if (gitPrepare) {\n const { options } = context;\n const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release\n const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);\n\n await createTag(pluginConfig, context);\n\n await updateFormulaFile(pluginConfig, context);\n\n await gitPrepare(\n {\n assets: [formulaFile],\n message: 'chore(release): ${nextRelease.version}',\n },\n context,\n );\n }\n}\n\nasync function publish(_pluginConfig: PluginConfig, _context: PublishContext): Promise<unknown> {\n //do nothing\n return null;\n}\n\nasync function success(_pluginConfig: PluginConfig, _context: SuccessContext): Promise<void> {\n //do nothing\n}\n\nasync function verifyConditions(pluginConfig: PluginConfig, context: VerifyConditionsContext): Promise<void> {\n if (gitVerifyConditions) {\n const { options } = context;\n const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release\n const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);\n await gitVerifyConditions(\n {\n assets: [formulaFile],\n message: 'chore(release): ${nextRelease.version}',\n },\n context,\n );\n }\n verified = true;\n}\n\nconst plugin: SemanticReleasePlugin<{ tap: string }> = {\n addChannel,\n verifyConditions,\n analyzeCommits,\n generateNotes,\n prepare,\n publish,\n success,\n fail,\n};\n\nexport default plugin;\n"],"names":["analyzerConfig","preset","parserOpts","headerPattern","RegExp","headerCorrespondence","releaseRules","type","exclamation1","release","exclamation2","verified","getFormulaFile","pluginConfig","repositoryUrl","repositoryPath","URL","pathname","project","startsWith","slice","split","pop","tap","async","updateFormulaFile","context","nextRelease","logger","options","version","Error","tagName","tarUrl","sha256","url","log","response","fetch","ok","status","body","hash","crypto","createHash","reader","getReader","Promise","resolve","reject","read","then","done","value","digest","update","catch","calculateSha256","formulaFile","formulaContent","fs","readFileSync","replace","writeFileSync","verifyConditions","gitVerifyConditions","assets","message","plugin","addChannel","_pluginConfig","_context","analyzeCommits","commitAnalyzerAnalyzeCommits","generateNotes","notesGeneratorGenerateNotes","prepare","gitPrepare","process","env","GITHUB_TOKEN","owner","repo","octokit","Octokit","auth","branchName","branch","data","repos","getBranch","commitSha","commit","sha","git","createTag","tag","object","createRef","ref","error","publish","success","fail"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/semantic-release/brew/index.ts"],"sourcesContent":["import crypto from 'crypto';\nimport fs from 'fs';\n\nimport { Octokit } from '@octokit/rest';\n//@ts-ignore\nimport { analyzeCommits as commitAnalyzerAnalyzeCommits } from '@semantic-release/commit-analyzer';\n//@ts-ignore\nimport { generateNotes as notesGeneratorGenerateNotes } from '@semantic-release/release-notes-generator';\nimport {\n AddChannelContext,\n AnalyzeCommitsContext,\n FailContext,\n GenerateNotesContext,\n PrepareContext,\n PublishContext,\n SuccessContext,\n VerifyConditionsContext,\n} from 'semantic-release';\n\nimport { SemanticReleasePlugin } from '../types.js';\n\nconst analyzerConfig = {\n preset: 'conventionalcommits',\n parserOpts: {\n headerPattern: /^(?<type>\\w+)(?<exclamation1>!?)(?:\\((?<scope>[^)]+)\\)(?<exclamation2>!?))?: (?<subject>.+)$/,\n headerCorrespondence: ['type', 'exclamation1', 'scope', 'exclamation2', 'subject'],\n },\n releaseRules: [\n { type: 'feat', exclamation1: '!', release: 'major' },\n { type: 'feat', exclamation2: '!', release: 'major' },\n { type: 'feat', release: 'minor' },\n { type: 'fix', release: 'patch' },\n { type: 'docs', release: 'patch' },\n { type: 'style', release: 'patch' },\n { type: 'refactor', release: 'patch' },\n { type: 'perf', release: 'patch' },\n { type: 'test', release: 'patch' },\n { type: 'build', release: 'patch' },\n { type: 'ci', release: 'patch' },\n { type: 'chore', release: 'patch' },\n { type: 'revert', release: 'patch' },\n ],\n};\n\ntype PluginConfig = { tap?: string };\n\nlet verified = false;\n\nfunction getFormulaFile(pluginConfig: PluginConfig, repositoryUrl: string): string {\n const url = new URL(repositoryUrl);\n const repositoryPath = url.pathname;\n const repository = repositoryPath.startsWith('/') ? repositoryPath.slice(1) : repositoryPath;\n const project = repository.split('/').pop();\n\n return pluginConfig.tap ?? `${project}.rb`;\n}\n\nasync function commitFormulaFile(pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {\n if (!process.env.GITHUB_TOKEN) {\n throw new Error('GITHUB_TOKEN is not set in the environment.');\n }\n\n const { nextRelease, logger, options } = context;\n\n const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release\n const [owner, repo] = new URL(repositoryUrl).pathname.slice(1).split('/');\n\n const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);\n const branchName = options.branch ?? 'main';\n\n logger.log(`Committing updated formula file ${formulaFile} to branch ${branchName}...`);\n\n const octokit = new Octokit({\n auth: process.env.GITHUB_TOKEN,\n });\n\n try {\n // Get the latest commit SHA and tree SHA from the branch\n const { data: branch } = await octokit.repos.getBranch({\n owner,\n repo,\n branch: branchName,\n });\n\n const latestCommitSha = branch.commit.sha;\n const baseTreeSha = branch.commit.commit.tree.sha;\n\n logger.log(`Latest commit SHA: ${latestCommitSha}`);\n logger.log(`Base tree SHA: ${baseTreeSha}`);\n\n // Read the updated formula file content\n const formulaContent = fs.readFileSync(formulaFile, 'utf8');\n\n // Create a new blob for the updated formula file\n const { data: blob } = await octokit.git.createBlob({\n owner,\n repo,\n content: formulaContent,\n encoding: 'utf-8',\n });\n\n logger.log(`Created blob for ${formulaFile} with SHA: ${blob.sha}`);\n\n // Create a new tree with the updated formula file\n const { data: newTree } = await octokit.git.createTree({\n owner,\n repo,\n base_tree: baseTreeSha,\n tree: [\n {\n path: formulaFile,\n mode: '100644',\n type: 'blob',\n sha: blob.sha,\n },\n ],\n });\n\n logger.log(`Created new tree with SHA: ${newTree.sha}`);\n\n // Create a new commit with the updated tree\n const commitMessage = `chore(release): ${nextRelease.version}`;\n const { data: newCommit } = await octokit.git.createCommit({\n owner,\n repo,\n message: commitMessage,\n tree: newTree.sha,\n parents: [latestCommitSha],\n });\n\n logger.log(`Created new commit with SHA: ${newCommit.sha}`);\n\n // Update the branch reference to point to the new commit\n await octokit.git.updateRef({\n owner,\n repo,\n ref: `heads/${branchName}`,\n sha: newCommit.sha,\n });\n\n logger.log(`Branch ${branchName} updated to commit ${newCommit.sha}`);\n } catch (error) {\n logger.error(`Failed to commit formula file: ${(error as Error).message}`);\n throw error;\n }\n}\n\nasync function calculateSha256(url: string, context: PrepareContext): Promise<string> {\n const { logger } = context;\n\n logger.log(`Calculating SHA256 for URL: ${url}`);\n\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch file. Status Code: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('Response body is null.');\n }\n\n const hash = crypto.createHash('sha256');\n const reader = response.body.getReader();\n\n return new Promise((resolve, reject) => {\n function read() {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n resolve(hash.digest('hex'));\n return;\n }\n if (value) {\n hash.update(value);\n }\n read();\n })\n .catch(reject);\n }\n read();\n });\n}\n\nasync function updateFormulaFile(pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {\n const { nextRelease, logger, options } = context;\n\n if (!nextRelease?.version) {\n throw new Error('Next release version is not available.');\n }\n\n const tagName = `v${nextRelease.version}`;\n\n const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release\n const url = new URL(repositoryUrl);\n const repositoryPath = url.pathname;\n const repository = repositoryPath.startsWith('/') ? repositoryPath.slice(1) : repositoryPath;\n\n const tarUrl = `https://codeload.github.com/${repository}/tar.gz/refs/tags/${tagName}`;\n const sha256 = await calculateSha256(tarUrl, context);\n const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);\n\n let formulaContent = fs.readFileSync(formulaFile, 'utf8');\n formulaContent = formulaContent.replace(/url \".*\"/, `url \"${tarUrl}\"`);\n formulaContent = formulaContent.replace(/sha256 \".*\"/, `sha256 \"${sha256}\"`);\n fs.writeFileSync(formulaFile, formulaContent);\n\n logger.log(`Updated formula with version ${tagName}, URL ${tarUrl}, and SHA256 ${sha256}`);\n}\n\nasync function addChannel(_pluginConfig: PluginConfig, _context: AddChannelContext): Promise<void> {\n //do nothing\n}\n\nasync function analyzeCommits(pluginConfig: PluginConfig, context: AnalyzeCommitsContext): Promise<string | false> {\n if (!verified) {\n await verifyConditions(pluginConfig, context);\n verified = true;\n }\n\n return commitAnalyzerAnalyzeCommits(analyzerConfig, context);\n}\n\nasync function fail(_pluginConfig: PluginConfig, _context: FailContext): Promise<void> {\n //do nothing\n}\n\nasync function generateNotes(pluginConfig: PluginConfig, context: GenerateNotesContext): Promise<string> {\n if (!verified) {\n await verifyConditions(pluginConfig, context);\n verified = true;\n }\n\n return notesGeneratorGenerateNotes({}, context);\n}\n\nasync function prepare(_pluginConfig: PluginConfig, _context: PrepareContext): Promise<void> {\n //do nothing\n}\n\nasync function publish(pluginConfig: PluginConfig, context: PublishContext): Promise<unknown> {\n if (!verified) {\n await verifyConditions(pluginConfig, context);\n verified = true;\n }\n\n await updateFormulaFile(pluginConfig, context);\n\n await commitFormulaFile(pluginConfig, context);\n\n return null;\n}\n\nasync function success(_pluginConfig: PluginConfig, _context: SuccessContext): Promise<void> {\n //do nothing\n}\n\nasync function verifyConditions(_pluginConfig: PluginConfig, _context: VerifyConditionsContext): Promise<void> {\n verified = true;\n}\n\nconst plugin: SemanticReleasePlugin<{ tap: string }> = {\n addChannel,\n verifyConditions,\n analyzeCommits,\n generateNotes,\n prepare,\n publish,\n success,\n fail,\n};\n\nexport default plugin;\n"],"names":["analyzerConfig","preset","parserOpts","headerPattern","RegExp","headerCorrespondence","releaseRules","type","exclamation1","release","exclamation2","verified","getFormulaFile","pluginConfig","repositoryUrl","repositoryPath","URL","pathname","project","startsWith","slice","split","pop","tap","async","updateFormulaFile","context","nextRelease","logger","options","version","Error","tagName","tarUrl","sha256","url","log","response","fetch","ok","status","body","hash","crypto","createHash","reader","getReader","Promise","resolve","reject","read","then","done","value","digest","update","catch","calculateSha256","formulaFile","formulaContent","fs","readFileSync","replace","writeFileSync","verifyConditions","_pluginConfig","_context","plugin","addChannel","analyzeCommits","commitAnalyzerAnalyzeCommits","generateNotes","notesGeneratorGenerateNotes","prepare","publish","process","env","GITHUB_TOKEN","owner","repo","branchName","branch","octokit","Octokit","auth","data","repos","getBranch","latestCommitSha","commit","sha","baseTreeSha","tree","blob","git","createBlob","content","encoding","newTree","createTree","base_tree","path","mode","commitMessage","newCommit","createCommit","message","parents","updateRef","ref","error","commitFormulaFile","success","fail"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tarsilla/commit-wizard",
3
- "version": "1.4.7",
3
+ "version": "1.4.8",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -4,11 +4,6 @@ import fs from 'fs';
4
4
  import { Octokit } from '@octokit/rest';
5
5
  //@ts-ignore
6
6
  import { analyzeCommits as commitAnalyzerAnalyzeCommits } from '@semantic-release/commit-analyzer';
7
- import {
8
- prepare as gitPrepare,
9
- verifyConditions as gitVerifyConditions,
10
- //@ts-ignore
11
- } from '@semantic-release/git';
12
7
  //@ts-ignore
13
8
  import { generateNotes as notesGeneratorGenerateNotes } from '@semantic-release/release-notes-generator';
14
9
  import {
@@ -51,61 +46,101 @@ type PluginConfig = { tap?: string };
51
46
 
52
47
  let verified = false;
53
48
 
54
- async function createTag(_pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {
49
+ function getFormulaFile(pluginConfig: PluginConfig, repositoryUrl: string): string {
50
+ const url = new URL(repositoryUrl);
51
+ const repositoryPath = url.pathname;
52
+ const repository = repositoryPath.startsWith('/') ? repositoryPath.slice(1) : repositoryPath;
53
+ const project = repository.split('/').pop();
54
+
55
+ return pluginConfig.tap ?? `${project}.rb`;
56
+ }
57
+
58
+ async function commitFormulaFile(pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {
55
59
  if (!process.env.GITHUB_TOKEN) {
56
60
  throw new Error('GITHUB_TOKEN is not set in the environment.');
57
61
  }
58
62
 
59
63
  const { nextRelease, logger, options } = context;
60
64
 
61
- const tagName = `v${nextRelease.version}`;
62
-
63
65
  const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release
64
66
  const [owner, repo] = new URL(repositoryUrl).pathname.slice(1).split('/');
65
67
 
66
- logger.log(`Creating tag ${tagName} using GitHub API...`);
68
+ const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);
69
+ const branchName = options.branch ?? 'main';
70
+
71
+ logger.log(`Committing updated formula file ${formulaFile} to branch ${branchName}...`);
67
72
 
68
73
  const octokit = new Octokit({
69
- auth: process.env.GITHUB_TOKEN, // Ensure GITHUB_TOKEN is available in the environment
74
+ auth: process.env.GITHUB_TOKEN,
70
75
  });
71
76
 
72
77
  try {
73
- const branchName = options.branch ?? 'main';
74
- logger.log(`Branch name: ${branchName}`);
75
-
76
- // Get the latest commit SHA from the default branch
78
+ // Get the latest commit SHA and tree SHA from the branch
77
79
  const { data: branch } = await octokit.repos.getBranch({
78
80
  owner,
79
81
  repo,
80
82
  branch: branchName,
81
83
  });
82
84
 
83
- const commitSha = branch.commit.sha;
84
- logger.log(`Latest commit SHA: ${commitSha}`);
85
+ const latestCommitSha = branch.commit.sha;
86
+ const baseTreeSha = branch.commit.commit.tree.sha;
87
+
88
+ logger.log(`Latest commit SHA: ${latestCommitSha}`);
89
+ logger.log(`Base tree SHA: ${baseTreeSha}`);
90
+
91
+ // Read the updated formula file content
92
+ const formulaContent = fs.readFileSync(formulaFile, 'utf8');
93
+
94
+ // Create a new blob for the updated formula file
95
+ const { data: blob } = await octokit.git.createBlob({
96
+ owner,
97
+ repo,
98
+ content: formulaContent,
99
+ encoding: 'utf-8',
100
+ });
101
+
102
+ logger.log(`Created blob for ${formulaFile} with SHA: ${blob.sha}`);
103
+
104
+ // Create a new tree with the updated formula file
105
+ const { data: newTree } = await octokit.git.createTree({
106
+ owner,
107
+ repo,
108
+ base_tree: baseTreeSha,
109
+ tree: [
110
+ {
111
+ path: formulaFile,
112
+ mode: '100644',
113
+ type: 'blob',
114
+ sha: blob.sha,
115
+ },
116
+ ],
117
+ });
118
+
119
+ logger.log(`Created new tree with SHA: ${newTree.sha}`);
85
120
 
86
- // Create the tag object
87
- logger.log(`Creating tag object for ${tagName}...`);
88
- await octokit.git.createTag({
121
+ // Create a new commit with the updated tree
122
+ const commitMessage = `chore(release): ${nextRelease.version}`;
123
+ const { data: newCommit } = await octokit.git.createCommit({
89
124
  owner,
90
125
  repo,
91
- tag: tagName,
92
- message: `Release ${tagName}`,
93
- object: commitSha,
94
- type: 'commit',
126
+ message: commitMessage,
127
+ tree: newTree.sha,
128
+ parents: [latestCommitSha],
95
129
  });
96
130
 
97
- // Create the reference for the tag
98
- logger.log(`Creating reference for tag ${tagName}...`);
99
- await octokit.git.createRef({
131
+ logger.log(`Created new commit with SHA: ${newCommit.sha}`);
132
+
133
+ // Update the branch reference to point to the new commit
134
+ await octokit.git.updateRef({
100
135
  owner,
101
136
  repo,
102
- ref: `refs/tags/${tagName}`,
103
- sha: commitSha,
137
+ ref: `heads/${branchName}`,
138
+ sha: newCommit.sha,
104
139
  });
105
140
 
106
- logger.log(`Tag ${tagName} created successfully.`);
141
+ logger.log(`Branch ${branchName} updated to commit ${newCommit.sha}`);
107
142
  } catch (error) {
108
- logger.error(`Failed to create tag ${tagName}: ${(error as Error).message}`);
143
+ logger.error(`Failed to commit formula file: ${(error as Error).message}`);
109
144
  throw error;
110
145
  }
111
146
  }
@@ -148,15 +183,6 @@ async function calculateSha256(url: string, context: PrepareContext): Promise<st
148
183
  });
149
184
  }
150
185
 
151
- function getFormulaFile(pluginConfig: PluginConfig, repositoryUrl: string): string {
152
- const url = new URL(repositoryUrl);
153
- const repositoryPath = url.pathname;
154
- const repository = repositoryPath.startsWith('/') ? repositoryPath.slice(1) : repositoryPath;
155
- const project = repository.split('/').pop();
156
-
157
- return pluginConfig.tap ?? `${project}.rb`;
158
- }
159
-
160
186
  async function updateFormulaFile(pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {
161
187
  const { nextRelease, logger, options } = context;
162
188
 
@@ -209,33 +235,20 @@ async function generateNotes(pluginConfig: PluginConfig, context: GenerateNotesC
209
235
  return notesGeneratorGenerateNotes({}, context);
210
236
  }
211
237
 
212
- async function prepare(pluginConfig: PluginConfig, context: PrepareContext): Promise<void> {
238
+ async function prepare(_pluginConfig: PluginConfig, _context: PrepareContext): Promise<void> {
239
+ //do nothing
240
+ }
241
+
242
+ async function publish(pluginConfig: PluginConfig, context: PublishContext): Promise<unknown> {
213
243
  if (!verified) {
214
244
  await verifyConditions(pluginConfig, context);
215
245
  verified = true;
216
246
  }
217
247
 
218
- if (gitPrepare) {
219
- const { options } = context;
220
- const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release
221
- const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);
222
-
223
- await createTag(pluginConfig, context);
248
+ await updateFormulaFile(pluginConfig, context);
224
249
 
225
- await updateFormulaFile(pluginConfig, context);
250
+ await commitFormulaFile(pluginConfig, context);
226
251
 
227
- await gitPrepare(
228
- {
229
- assets: [formulaFile],
230
- message: 'chore(release): ${nextRelease.version}',
231
- },
232
- context,
233
- );
234
- }
235
- }
236
-
237
- async function publish(_pluginConfig: PluginConfig, _context: PublishContext): Promise<unknown> {
238
- //do nothing
239
252
  return null;
240
253
  }
241
254
 
@@ -243,19 +256,7 @@ async function success(_pluginConfig: PluginConfig, _context: SuccessContext): P
243
256
  //do nothing
244
257
  }
245
258
 
246
- async function verifyConditions(pluginConfig: PluginConfig, context: VerifyConditionsContext): Promise<void> {
247
- if (gitVerifyConditions) {
248
- const { options } = context;
249
- const repositoryUrl = options.repositoryUrl!; // Guaranteed to be defined by semantic-release
250
- const formulaFile = getFormulaFile(pluginConfig, repositoryUrl);
251
- await gitVerifyConditions(
252
- {
253
- assets: [formulaFile],
254
- message: 'chore(release): ${nextRelease.version}',
255
- },
256
- context,
257
- );
258
- }
259
+ async function verifyConditions(_pluginConfig: PluginConfig, _context: VerifyConditionsContext): Promise<void> {
259
260
  verified = true;
260
261
  }
261
262