infra-kit 0.1.63 → 0.1.67
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/cli.js +3 -3
- package/dist/cli.js.map +2 -2
- package/dist/mcp.js +2 -2
- package/dist/mcp.js.map +2 -2
- package/package.json +6 -6
- package/src/commands/worktrees-add/worktrees-add.ts +1 -0
- package/src/commands/worktrees-remove/worktrees-remove.ts +0 -2
- package/src/commands/worktrees-sync/worktrees-sync.ts +5 -2
- package/src/entry/cli.ts +1 -1
- package/src/lib/git-utils/git-utils.ts +1 -0
- package/vitest.config.ts +4 -5
- package/vitest.setup.ts +1 -1
package/dist/cli.js
CHANGED
|
@@ -15,7 +15,7 @@ ${o.join(`
|
|
|
15
15
|
\u{1F33F} Git Worktrees`),r.info("\u2500".repeat(80)),r.info("\u2139\uFE0F No worktrees found"),r.info("\u2500".repeat(80));return}r.info(`
|
|
16
16
|
\u{1F33F} Git Worktrees`),r.info("\u2550".repeat(100));let o=e.filter(t=>t.type==="release"),i=e.filter(t=>t.type==="feature");Oe("\u{1F680} Releases",o),i.length>0&&o.length>0&&r.info(""),Oe("\u2728 Features",i);let s=e.find(t=>t.isCurrent);r.info(`
|
|
17
17
|
${"\u2550".repeat(100)}`),r.info(`\u{1F4CA} Summary: ${e.length} total worktrees (${o.length} releases, ${i.length} features)`),s&&r.info(`\u{1F4CD} Currently on: ${s.branch}`),r.info("")},Oe=(e,o)=>{if(o.length!==0){r.info(`
|
|
18
|
-
${e}`),r.info("\u2500".repeat(50));for(let[i,s]of o.entries())Wr(s),i<o.length-1&&r.info("")}},Wr=e=>{let o=e.isCurrent?"\u{1F4CD}":" ",i=Br(e.status),t=`${e.type==="release"?"\u{1F680}":"\u2728"} ${e.branch}`;r.info(`${o} ${i} ${t}`);let c=e.aheadBehind!=="unknown"?` | ${e.aheadBehind}`:"";r.info(` \u{1F4DD} ${e.commit}${c}`),r.info(` \u{1F4AC} ${e.lastCommitMessage}`);let l=e.path.split("/").slice(-2).join("/");r.info(` \u{1F4C1} ${l}`)},Br=e=>{switch(e){case"clean":return"\u2705";case"modified":return"\u26A0\uFE0F ";case"dirty":return"\u{1F534}";default:return"\u2753"}},Lr={name:"worktrees-list",description:"List all git worktrees with detailed information",inputSchema:{},outputSchema:{worktrees:b.array(b.object({branch:b.string(),path:b.string(),commit:b.string(),isCurrent:b.boolean(),type:b.enum(["release","feature"]),status:b.string(),lastCommitMessage:b.string(),aheadBehind:b.string()})).describe("List of all worktrees with details"),totalCount:b.number().describe("Total number of worktrees"),releaseCount:b.number().describe("Number of release worktrees"),featureCount:b.number().describe("Number of feature worktrees")},handler:ee};import Vr from"@inquirer/checkbox";import Mr from"@inquirer/confirm";import _r from"node:process";import{z as re}from"zod";import{$ as qr}from"zx";var te=async e=>{let{confirmedCommand:o,all:i}=e;n.start("worktrees-remove");try{let s=await C("release"),c=`${await w()}${O}`,l=[];i?l=s:(n.setInteractive(),l=await Vr({required:!0,message:"\u{1F33F} Select release branches",choices:s.map(d=>({name:d.replace("release/v",""),value:d}))}));let a=l.length===s.length;a?n.addOption("--all",!0):
|
|
19
|
-
`)),r.info("")):r.info("\u2139\uFE0F No unused worktrees to remove")},Gr={name:"worktrees-remove",description:"Remove selected worktrees",inputSchema:{all:re.boolean().describe("Remove all worktrees without prompting")},outputSchema:{removedWorktrees:re.array(re.string()).describe("List of removed worktree branches"),count:re.number().describe("Number of worktrees removed")},handler:te};import zr from"@inquirer/confirm";import Hr from"node:process";import{z as ye}from"zod";import{$ as Kr}from"zx";var Xr="release/v",oe=async e=>{let{confirmedCommand:o}=e;n.start("worktrees-sync");try{let i=await C("release"),t=`${await w()}${O}`,c=await v(),l=o?!0:await zr({message:"Are you sure you want to proceed with these worktree changes?"});o||n.setInteractive(),l||(r.info("Operation cancelled. Exiting..."),Hr.exit(0)),n.addOption("--yes",!0);let{branchesToRemove:a}=Yr({releasePRsList:c,currentWorktrees:i}),p=await Qr(a,t);Zr(p),n.print();let m={removedWorktrees:p,count:p.length};return{content:[{type:"text",text:JSON.stringify(m,null,2)}],structuredContent:m}}catch(i){throw r.error({error:i},"\u274C Error managing worktrees"),i}},Yr=e=>{let{releasePRsList:o,currentWorktrees:i}=e;return{branchesToRemove:i.filter(c=>c.startsWith(Xr)).filter(c=>!o.includes(c))}},Qr=async(e,o)=>{let i=[];for(let s of e)try{let t=`${o}/${s}`;await Kr`git worktree remove ${t}`,i.push(s)}catch(t){r.error({error:t,branch:s},`\u274C Failed to remove worktree for ${s}`)}return i},Zr=e=>{e.length>0?(r.info("\u274C Removed worktrees:"),r.info(e.join(`
|
|
20
|
-
`)),r.info("")):r.info("\u2139\uFE0F No unused worktrees to remove")},et={name:"worktrees-sync",description:"Synchronize worktrees with active release branches",inputSchema:{},outputSchema:{removedWorktrees:ye.array(ye.string()).describe("List of removed worktree branches"),count:ye.number().describe("Number of worktrees removed during sync")},handler:oe};import{config as rt}from"dotenv";import{resolve as tt}from"node:path";import{$ as De}from"zx";var we=async()=>{try{De.quiet=!0;let e=await w();rt({path:tt(e,".env"),quiet:!0}),r.info("Loaded .env file from git repository root")}catch{}finally{De.quiet=!1}};await we();var R=new ot;R.command("merge-dev").description("Merge dev branch into every release branch").option("-a, --all","Select all active release branches").option("-y, --yes","Skip confirmation prompt").action(async e=>{await _({all:e.all,confirmedCommand:e.yes})});R.command("release-list").description("List all release branches").action(async()=>{await K()});R.command("release-create").description("Create a single release branch").option("-v, --version <version>","Specify the version to create, e.g. 1.2.5").option("-d, --description <description>","Optional description for the Jira version").option("-y, --yes","Skip confirmation prompt").option("--no-checkout","Do not checkout the created branch after creation (checkout is default)").action(async e=>{await X({version:e.version,description:e.description,confirmedCommand:e.yes,checkout:e.checkout})});R.command("release-create-batch").description("Create multiple release branches (batch operation)").option("-v, --versions <versions>","Specify the versions to create by comma, e.g. 1.2.5, 1.2.6").option("-d, --description <description>","Optional description for the Jira versions").option("-y, --yes","Skip confirmation prompt").action(async e=>{await Y({versions:e.versions,description:e.description,confirmedCommand:e.yes})});R.command("release-deploy-all").description("Deploy any release branch to any environment").option("-v, --version <version>","Specify the version to deploy, e.g. 1.2.5").option("-e, --env <env>","Specify the environment to deploy to, e.g. dev").option("--skip-terraform","Skip terraform deployment step").action(async e=>{await F({version:e.version,env:e.env,skipTerraform:e.skipTerraform})});R.command("release-deploy-service").description("Deploy specific service in release branch to any environment").option("-v, --version <version>","Specify the version to deploy, e.g. 1.2.5").option("-e, --env <env>","Specify the environment to deploy to, e.g. dev").option("-s, --service <service>","Specify the service to deploy, e.g. client-be").option("--skip-terraform","Skip terraform deployment step").action(async e=>{await H({version:e.version,env:e.env,service:e.service,skipTerraform:e.skipTerraform})});R.command("release-deploy-selected").description("Deploy selected services from release branch to any environment").option("-v, --version <version>","Specify the version to deploy, e.g. 1.2.5").option("-e, --env <env>","Specify the environment to deploy to, e.g. dev").option("-s, --services <services...>","Specify services to deploy, e.g. client-be client-fe").option("--skip-terraform","Skip terraform deployment step").action(async e=>{await G({version:e.version,env:e.env,services:e.services,skipTerraform:e.skipTerraform})});R.command("release-deliver").description("Release a new version to production").option("-v, --version <version>","Specify the version to release, e.g. 1.2.5").option("-y, --yes","Skip confirmation prompt").action(async e=>{await U({version:e.version,confirmedCommand:e.yes})});R.command("worktrees-sync").description("
|
|
18
|
+
${e}`),r.info("\u2500".repeat(50));for(let[i,s]of o.entries())Wr(s),i<o.length-1&&r.info("")}},Wr=e=>{let o=e.isCurrent?"\u{1F4CD}":" ",i=Br(e.status),t=`${e.type==="release"?"\u{1F680}":"\u2728"} ${e.branch}`;r.info(`${o} ${i} ${t}`);let c=e.aheadBehind!=="unknown"?` | ${e.aheadBehind}`:"";r.info(` \u{1F4DD} ${e.commit}${c}`),r.info(` \u{1F4AC} ${e.lastCommitMessage}`);let l=e.path.split("/").slice(-2).join("/");r.info(` \u{1F4C1} ${l}`)},Br=e=>{switch(e){case"clean":return"\u2705";case"modified":return"\u26A0\uFE0F ";case"dirty":return"\u{1F534}";default:return"\u2753"}},Lr={name:"worktrees-list",description:"List all git worktrees with detailed information",inputSchema:{},outputSchema:{worktrees:b.array(b.object({branch:b.string(),path:b.string(),commit:b.string(),isCurrent:b.boolean(),type:b.enum(["release","feature"]),status:b.string(),lastCommitMessage:b.string(),aheadBehind:b.string()})).describe("List of all worktrees with details"),totalCount:b.number().describe("Total number of worktrees"),releaseCount:b.number().describe("Number of release worktrees"),featureCount:b.number().describe("Number of feature worktrees")},handler:ee};import Vr from"@inquirer/checkbox";import Mr from"@inquirer/confirm";import _r from"node:process";import{z as re}from"zod";import{$ as qr}from"zx";var te=async e=>{let{confirmedCommand:o,all:i}=e;n.start("worktrees-remove");try{let s=await C("release"),c=`${await w()}${O}`,l=[];i?l=s:(n.setInteractive(),l=await Vr({required:!0,message:"\u{1F33F} Select release branches",choices:s.map(d=>({name:d.replace("release/v",""),value:d}))}));let a=l.length===s.length;a?n.addOption("--all",!0):n.addOption("--branches",l);let p=o?!0:await Mr({message:"Are you sure you want to proceed with these worktree changes?"});o||n.setInteractive(),p||(r.info("Operation cancelled. Exiting..."),_r.exit(0)),a&&n.addOption("--yes",!0);let m=await Ur(l,c);Fr(m),n.print();let f={removedWorktrees:m,count:m.length};return{content:[{type:"text",text:JSON.stringify(f,null,2)}],structuredContent:f}}catch(s){throw r.error({error:s},"\u274C Error managing worktrees"),s}},Ur=async(e,o)=>{let i=[];for(let s of e)try{let t=`${o}/${s}`;await qr`git worktree remove ${t}`,i.push(s)}catch(t){r.error({error:t,branch:s},`\u274C Failed to remove worktree for ${s}`)}return i},Fr=e=>{e.length>0?(r.info("\u274C Removed worktrees:"),r.info(e.join(`
|
|
19
|
+
`)),r.info("")):r.info("\u2139\uFE0F No unused worktrees to remove")},Gr={name:"worktrees-remove",description:"Remove selected worktrees",inputSchema:{all:re.boolean().describe("Remove all worktrees without prompting")},outputSchema:{removedWorktrees:re.array(re.string()).describe("List of removed worktree branches"),count:re.number().describe("Number of worktrees removed")},handler:te};import zr from"@inquirer/confirm";import Hr from"node:process";import{z as ye}from"zod";import{$ as Kr}from"zx";var Xr="release/v",oe=async e=>{let{confirmedCommand:o}=e;n.start("worktrees-sync");try{let i=await C("release"),t=`${await w()}${O}`,c=await v(),l=o?!0:await zr({message:"Are you sure you want to proceed with these worktree changes?"});o||n.setInteractive(),l||(r.info("Operation cancelled. Exiting..."),Hr.exit(0)),o||n.addOption("--yes",!0);let{branchesToRemove:a}=Yr({releasePRsList:c,currentWorktrees:i}),p=await Qr(a,t);Zr(p),n.print();let m={removedWorktrees:p,count:p.length};return{content:[{type:"text",text:JSON.stringify(m,null,2)}],structuredContent:m}}catch(i){throw r.error({error:i},"\u274C Error managing worktrees"),i}},Yr=e=>{let{releasePRsList:o,currentWorktrees:i}=e;return{branchesToRemove:i.filter(c=>c.startsWith(Xr)).filter(c=>!o.includes(c))}},Qr=async(e,o)=>{let i=[];for(let s of e)try{let t=`${o}/${s}`;await Kr`git worktree remove ${t}`,i.push(s)}catch(t){r.error({error:t,branch:s},`\u274C Failed to remove worktree for ${s}`)}return i},Zr=e=>{e.length>0?(r.info("\u274C Removed worktrees:"),r.info(e.join(`
|
|
20
|
+
`)),r.info("")):r.info("\u2139\uFE0F No unused worktrees to remove")},et={name:"worktrees-sync",description:"Synchronize worktrees with active release branches",inputSchema:{},outputSchema:{removedWorktrees:ye.array(ye.string()).describe("List of removed worktree branches"),count:ye.number().describe("Number of worktrees removed during sync")},handler:oe};import{config as rt}from"dotenv";import{resolve as tt}from"node:path";import{$ as De}from"zx";var we=async()=>{try{De.quiet=!0;let e=await w();rt({path:tt(e,".env"),quiet:!0}),r.info("Loaded .env file from git repository root")}catch{}finally{De.quiet=!1}};await we();var R=new ot;R.command("merge-dev").description("Merge dev branch into every release branch").option("-a, --all","Select all active release branches").option("-y, --yes","Skip confirmation prompt").action(async e=>{await _({all:e.all,confirmedCommand:e.yes})});R.command("release-list").description("List all release branches").action(async()=>{await K()});R.command("release-create").description("Create a single release branch").option("-v, --version <version>","Specify the version to create, e.g. 1.2.5").option("-d, --description <description>","Optional description for the Jira version").option("-y, --yes","Skip confirmation prompt").option("--no-checkout","Do not checkout the created branch after creation (checkout is default)").action(async e=>{await X({version:e.version,description:e.description,confirmedCommand:e.yes,checkout:e.checkout})});R.command("release-create-batch").description("Create multiple release branches (batch operation)").option("-v, --versions <versions>","Specify the versions to create by comma, e.g. 1.2.5, 1.2.6").option("-d, --description <description>","Optional description for the Jira versions").option("-y, --yes","Skip confirmation prompt").action(async e=>{await Y({versions:e.versions,description:e.description,confirmedCommand:e.yes})});R.command("release-deploy-all").description("Deploy any release branch to any environment").option("-v, --version <version>","Specify the version to deploy, e.g. 1.2.5").option("-e, --env <env>","Specify the environment to deploy to, e.g. dev").option("--skip-terraform","Skip terraform deployment step").action(async e=>{await F({version:e.version,env:e.env,skipTerraform:e.skipTerraform})});R.command("release-deploy-service").description("Deploy specific service in release branch to any environment").option("-v, --version <version>","Specify the version to deploy, e.g. 1.2.5").option("-e, --env <env>","Specify the environment to deploy to, e.g. dev").option("-s, --service <service>","Specify the service to deploy, e.g. client-be").option("--skip-terraform","Skip terraform deployment step").action(async e=>{await H({version:e.version,env:e.env,service:e.service,skipTerraform:e.skipTerraform})});R.command("release-deploy-selected").description("Deploy selected services from release branch to any environment").option("-v, --version <version>","Specify the version to deploy, e.g. 1.2.5").option("-e, --env <env>","Specify the environment to deploy to, e.g. dev").option("-s, --services <services...>","Specify services to deploy, e.g. client-be client-fe").option("--skip-terraform","Skip terraform deployment step").action(async e=>{await G({version:e.version,env:e.env,services:e.services,skipTerraform:e.skipTerraform})});R.command("release-deliver").description("Release a new version to production").option("-v, --version <version>","Specify the version to release, e.g. 1.2.5").option("-y, --yes","Skip confirmation prompt").action(async e=>{await U({version:e.version,confirmedCommand:e.yes})});R.command("worktrees-sync").description("Remove release worktrees whose PRs are no longer open").option("-y, --yes","Skip confirmation prompt").action(async e=>{await oe({confirmedCommand:e.yes})});R.command("worktrees-add").description("Add git worktrees for release branches").option("-y, --yes","Skip confirmation prompt").option("-a, --all","Select all active release branches").action(async e=>{await Z({confirmedCommand:e.yes,all:e.all})});R.command("worktrees-list").description("List all git worktrees with detailed information").action(async()=>{await ee()});R.command("worktrees-remove").description("Remove git worktrees for release branches").option("-y, --yes","Skip confirmation prompt").option("-a, --all","Select all active release branches").action(async e=>{await te({confirmedCommand:e.yes,all:e.all})});await V();R.parse();
|
|
21
21
|
//# sourceMappingURL=cli.js.map
|