infra-kit 0.1.97 → 0.1.99

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 +0,0 @@
1
- export { releaseCreateBatch, releaseCreateBatchMcpTool } from './release-create-batch'
@@ -1,198 +0,0 @@
1
- import confirm from '@inquirer/confirm'
2
- import select from '@inquirer/select'
3
- import process from 'node:process'
4
- import { z } from 'zod/v4'
5
- import { question } from 'zx'
6
-
7
- import { loadJiraConfig } from 'src/integrations/jira'
8
- import { commandEcho } from 'src/lib/command-echo'
9
- import { logger } from 'src/lib/logger'
10
- import { createSingleRelease, prepareGitForRelease } from 'src/lib/release-utils'
11
- import type { ReleaseCreationResult, ReleaseType } from 'src/lib/release-utils'
12
- import type { RequiredConfirmedOptionArg, ToolsExecutionResult } from 'src/types'
13
-
14
- interface ReleaseCreateBatchArgs extends RequiredConfirmedOptionArg {
15
- versions: string
16
- type?: ReleaseType
17
- }
18
-
19
- /**
20
- * Gather and validate batch release inputs interactively if needed
21
- */
22
- const resolveInputs = async (args: ReleaseCreateBatchArgs): Promise<{ versionsList: string[]; type: ReleaseType }> => {
23
- const { versions: inputVersions, type: inputType, confirmedCommand } = args
24
-
25
- let versionInput = inputVersions
26
- let type: ReleaseType = inputType || 'regular'
27
-
28
- if (!versionInput) {
29
- commandEcho.setInteractive()
30
- versionInput = await question('Enter versions by comma (e.g. 1.2.5, 1.2.6): ')
31
- }
32
-
33
- const versionsList = versionInput
34
- .split(',')
35
- .map((version) => {
36
- return version.trim()
37
- })
38
- .filter(Boolean)
39
-
40
- commandEcho.addOption('--versions', versionsList.join(', '))
41
-
42
- if (versionsList.length === 0) {
43
- logger.error('No versions provided. Exiting...')
44
- process.exit(1)
45
- }
46
-
47
- if (!inputType) {
48
- commandEcho.setInteractive()
49
-
50
- type = await select<ReleaseType>({
51
- message: 'Select release type:',
52
- choices: [
53
- { name: 'regular', value: 'regular' },
54
- { name: 'hotfix', value: 'hotfix' },
55
- ],
56
- default: 'regular',
57
- })
58
- }
59
-
60
- commandEcho.addOption('--type', type)
61
-
62
- if (versionsList.length === 1) {
63
- logger.warn('💡 You are creating only one release. Consider using "create-release" command for single releases.')
64
- }
65
-
66
- const answer = confirmedCommand
67
- ? true
68
- : await confirm({
69
- message: `Are you sure you want to create release branches for these versions: ${versionsList.join(', ')}?`,
70
- })
71
-
72
- if (!confirmedCommand) {
73
- commandEcho.setInteractive()
74
- }
75
-
76
- if (!answer) {
77
- logger.info('Operation cancelled. Exiting...')
78
- process.exit(0)
79
- }
80
-
81
- commandEcho.addOption('--yes', true)
82
-
83
- return { versionsList, type }
84
- }
85
-
86
- /**
87
- * Create multiple release branches for the specified versions
88
- * Includes Jira version creation and GitHub release branch creation for each version
89
- */
90
- export const releaseCreateBatch = async (args: ReleaseCreateBatchArgs): Promise<ToolsExecutionResult> => {
91
- commandEcho.start('release-create-batch')
92
-
93
- const jiraConfig = await loadJiraConfig()
94
-
95
- const { versionsList, type } = await resolveInputs(args)
96
-
97
- await prepareGitForRelease(type)
98
-
99
- const releases: ReleaseCreationResult[] = []
100
- const failedReleases: Array<{ version: string; error: string }> = []
101
-
102
- for (const version of versionsList) {
103
- try {
104
- // Create each release
105
- const release = await createSingleRelease({ version, jiraConfig, type })
106
-
107
- releases.push(release)
108
-
109
- logger.info(`✅ Successfully created release: v${version}`)
110
- logger.info(`🔗 GitHub PR: ${release.prUrl}`)
111
- logger.info(`🔗 Jira Version: ${release.jiraVersionUrl}\n`)
112
- } catch (error) {
113
- const errorMessage = error instanceof Error ? error.message : String(error)
114
-
115
- failedReleases.push({ version, error: errorMessage })
116
-
117
- logger.error(`❌ Failed to create release: v${version}`)
118
- logger.error(` Error: ${errorMessage}\n`)
119
- }
120
- }
121
-
122
- // Final summary
123
- const successCount = releases.length
124
- const failureCount = failedReleases.length
125
-
126
- if (successCount === versionsList.length) {
127
- logger.info(`✅ All ${versionsList.length} release branches were created successfully.`)
128
- } else if (successCount > 0) {
129
- logger.warn(`⚠️ ${successCount} of ${versionsList.length} release branches were created successfully.`)
130
- logger.warn(`❌ ${failureCount} release(s) failed.`)
131
- } else {
132
- logger.error(`❌ All ${versionsList.length} release branches failed to create.`)
133
- }
134
-
135
- commandEcho.print()
136
-
137
- const structuredContent = {
138
- createdBranches: releases.map((r) => {
139
- return r.branchName
140
- }),
141
- successCount,
142
- failureCount,
143
- releases,
144
- failedReleases,
145
- }
146
-
147
- return {
148
- content: [
149
- {
150
- type: 'text',
151
- text: JSON.stringify(structuredContent, null, 2),
152
- },
153
- ],
154
- structuredContent,
155
- }
156
- }
157
-
158
- // MCP Tool Registration
159
- export const releaseCreateBatchMcpTool = {
160
- name: 'release-create-batch',
161
- description:
162
- 'Create several releases in one pass: for each comma-separated version in "versions", cuts the release branch off the appropriate base (dev for regular releases, main for hotfixes), opens a GitHub PR, and creates the Jira fix version. Continues on per-version failure and reports which versions succeeded and which failed. Confirmation is auto-skipped for MCP calls, so the caller is responsible for gating. "versions" is required when invoked via MCP (the interactive input prompt is unreachable without a TTY). Use release-create for a single version with optional checkout.',
163
- inputSchema: {
164
- versions: z
165
- .string()
166
- .describe('Comma-separated list of versions to create (e.g., "1.2.5, 1.2.6"). Required for MCP calls.'),
167
- type: z
168
- .enum(['regular', 'hotfix'])
169
- .optional()
170
- .default('regular')
171
- .describe('Release type: "regular" or "hotfix" (default: "regular")'),
172
- },
173
- outputSchema: {
174
- createdBranches: z.array(z.string()).describe('List of created release branches'),
175
- successCount: z.number().describe('Number of releases created successfully'),
176
- failureCount: z.number().describe('Number of releases that failed'),
177
- releases: z
178
- .array(
179
- z.object({
180
- version: z.string().describe('Version number'),
181
- type: z.enum(['regular', 'hotfix']).describe('Release type'),
182
- branchName: z.string().describe('Release branch name'),
183
- prUrl: z.string().describe('GitHub PR URL'),
184
- jiraVersionUrl: z.string().describe('Jira version URL'),
185
- }),
186
- )
187
- .describe('Detailed information for each created release with URLs'),
188
- failedReleases: z
189
- .array(
190
- z.object({
191
- version: z.string().describe('Version number that failed'),
192
- error: z.string().describe('Error message'),
193
- }),
194
- )
195
- .describe('List of releases that failed with error messages'),
196
- },
197
- handler: releaseCreateBatch,
198
- }