@andrebuzeli/git-mcp 2.47.2 → 2.48.0
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/README.md +329 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +12 -5
- package/dist/server.js.map +1 -1
- package/dist/tools/git-archive.d.ts.map +1 -1
- package/dist/tools/git-archive.js +13 -16
- package/dist/tools/git-archive.js.map +1 -1
- package/dist/tools/git-config.d.ts.map +1 -1
- package/dist/tools/git-config.js +16 -13
- package/dist/tools/git-config.js.map +1 -1
- package/dist/tools/git-initialize.js +119 -119
- package/dist/tools/git-publish.d.ts +327 -0
- package/dist/tools/git-publish.d.ts.map +1 -0
- package/dist/tools/git-publish.js +632 -0
- package/dist/tools/git-publish.js.map +1 -0
- package/dist/tools/git-remote.d.ts.map +1 -1
- package/dist/tools/git-remote.js +17 -27
- package/dist/tools/git-remote.js.map +1 -1
- package/dist/tools/git-stash.d.ts.map +1 -1
- package/dist/tools/git-stash.js +46 -25
- package/dist/tools/git-stash.js.map +1 -1
- package/dist/tools/git-update-project.d.ts +155 -0
- package/dist/tools/git-update-project.d.ts.map +1 -1
- package/dist/tools/git-update-project.js +349 -7
- package/dist/tools/git-update-project.js.map +1 -1
- package/dist/tools/git-workflow.d.ts +415 -0
- package/dist/tools/git-workflow.d.ts.map +1 -0
- package/dist/tools/git-workflow.js +644 -0
- package/dist/tools/git-workflow.js.map +1 -0
- package/package.json +69 -60
|
@@ -0,0 +1,644 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.gitWorkflowTool = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* Tool: git-workflow
|
|
7
|
+
*
|
|
8
|
+
* DESCRIÇÃO:
|
|
9
|
+
* Automação completa de workflows de desenvolvimento para programadores individuais autônomos
|
|
10
|
+
*
|
|
11
|
+
* FUNCIONALIDADES:
|
|
12
|
+
* - Setup inicial automatizado de projetos
|
|
13
|
+
* - Workflows diários de desenvolvimento
|
|
14
|
+
* - Gerenciamento de features automatizado
|
|
15
|
+
* - Processos de release completos
|
|
16
|
+
* - Limpeza automática de repositórios
|
|
17
|
+
* - Templates para diferentes tipos de projeto
|
|
18
|
+
*
|
|
19
|
+
* USO:
|
|
20
|
+
* - Automação de todo o ciclo de desenvolvimento
|
|
21
|
+
* - Setup consistente de novos projetos
|
|
22
|
+
* - Workflows padronizados
|
|
23
|
+
* - Eliminação de tarefas manuais repetitivas
|
|
24
|
+
*
|
|
25
|
+
* OTIMIZADO PARA AI AGENTS:
|
|
26
|
+
* - Interface simples e intuitiva
|
|
27
|
+
* - Auto-detecção de contexto
|
|
28
|
+
* - Validação automática
|
|
29
|
+
* - Error handling robusto
|
|
30
|
+
* - Workflows em uma única chamada
|
|
31
|
+
*/
|
|
32
|
+
const GitWorkflowInputSchema = zod_1.z.discriminatedUnion('action', [
|
|
33
|
+
// Action: setup-project - Setup inicial completo
|
|
34
|
+
zod_1.z.object({
|
|
35
|
+
action: zod_1.z.literal('setup-project'),
|
|
36
|
+
repo: zod_1.z.string(),
|
|
37
|
+
provider: zod_1.z.enum(['gitea', 'github']),
|
|
38
|
+
projectPath: zod_1.z.string(),
|
|
39
|
+
template: zod_1.z.enum(['node-api', 'react-app', 'python-package', 'go-service', 'rust-binary']).optional().default('node-api'),
|
|
40
|
+
platforms: zod_1.z.array(zod_1.z.enum(['npm', 'github', 'docker', 'pypi'])).optional().default(['github']),
|
|
41
|
+
autoConfigure: zod_1.z.boolean().optional().default(true),
|
|
42
|
+
createRemote: zod_1.z.boolean().optional().default(true),
|
|
43
|
+
initGit: zod_1.z.boolean().optional().default(true)
|
|
44
|
+
}),
|
|
45
|
+
// Action: daily-dev - Workflow diário completo
|
|
46
|
+
zod_1.z.object({
|
|
47
|
+
action: zod_1.z.literal('daily-dev'),
|
|
48
|
+
projectPath: zod_1.z.string(),
|
|
49
|
+
autoCommit: zod_1.z.boolean().optional().default(true),
|
|
50
|
+
autoPush: zod_1.z.boolean().optional().default(true),
|
|
51
|
+
createBackup: zod_1.z.boolean().optional().default(true),
|
|
52
|
+
runTests: zod_1.z.boolean().optional().default(false),
|
|
53
|
+
checkLint: zod_1.z.boolean().optional().default(false)
|
|
54
|
+
}),
|
|
55
|
+
// Action: feature-dev - Desenvolvimento de features
|
|
56
|
+
zod_1.z.object({
|
|
57
|
+
action: zod_1.z.literal('feature-dev'),
|
|
58
|
+
projectPath: zod_1.z.string(),
|
|
59
|
+
featureName: zod_1.z.string(),
|
|
60
|
+
createBranch: zod_1.z.boolean().optional().default(true),
|
|
61
|
+
baseBranch: zod_1.z.string().optional().default('main'),
|
|
62
|
+
mergeWhenReady: zod_1.z.boolean().optional().default(true),
|
|
63
|
+
runTests: zod_1.z.boolean().optional().default(true),
|
|
64
|
+
createPR: zod_1.z.boolean().optional().default(false)
|
|
65
|
+
}),
|
|
66
|
+
// Action: release-workflow - Processo completo de release
|
|
67
|
+
zod_1.z.object({
|
|
68
|
+
action: zod_1.z.literal('release-workflow'),
|
|
69
|
+
projectPath: zod_1.z.string(),
|
|
70
|
+
version: zod_1.z.string().optional(),
|
|
71
|
+
platforms: zod_1.z.array(zod_1.z.enum(['npm', 'github', 'docker', 'pypi'])).optional().default(['npm', 'github']),
|
|
72
|
+
createTag: zod_1.z.boolean().optional().default(true),
|
|
73
|
+
createRelease: zod_1.z.boolean().optional().default(true),
|
|
74
|
+
updateChangelog: zod_1.z.boolean().optional().default(true),
|
|
75
|
+
runTests: zod_1.z.boolean().optional().default(true)
|
|
76
|
+
}),
|
|
77
|
+
// Action: cleanup-workflow - Limpeza de repositório
|
|
78
|
+
zod_1.z.object({
|
|
79
|
+
action: zod_1.z.literal('cleanup-workflow'),
|
|
80
|
+
projectPath: zod_1.z.string(),
|
|
81
|
+
removeMergedBranches: zod_1.z.boolean().optional().default(true),
|
|
82
|
+
removeOldBackups: zod_1.z.boolean().optional().default(true),
|
|
83
|
+
optimizeRepository: zod_1.z.boolean().optional().default(true),
|
|
84
|
+
daysOld: zod_1.z.number().optional().default(30)
|
|
85
|
+
})
|
|
86
|
+
]);
|
|
87
|
+
const GitWorkflowResultSchema = zod_1.z.object({
|
|
88
|
+
success: zod_1.z.boolean(),
|
|
89
|
+
action: zod_1.z.string(),
|
|
90
|
+
message: zod_1.z.string(),
|
|
91
|
+
data: zod_1.z.any().optional(),
|
|
92
|
+
error: zod_1.z.string().optional()
|
|
93
|
+
});
|
|
94
|
+
exports.gitWorkflowTool = {
|
|
95
|
+
name: 'git-workflow',
|
|
96
|
+
description: 'tool: ⚡ WORKFLOW AUTOMATION - Sistema completo de automação para programadores individuais\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\nAÇÕES DISPONÍVEIS (5 workflows automatizados):\\n\\n🚀 SETUP COMPLETO:\\n• setup-project: Setup inicial automatizado com templates\\n\\n📅 WORKFLOWS DIÁRIOS:\\n• daily-dev: Workflow diário completo (backup+commit+push)\\n• feature-dev: Desenvolvimento de features automatizado\\n\\n🎯 RELEASE COMPLETO:\\n• release-workflow: Processo completo de release\\n\\n🧹 MANUTENÇÃO:\\n• cleanup-workflow: Limpeza automática de repositório\\n\\n🤖 OTIMIZADO PARA AI AGENTS:\\n• Workflows em 1 chamada\\n• Auto-configuração inteligente\\n• Templates padronizados\\n• Validação automática\\n• Error recovery automático\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n💡 USO TÍPICO:\\n1. setup-project (novo projeto)\\n2. daily-dev (desenvolvimento diário)\\n3. feature-dev (nova feature)\\n4. release-workflow (publicação)\\n5. cleanup-workflow (manutenção)\\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
97
|
+
inputSchema: {
|
|
98
|
+
type: 'object',
|
|
99
|
+
properties: {
|
|
100
|
+
action: {
|
|
101
|
+
type: 'string',
|
|
102
|
+
enum: ['setup-project', 'daily-dev', 'feature-dev', 'release-workflow', 'cleanup-workflow'],
|
|
103
|
+
description: 'Workflow action to perform'
|
|
104
|
+
},
|
|
105
|
+
repo: { type: 'string', description: 'Repository name' },
|
|
106
|
+
provider: { type: 'string', enum: ['gitea', 'github'], description: 'Provider to use' },
|
|
107
|
+
projectPath: { type: 'string', description: 'Local project path' },
|
|
108
|
+
template: {
|
|
109
|
+
type: 'string',
|
|
110
|
+
enum: ['node-api', 'react-app', 'python-package', 'go-service', 'rust-binary'],
|
|
111
|
+
description: 'Project template to use',
|
|
112
|
+
default: 'node-api'
|
|
113
|
+
},
|
|
114
|
+
platforms: {
|
|
115
|
+
type: 'array',
|
|
116
|
+
items: { type: 'string', enum: ['npm', 'github', 'docker', 'pypi'] },
|
|
117
|
+
description: 'Platforms for setup/publishing',
|
|
118
|
+
default: ['github']
|
|
119
|
+
},
|
|
120
|
+
autoConfigure: { type: 'boolean', description: 'Auto-configure project', default: true },
|
|
121
|
+
createRemote: { type: 'boolean', description: 'Create remote repository', default: true },
|
|
122
|
+
initGit: { type: 'boolean', description: 'Initialize Git repository', default: true },
|
|
123
|
+
autoCommit: { type: 'boolean', description: 'Auto-commit changes', default: true },
|
|
124
|
+
autoPush: { type: 'boolean', description: 'Auto-push after commit', default: true },
|
|
125
|
+
createBackup: { type: 'boolean', description: 'Create backup before operations', default: true },
|
|
126
|
+
runTests: { type: 'boolean', description: 'Run tests before operations', default: true },
|
|
127
|
+
checkLint: { type: 'boolean', description: 'Check linting', default: false },
|
|
128
|
+
featureName: { type: 'string', description: 'Name of the feature to develop' },
|
|
129
|
+
createBranch: { type: 'boolean', description: 'Create feature branch', default: true },
|
|
130
|
+
baseBranch: { type: 'string', description: 'Base branch for feature', default: 'main' },
|
|
131
|
+
mergeWhenReady: { type: 'boolean', description: 'Merge when feature is ready', default: true },
|
|
132
|
+
createPR: { type: 'boolean', description: 'Create pull request', default: false },
|
|
133
|
+
version: { type: 'string', description: 'Release version' },
|
|
134
|
+
createTag: { type: 'boolean', description: 'Create release tag', default: true },
|
|
135
|
+
createRelease: { type: 'boolean', description: 'Create GitHub release', default: true },
|
|
136
|
+
updateChangelog: { type: 'boolean', description: 'Update changelog', default: true },
|
|
137
|
+
removeMergedBranches: { type: 'boolean', description: 'Remove merged branches', default: true },
|
|
138
|
+
removeOldBackups: { type: 'boolean', description: 'Remove old backup stashes', default: true },
|
|
139
|
+
optimizeRepository: { type: 'boolean', description: 'Optimize repository', default: true },
|
|
140
|
+
daysOld: { type: 'number', description: 'Days threshold for cleanup', default: 30 }
|
|
141
|
+
},
|
|
142
|
+
required: ['action', 'projectPath']
|
|
143
|
+
},
|
|
144
|
+
async handler(input) {
|
|
145
|
+
try {
|
|
146
|
+
const validatedInput = GitWorkflowInputSchema.parse(input);
|
|
147
|
+
switch (validatedInput.action) {
|
|
148
|
+
case 'setup-project':
|
|
149
|
+
return await this.handleSetupProject(validatedInput);
|
|
150
|
+
case 'daily-dev':
|
|
151
|
+
return await this.handleDailyDev(validatedInput);
|
|
152
|
+
case 'feature-dev':
|
|
153
|
+
return await this.handleFeatureDev(validatedInput);
|
|
154
|
+
case 'release-workflow':
|
|
155
|
+
return await this.handleReleaseWorkflow(validatedInput);
|
|
156
|
+
case 'cleanup-workflow':
|
|
157
|
+
return await this.handleCleanupWorkflow(validatedInput);
|
|
158
|
+
default:
|
|
159
|
+
throw new Error(`Action '${validatedInput.action}' não suportada`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return {
|
|
164
|
+
success: false,
|
|
165
|
+
action: input.action,
|
|
166
|
+
message: `Erro na operação ${input.action}`,
|
|
167
|
+
error: error instanceof Error ? error.message : String(error)
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
// Handler para setup-project
|
|
172
|
+
async handleSetupProject(params) {
|
|
173
|
+
try {
|
|
174
|
+
const { repo, provider, projectPath, template = 'node-api', platforms = ['github'], autoConfigure = true, createRemote = true, initGit = true } = params;
|
|
175
|
+
const results = {
|
|
176
|
+
gitInit: false,
|
|
177
|
+
remoteCreated: false,
|
|
178
|
+
templateApplied: false,
|
|
179
|
+
configured: false
|
|
180
|
+
};
|
|
181
|
+
// 1. Initialize Git if requested
|
|
182
|
+
if (initGit) {
|
|
183
|
+
const initResult = await this.initializeGit(projectPath);
|
|
184
|
+
results.gitInit = initResult.success;
|
|
185
|
+
}
|
|
186
|
+
// 2. Create remote repository if requested
|
|
187
|
+
if (createRemote) {
|
|
188
|
+
const remoteResult = await this.createRemoteRepository(repo, provider, projectPath);
|
|
189
|
+
results.remoteCreated = remoteResult.success;
|
|
190
|
+
}
|
|
191
|
+
// 3. Apply template
|
|
192
|
+
const templateResult = await this.applyTemplate(projectPath, template);
|
|
193
|
+
results.templateApplied = templateResult.success;
|
|
194
|
+
// 4. Auto-configure if requested
|
|
195
|
+
if (autoConfigure) {
|
|
196
|
+
const configResult = await this.autoConfigureProject(projectPath, template, platforms);
|
|
197
|
+
results.configured = configResult.success;
|
|
198
|
+
}
|
|
199
|
+
const allSuccessful = Object.values(results).every(r => r);
|
|
200
|
+
return {
|
|
201
|
+
success: allSuccessful,
|
|
202
|
+
action: 'setup-project',
|
|
203
|
+
message: `Setup de projeto ${allSuccessful ? 'concluído' : 'com problemas'}`,
|
|
204
|
+
data: {
|
|
205
|
+
repo,
|
|
206
|
+
template,
|
|
207
|
+
platforms,
|
|
208
|
+
results,
|
|
209
|
+
implementation: 'SETUP_PROJECT_v2.39.0'
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
return {
|
|
215
|
+
success: false,
|
|
216
|
+
action: 'setup-project',
|
|
217
|
+
message: 'Erro no setup de projeto',
|
|
218
|
+
error: error instanceof Error ? error.message : String(error)
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
// Handler para daily-dev
|
|
223
|
+
async handleDailyDev(params) {
|
|
224
|
+
try {
|
|
225
|
+
const { projectPath, autoCommit = true, autoPush = true, createBackup = true, runTests = false, checkLint = false } = params;
|
|
226
|
+
const results = {
|
|
227
|
+
backup: false,
|
|
228
|
+
tests: false,
|
|
229
|
+
lint: false,
|
|
230
|
+
commit: false,
|
|
231
|
+
push: false
|
|
232
|
+
};
|
|
233
|
+
// 1. Create backup if requested
|
|
234
|
+
if (createBackup) {
|
|
235
|
+
const backupResult = await this.createBackup(projectPath);
|
|
236
|
+
results.backup = backupResult.success;
|
|
237
|
+
}
|
|
238
|
+
// 2. Run tests if requested
|
|
239
|
+
if (runTests) {
|
|
240
|
+
const testResult = await this.runTests(projectPath);
|
|
241
|
+
results.tests = testResult.success;
|
|
242
|
+
}
|
|
243
|
+
// 3. Check lint if requested
|
|
244
|
+
if (checkLint) {
|
|
245
|
+
const lintResult = await this.checkLinting(projectPath);
|
|
246
|
+
results.lint = lintResult.success;
|
|
247
|
+
}
|
|
248
|
+
// 4. Commit changes if requested
|
|
249
|
+
if (autoCommit) {
|
|
250
|
+
const commitResult = await this.smartCommit(projectPath);
|
|
251
|
+
results.commit = commitResult.success;
|
|
252
|
+
}
|
|
253
|
+
// 5. Push if requested
|
|
254
|
+
if (autoPush && results.commit) {
|
|
255
|
+
const pushResult = await this.pushChanges(projectPath);
|
|
256
|
+
results.push = pushResult.success;
|
|
257
|
+
}
|
|
258
|
+
const allSuccessful = Object.values(results).filter(r => r !== false).every(r => r);
|
|
259
|
+
return {
|
|
260
|
+
success: allSuccessful,
|
|
261
|
+
action: 'daily-dev',
|
|
262
|
+
message: `Workflow diário ${allSuccessful ? 'concluído' : 'com problemas'}`,
|
|
263
|
+
data: {
|
|
264
|
+
results,
|
|
265
|
+
implementation: 'DAILY_DEV_v2.39.0'
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
return {
|
|
271
|
+
success: false,
|
|
272
|
+
action: 'daily-dev',
|
|
273
|
+
message: 'Erro no workflow diário',
|
|
274
|
+
error: error instanceof Error ? error.message : String(error)
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
// Handler para feature-dev
|
|
279
|
+
async handleFeatureDev(params) {
|
|
280
|
+
try {
|
|
281
|
+
const { projectPath, featureName, createBranch = true, baseBranch = 'main', mergeWhenReady = true, runTests = true, createPR = false } = params;
|
|
282
|
+
const results = {
|
|
283
|
+
branch: false,
|
|
284
|
+
tests: false,
|
|
285
|
+
merge: false,
|
|
286
|
+
pr: false
|
|
287
|
+
};
|
|
288
|
+
// 1. Create feature branch if requested
|
|
289
|
+
if (createBranch) {
|
|
290
|
+
const branchResult = await this.createFeatureBranch(projectPath, featureName, baseBranch);
|
|
291
|
+
results.branch = branchResult.success;
|
|
292
|
+
}
|
|
293
|
+
// 2. Run tests if requested
|
|
294
|
+
if (runTests) {
|
|
295
|
+
const testResult = await this.runTests(projectPath);
|
|
296
|
+
results.tests = testResult.success;
|
|
297
|
+
}
|
|
298
|
+
// 3. Merge when ready if requested
|
|
299
|
+
if (mergeWhenReady && results.tests) {
|
|
300
|
+
const mergeResult = await this.mergeFeature(projectPath, featureName, baseBranch);
|
|
301
|
+
results.merge = mergeResult.success;
|
|
302
|
+
}
|
|
303
|
+
// 4. Create PR if requested
|
|
304
|
+
if (createPR && results.merge) {
|
|
305
|
+
const prResult = await this.createPullRequest(projectPath, featureName);
|
|
306
|
+
results.pr = prResult.success;
|
|
307
|
+
}
|
|
308
|
+
const allSuccessful = Object.values(results).filter(r => r !== false).every(r => r);
|
|
309
|
+
return {
|
|
310
|
+
success: allSuccessful,
|
|
311
|
+
action: 'feature-dev',
|
|
312
|
+
message: `Desenvolvimento de feature ${allSuccessful ? 'concluído' : 'com problemas'}`,
|
|
313
|
+
data: {
|
|
314
|
+
featureName,
|
|
315
|
+
results,
|
|
316
|
+
implementation: 'FEATURE_DEV_v2.39.0'
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
return {
|
|
322
|
+
success: false,
|
|
323
|
+
action: 'feature-dev',
|
|
324
|
+
message: 'Erro no desenvolvimento de feature',
|
|
325
|
+
error: error instanceof Error ? error.message : String(error)
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
// Handler para release-workflow
|
|
330
|
+
async handleReleaseWorkflow(params) {
|
|
331
|
+
try {
|
|
332
|
+
const { projectPath, version, platforms = ['npm', 'github'], createTag = true, createRelease = true, updateChangelog = true, runTests = true } = params;
|
|
333
|
+
const results = {
|
|
334
|
+
tests: false,
|
|
335
|
+
changelog: false,
|
|
336
|
+
tag: false,
|
|
337
|
+
release: false
|
|
338
|
+
};
|
|
339
|
+
// 1. Run tests if requested
|
|
340
|
+
if (runTests) {
|
|
341
|
+
const testResult = await this.runTests(projectPath);
|
|
342
|
+
results.tests = testResult.success;
|
|
343
|
+
}
|
|
344
|
+
// 2. Update changelog if requested
|
|
345
|
+
if (updateChangelog) {
|
|
346
|
+
const changelogResult = await this.updateChangelog(projectPath, version || '1.0.0');
|
|
347
|
+
results.changelog = changelogResult.success;
|
|
348
|
+
}
|
|
349
|
+
// 3. Create tag if requested
|
|
350
|
+
if (createTag && results.tests) {
|
|
351
|
+
const tagResult = await this.createReleaseTag(projectPath, version || '1.0.0');
|
|
352
|
+
results.tag = tagResult.success;
|
|
353
|
+
}
|
|
354
|
+
// 4. Create release if requested
|
|
355
|
+
if (createRelease && results.tag) {
|
|
356
|
+
const releaseResult = await this.createRelease(projectPath, version || '1.0.0', platforms);
|
|
357
|
+
results.release = releaseResult.success;
|
|
358
|
+
}
|
|
359
|
+
const allSuccessful = Object.values(results).filter(r => r !== false).every(r => r);
|
|
360
|
+
return {
|
|
361
|
+
success: allSuccessful,
|
|
362
|
+
action: 'release-workflow',
|
|
363
|
+
message: `Workflow de release ${allSuccessful ? 'concluído' : 'com problemas'}`,
|
|
364
|
+
data: {
|
|
365
|
+
version,
|
|
366
|
+
platforms,
|
|
367
|
+
results,
|
|
368
|
+
implementation: 'RELEASE_WORKFLOW_v2.39.0'
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
return {
|
|
374
|
+
success: false,
|
|
375
|
+
action: 'release-workflow',
|
|
376
|
+
message: 'Erro no workflow de release',
|
|
377
|
+
error: error instanceof Error ? error.message : String(error)
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
// Handler para cleanup-workflow
|
|
382
|
+
async handleCleanupWorkflow(params) {
|
|
383
|
+
try {
|
|
384
|
+
const { projectPath, removeMergedBranches = true, removeOldBackups = true, optimizeRepository = true, daysOld = 30 } = params;
|
|
385
|
+
const results = {
|
|
386
|
+
mergedBranches: false,
|
|
387
|
+
oldBackups: false,
|
|
388
|
+
optimization: false
|
|
389
|
+
};
|
|
390
|
+
// 1. Remove merged branches if requested
|
|
391
|
+
if (removeMergedBranches) {
|
|
392
|
+
const branchResult = await this.removeMergedBranches(projectPath);
|
|
393
|
+
results.mergedBranches = branchResult.success;
|
|
394
|
+
}
|
|
395
|
+
// 2. Remove old backup stashes if requested
|
|
396
|
+
if (removeOldBackups) {
|
|
397
|
+
const backupResult = await this.removeOldBackups(projectPath, daysOld);
|
|
398
|
+
results.oldBackups = backupResult.success;
|
|
399
|
+
}
|
|
400
|
+
// 3. Optimize repository if requested
|
|
401
|
+
if (optimizeRepository) {
|
|
402
|
+
const optimizeResult = await this.optimizeRepository(projectPath);
|
|
403
|
+
results.optimization = optimizeResult.success;
|
|
404
|
+
}
|
|
405
|
+
const allSuccessful = Object.values(results).filter(r => r !== false).every(r => r);
|
|
406
|
+
return {
|
|
407
|
+
success: allSuccessful,
|
|
408
|
+
action: 'cleanup-workflow',
|
|
409
|
+
message: `Limpeza de repositório ${allSuccessful ? 'concluída' : 'com problemas'}`,
|
|
410
|
+
data: {
|
|
411
|
+
results,
|
|
412
|
+
daysOld,
|
|
413
|
+
implementation: 'CLEANUP_WORKFLOW_v2.39.0'
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
return {
|
|
419
|
+
success: false,
|
|
420
|
+
action: 'cleanup-workflow',
|
|
421
|
+
message: 'Erro na limpeza de repositório',
|
|
422
|
+
error: error instanceof Error ? error.message : String(error)
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
// Helper methods
|
|
427
|
+
async initializeGit(projectPath) {
|
|
428
|
+
try {
|
|
429
|
+
// TODO: Initialize Git repository
|
|
430
|
+
return { success: true };
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
return {
|
|
434
|
+
success: false,
|
|
435
|
+
error: error instanceof Error ? error.message : String(error)
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
async createRemoteRepository(repo, provider, projectPath) {
|
|
440
|
+
try {
|
|
441
|
+
// TODO: Create remote repository
|
|
442
|
+
return { success: true };
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
return {
|
|
446
|
+
success: false,
|
|
447
|
+
error: error instanceof Error ? error.message : String(error)
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
async applyTemplate(projectPath, template) {
|
|
452
|
+
try {
|
|
453
|
+
// TODO: Apply project template
|
|
454
|
+
return { success: true };
|
|
455
|
+
}
|
|
456
|
+
catch (error) {
|
|
457
|
+
return {
|
|
458
|
+
success: false,
|
|
459
|
+
error: error instanceof Error ? error.message : String(error)
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
async autoConfigureProject(projectPath, template, platforms) {
|
|
464
|
+
try {
|
|
465
|
+
// TODO: Auto-configure project
|
|
466
|
+
return { success: true };
|
|
467
|
+
}
|
|
468
|
+
catch (error) {
|
|
469
|
+
return {
|
|
470
|
+
success: false,
|
|
471
|
+
error: error instanceof Error ? error.message : String(error)
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
},
|
|
475
|
+
async createBackup(projectPath) {
|
|
476
|
+
try {
|
|
477
|
+
// TODO: Create backup
|
|
478
|
+
return { success: true };
|
|
479
|
+
}
|
|
480
|
+
catch (error) {
|
|
481
|
+
return {
|
|
482
|
+
success: false,
|
|
483
|
+
error: error instanceof Error ? error.message : String(error)
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
async runTests(projectPath) {
|
|
488
|
+
try {
|
|
489
|
+
// TODO: Run test suite
|
|
490
|
+
return { success: true };
|
|
491
|
+
}
|
|
492
|
+
catch (error) {
|
|
493
|
+
return {
|
|
494
|
+
success: false,
|
|
495
|
+
error: error instanceof Error ? error.message : String(error)
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
},
|
|
499
|
+
async checkLinting(projectPath) {
|
|
500
|
+
try {
|
|
501
|
+
// TODO: Check linting
|
|
502
|
+
return { success: true };
|
|
503
|
+
}
|
|
504
|
+
catch (error) {
|
|
505
|
+
return {
|
|
506
|
+
success: false,
|
|
507
|
+
error: error instanceof Error ? error.message : String(error)
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
},
|
|
511
|
+
async smartCommit(projectPath) {
|
|
512
|
+
try {
|
|
513
|
+
// TODO: Smart commit
|
|
514
|
+
return { success: true };
|
|
515
|
+
}
|
|
516
|
+
catch (error) {
|
|
517
|
+
return {
|
|
518
|
+
success: false,
|
|
519
|
+
error: error instanceof Error ? error.message : String(error)
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
async pushChanges(projectPath) {
|
|
524
|
+
try {
|
|
525
|
+
// TODO: Push changes
|
|
526
|
+
return { success: true };
|
|
527
|
+
}
|
|
528
|
+
catch (error) {
|
|
529
|
+
return {
|
|
530
|
+
success: false,
|
|
531
|
+
error: error instanceof Error ? error.message : String(error)
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
},
|
|
535
|
+
async createFeatureBranch(projectPath, featureName, baseBranch) {
|
|
536
|
+
try {
|
|
537
|
+
// TODO: Create feature branch
|
|
538
|
+
return { success: true };
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
return {
|
|
542
|
+
success: false,
|
|
543
|
+
error: error instanceof Error ? error.message : String(error)
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
},
|
|
547
|
+
async mergeFeature(projectPath, featureName, baseBranch) {
|
|
548
|
+
try {
|
|
549
|
+
// TODO: Merge feature
|
|
550
|
+
return { success: true };
|
|
551
|
+
}
|
|
552
|
+
catch (error) {
|
|
553
|
+
return {
|
|
554
|
+
success: false,
|
|
555
|
+
error: error instanceof Error ? error.message : String(error)
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
},
|
|
559
|
+
async createPullRequest(projectPath, featureName) {
|
|
560
|
+
try {
|
|
561
|
+
// TODO: Create pull request
|
|
562
|
+
return { success: true };
|
|
563
|
+
}
|
|
564
|
+
catch (error) {
|
|
565
|
+
return {
|
|
566
|
+
success: false,
|
|
567
|
+
error: error instanceof Error ? error.message : String(error)
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
async updateChangelog(projectPath, version) {
|
|
572
|
+
try {
|
|
573
|
+
// TODO: Update changelog
|
|
574
|
+
return { success: true };
|
|
575
|
+
}
|
|
576
|
+
catch (error) {
|
|
577
|
+
return {
|
|
578
|
+
success: false,
|
|
579
|
+
error: error instanceof Error ? error.message : String(error)
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
async createReleaseTag(projectPath, version) {
|
|
584
|
+
try {
|
|
585
|
+
// TODO: Create release tag
|
|
586
|
+
return { success: true };
|
|
587
|
+
}
|
|
588
|
+
catch (error) {
|
|
589
|
+
return {
|
|
590
|
+
success: false,
|
|
591
|
+
error: error instanceof Error ? error.message : String(error)
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
async createRelease(projectPath, version, platforms) {
|
|
596
|
+
try {
|
|
597
|
+
// TODO: Create release
|
|
598
|
+
return { success: true };
|
|
599
|
+
}
|
|
600
|
+
catch (error) {
|
|
601
|
+
return {
|
|
602
|
+
success: false,
|
|
603
|
+
error: error instanceof Error ? error.message : String(error)
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
},
|
|
607
|
+
async removeMergedBranches(projectPath) {
|
|
608
|
+
try {
|
|
609
|
+
// TODO: Remove merged branches
|
|
610
|
+
return { success: true };
|
|
611
|
+
}
|
|
612
|
+
catch (error) {
|
|
613
|
+
return {
|
|
614
|
+
success: false,
|
|
615
|
+
error: error instanceof Error ? error.message : String(error)
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
},
|
|
619
|
+
async removeOldBackups(projectPath, daysOld) {
|
|
620
|
+
try {
|
|
621
|
+
// TODO: Remove old backup stashes
|
|
622
|
+
return { success: true };
|
|
623
|
+
}
|
|
624
|
+
catch (error) {
|
|
625
|
+
return {
|
|
626
|
+
success: false,
|
|
627
|
+
error: error instanceof Error ? error.message : String(error)
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
},
|
|
631
|
+
async optimizeRepository(projectPath) {
|
|
632
|
+
try {
|
|
633
|
+
// TODO: Optimize repository
|
|
634
|
+
return { success: true };
|
|
635
|
+
}
|
|
636
|
+
catch (error) {
|
|
637
|
+
return {
|
|
638
|
+
success: false,
|
|
639
|
+
error: error instanceof Error ? error.message : String(error)
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
};
|
|
644
|
+
//# sourceMappingURL=git-workflow.js.map
|