@payfit/iac 0.1.0-ephemeral-nx-common-packages-migration.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 +85 -0
- package/dist/executors/stack-migration/README.md +79 -0
- package/dist/executors/stack-migration/lib/constants.d.ts +33 -0
- package/dist/executors/stack-migration/lib/constants.js +44 -0
- package/dist/executors/stack-migration/lib/constants.js.map +1 -0
- package/dist/executors/stack-migration/lib/file-operations.d.ts +23 -0
- package/dist/executors/stack-migration/lib/file-operations.js +121 -0
- package/dist/executors/stack-migration/lib/file-operations.js.map +1 -0
- package/dist/executors/stack-migration/lib/git-operations.d.ts +19 -0
- package/dist/executors/stack-migration/lib/git-operations.js +90 -0
- package/dist/executors/stack-migration/lib/git-operations.js.map +1 -0
- package/dist/executors/stack-migration/lib/index.d.ts +10 -0
- package/dist/executors/stack-migration/lib/index.js +14 -0
- package/dist/executors/stack-migration/lib/index.js.map +1 -0
- package/dist/executors/stack-migration/lib/logger.d.ts +9 -0
- package/dist/executors/stack-migration/lib/logger.js +33 -0
- package/dist/executors/stack-migration/lib/logger.js.map +1 -0
- package/dist/executors/stack-migration/lib/migration-helper.d.ts +40 -0
- package/dist/executors/stack-migration/lib/migration-helper.js +209 -0
- package/dist/executors/stack-migration/lib/migration-helper.js.map +1 -0
- package/dist/executors/stack-migration/lib/migration-tool.d.ts +71 -0
- package/dist/executors/stack-migration/lib/migration-tool.js +857 -0
- package/dist/executors/stack-migration/lib/migration-tool.js.map +1 -0
- package/dist/executors/stack-migration/lib/path-builder.d.ts +20 -0
- package/dist/executors/stack-migration/lib/path-builder.js +58 -0
- package/dist/executors/stack-migration/lib/path-builder.js.map +1 -0
- package/dist/executors/stack-migration/lib/spacelift-client.d.ts +25 -0
- package/dist/executors/stack-migration/lib/spacelift-client.js +117 -0
- package/dist/executors/stack-migration/lib/spacelift-client.js.map +1 -0
- package/dist/executors/stack-migration/lib/templates/index.d.ts +7 -0
- package/dist/executors/stack-migration/lib/templates/index.js +11 -0
- package/dist/executors/stack-migration/lib/templates/index.js.map +1 -0
- package/dist/executors/stack-migration/lib/templates/mermaid-diagram.d.ts +13 -0
- package/dist/executors/stack-migration/lib/templates/mermaid-diagram.js +45 -0
- package/dist/executors/stack-migration/lib/templates/mermaid-diagram.js.map +1 -0
- package/dist/executors/stack-migration/lib/templates/message-templates.d.ts +16 -0
- package/dist/executors/stack-migration/lib/templates/message-templates.js +42 -0
- package/dist/executors/stack-migration/lib/templates/message-templates.js.map +1 -0
- package/dist/executors/stack-migration/lib/templates/pr-templates.d.ts +32 -0
- package/dist/executors/stack-migration/lib/templates/pr-templates.js +108 -0
- package/dist/executors/stack-migration/lib/templates/pr-templates.js.map +1 -0
- package/dist/executors/stack-migration/lib/templates/procedure-template.d.ts +6 -0
- package/dist/executors/stack-migration/lib/templates/procedure-template.js +62 -0
- package/dist/executors/stack-migration/lib/templates/procedure-template.js.map +1 -0
- package/dist/executors/stack-migration/lib/types.d.ts +53 -0
- package/dist/executors/stack-migration/lib/types.js +3 -0
- package/dist/executors/stack-migration/lib/types.js.map +1 -0
- package/dist/executors/stack-migration/schema.d.ts +20 -0
- package/dist/executors/stack-migration/schema.json +60 -0
- package/dist/executors/stack-migration/stack-migration.d.ts +4 -0
- package/dist/executors/stack-migration/stack-migration.js +79 -0
- package/dist/executors/stack-migration/stack-migration.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +155 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/terraform-detection.d.ts +2 -0
- package/dist/utils/terraform-detection.js +10 -0
- package/dist/utils/terraform-detection.js.map +1 -0
- package/executors.json +9 -0
- package/package.json +38 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MigrationHelper = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const file_operations_1 = require("./file-operations");
|
|
9
|
+
const git_operations_1 = require("./git-operations");
|
|
10
|
+
const logger_1 = require("./logger");
|
|
11
|
+
const path_builder_1 = require("./path-builder");
|
|
12
|
+
class MigrationHelper {
|
|
13
|
+
constructor(dryRun = false, serviceRepoPath = process.cwd()) {
|
|
14
|
+
this.dryRun = dryRun;
|
|
15
|
+
this.logger = new logger_1.MigrationLogger();
|
|
16
|
+
this.config = {
|
|
17
|
+
serviceRepository: {
|
|
18
|
+
name: '',
|
|
19
|
+
path: serviceRepoPath,
|
|
20
|
+
domain: '',
|
|
21
|
+
team: '',
|
|
22
|
+
oktaGroups: [],
|
|
23
|
+
},
|
|
24
|
+
repositories: {
|
|
25
|
+
domainEnrollment: '',
|
|
26
|
+
iacDeploy: '',
|
|
27
|
+
},
|
|
28
|
+
stacks: [],
|
|
29
|
+
generatedFiles: {},
|
|
30
|
+
};
|
|
31
|
+
this.paths = new path_builder_1.MigrationPaths(serviceRepoPath);
|
|
32
|
+
this.git = new git_operations_1.GitOperations(dryRun, this.logger);
|
|
33
|
+
this.files = new file_operations_1.FileOperations(dryRun, this.logger);
|
|
34
|
+
}
|
|
35
|
+
async ask(question) {
|
|
36
|
+
const answer = await logger_1.consola.prompt(question, {
|
|
37
|
+
type: 'text',
|
|
38
|
+
});
|
|
39
|
+
if (answer === null || answer === undefined) {
|
|
40
|
+
// User cancelled
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
return String(answer).trim();
|
|
44
|
+
}
|
|
45
|
+
async confirm(question, defaultYes = false) {
|
|
46
|
+
const answer = await logger_1.consola.prompt(question, {
|
|
47
|
+
type: 'confirm',
|
|
48
|
+
initial: defaultYes,
|
|
49
|
+
});
|
|
50
|
+
if (answer === null || answer === undefined) {
|
|
51
|
+
// User cancelled
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}
|
|
54
|
+
return Boolean(answer);
|
|
55
|
+
}
|
|
56
|
+
async getOrAskConfig(optionValue, promptText, defaultValue) {
|
|
57
|
+
if (optionValue) {
|
|
58
|
+
return Array.isArray(optionValue) ? optionValue.join(',') : optionValue;
|
|
59
|
+
}
|
|
60
|
+
const answer = await logger_1.consola.prompt(promptText, {
|
|
61
|
+
type: 'text',
|
|
62
|
+
initial: defaultValue,
|
|
63
|
+
});
|
|
64
|
+
if (answer === null || answer === undefined) {
|
|
65
|
+
// User cancelled
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
return String(answer) || defaultValue || '';
|
|
69
|
+
}
|
|
70
|
+
generateBranchName(prefix) {
|
|
71
|
+
return `${prefix}-${Date.now()}`;
|
|
72
|
+
}
|
|
73
|
+
exitWithMessage(message) {
|
|
74
|
+
this.logger.warn(message);
|
|
75
|
+
this.logger.info('Run this script again when ready');
|
|
76
|
+
process.exit(0);
|
|
77
|
+
}
|
|
78
|
+
exec(command, options = {}) {
|
|
79
|
+
try {
|
|
80
|
+
const result = (0, child_process_1.execSync)(command, {
|
|
81
|
+
encoding: 'utf-8',
|
|
82
|
+
cwd: options.cwd || process.cwd(),
|
|
83
|
+
stdio: options.silent ? 'pipe' : 'inherit',
|
|
84
|
+
maxBuffer: 100 * 1024 * 1024,
|
|
85
|
+
});
|
|
86
|
+
return result ? result.trim() : '';
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
90
|
+
throw new Error(`Command failed: ${command}\n${errorMessage}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
execSilent(command, cwd) {
|
|
94
|
+
return this.exec(command, { cwd, silent: true });
|
|
95
|
+
}
|
|
96
|
+
isSpacectlInstalled() {
|
|
97
|
+
try {
|
|
98
|
+
this.execSilent('which spacectl');
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async ensureSpacectlInstalled() {
|
|
106
|
+
if (this.isSpacectlInstalled()) {
|
|
107
|
+
this.logger.success('spacectl CLI is installed');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this.logger.warn('spacectl CLI is not installed');
|
|
111
|
+
if (this.dryRun) {
|
|
112
|
+
this.logger.info('[DRY RUN] Would install spacectl');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const shouldInstall = await this.confirm('Install spacectl using brew now?', true);
|
|
116
|
+
if (!shouldInstall) {
|
|
117
|
+
this.logger.error('spacectl CLI is required');
|
|
118
|
+
this.logger.info('Install spacectl using:');
|
|
119
|
+
this.logger.info(' brew install spacelift-io/spacelift/spacectl');
|
|
120
|
+
this.logger.info('');
|
|
121
|
+
this.logger.info('Or visit: https://github.com/spacelift-io/spacectl#installation');
|
|
122
|
+
throw new Error('spacectl CLI is required. Please install it and try again.');
|
|
123
|
+
}
|
|
124
|
+
this.logger.info('Installing spacectl...');
|
|
125
|
+
try {
|
|
126
|
+
this.exec('brew install spacelift-io/spacelift/spacectl');
|
|
127
|
+
this.logger.success('spacectl installed successfully');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
this.logger.error('Failed to install spacectl');
|
|
131
|
+
this.logger.info('Please install manually:');
|
|
132
|
+
this.logger.info(' brew install spacelift-io/spacelift/spacectl');
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
isSpacectlAuthenticated() {
|
|
137
|
+
try {
|
|
138
|
+
this.execSilent('spacectl profile current');
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async ensureSpacectlAuthentication() {
|
|
146
|
+
if (this.dryRun) {
|
|
147
|
+
this.logger.info('Skipping spacectl authentication check (dry-run mode)');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (this.isSpacectlAuthenticated()) {
|
|
151
|
+
this.logger.success('spacectl is authenticated');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
this.logger.warn('spacectl is not authenticated');
|
|
155
|
+
const shouldLogin = await this.confirm('Run spacectl profile login payfit now?', true);
|
|
156
|
+
if (!shouldLogin) {
|
|
157
|
+
throw new Error('spacectl authentication required. Run: spacectl profile login --endpoint https://payfit.app.spacelift.io/ payfit');
|
|
158
|
+
}
|
|
159
|
+
this.logger.info('Running spacectl profile login payfit...');
|
|
160
|
+
try {
|
|
161
|
+
this.exec('spacectl profile login --endpoint https://payfit.app.spacelift.io/ payfit');
|
|
162
|
+
this.logger.success('spacectl authentication complete');
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
this.logger.error('Failed to authenticate with spacectl');
|
|
166
|
+
this.logger.info('Please run manually:');
|
|
167
|
+
this.logger.info(' spacectl profile login --endpoint https://payfit.app.spacelift.io/ payfit');
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
getStacksGeneratorModuleKey(stack) {
|
|
172
|
+
return `${stack.identifier}${stack.environment ? `-${stack.environment}` : '-global'}${stack.region ? `-${stack.region}` : '-global'}`;
|
|
173
|
+
}
|
|
174
|
+
getStackModuleKey(stack) {
|
|
175
|
+
return `${stack.identifier}${stack.environment ? `-${stack.environment}` : ''}${stack.region ? `-${stack.region}` : ''}`;
|
|
176
|
+
}
|
|
177
|
+
saveMigrationState() {
|
|
178
|
+
if (this.dryRun) {
|
|
179
|
+
this.logger.info(`[DRY RUN] Would save migration state to ${constants_1.FILE_NAMES.migrationState}`);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const stateFile = this.paths.migrationState;
|
|
183
|
+
const state = {
|
|
184
|
+
timestamp: new Date().toISOString(),
|
|
185
|
+
config: this.config,
|
|
186
|
+
};
|
|
187
|
+
fs.writeFileSync(stateFile, JSON.stringify(state, null, 2));
|
|
188
|
+
this.logger.info(`Migration state saved to ${stateFile}`);
|
|
189
|
+
}
|
|
190
|
+
loadMigrationState() {
|
|
191
|
+
const stateFile = this.paths.migrationState;
|
|
192
|
+
if (!fs.existsSync(stateFile)) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
const state = JSON.parse(fs.readFileSync(stateFile, 'utf-8'));
|
|
197
|
+
this.config = { ...this.config, ...state.config, resuming: true };
|
|
198
|
+
this.logger.success('Loaded existing migration state');
|
|
199
|
+
this.logger.info(` Started at: ${state.timestamp}`);
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
this.logger.warn(`Failed to load migration state: ${error instanceof Error ? error.message : String(error)}`);
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.MigrationHelper = MigrationHelper;
|
|
209
|
+
//# sourceMappingURL=migration-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-helper.js","sourceRoot":"","sources":["../../../../src/executors/stack-migration/lib/migration-helper.ts"],"names":[],"mappings":";;;;AAAA,iDAAwC;AACxC,+CAAwB;AAIxB,2CAAwC;AACxC,uDAAkD;AAClD,qDAAgD;AAChD,qCAAmD;AACnD,iDAA+C;AAE/C,MAAa,eAAe;IAQ1B,YAAY,MAAM,GAAG,KAAK,EAAE,kBAA0B,OAAO,CAAC,GAAG,EAAE;QACjE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,wBAAe,EAAE,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG;YACZ,iBAAiB,EAAE;gBACjB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE;gBACR,UAAU,EAAE,EAAE;aACf;YACD,YAAY,EAAE;gBACZ,gBAAgB,EAAE,EAAE;gBACpB,SAAS,EAAE,EAAE;aACd;YACD,MAAM,EAAE,EAAE;YACV,cAAc,EAAE,EAAE;SACnB,CAAA;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,6BAAc,CAAC,eAAe,CAAC,CAAA;QAChD,IAAI,CAAC,GAAG,GAAG,IAAI,8BAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,gCAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,MAAM,MAAM,GAAG,MAAM,gBAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC5C,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,iBAAiB;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,UAAU,GAAG,KAAK;QAChD,MAAM,MAAM,GAAG,MAAM,gBAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC5C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,UAAU;SACpB,CAAC,CAAA;QACF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,iBAAiB;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,WAA0C,EAC1C,UAAkB,EAClB,YAAqB;QAErB,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;QACzE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,gBAAO,CAAC,MAAM,CAAC,UAAU,EAAE;YAC9C,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,YAAY;SACtB,CAAC,CAAA;QACF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,iBAAiB;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,kBAAkB,CAAC,MAAc;QAC/B,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IAClC,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,CACF,OAAe,EACf,UAA8C,EAAE;QAEhD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,OAAO,EAAE;gBAC/B,QAAQ,EAAE,OAAO;gBACjB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBACjC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC1C,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;aAC7B,CAAC,CAAA;YACF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACxD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,KAAK,YAAY,EAAE,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,GAAY;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;YACjC,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;YAChD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;QAEjD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;YACpD,OAAM;QACR,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CACtC,kCAAkC,EAClC,IAAI,CACL,CAAA;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;YAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,iEAAiE,CAClE,CAAA;YACD,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAA;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QAC1C,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;YACzD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAA;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;YAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;YAClE,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,uBAAuB;QACrB,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAA;YAC3C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,4BAA4B;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;YACzE,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAA;YAChD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CACpC,wCAAwC,EACxC,IAAI,CACL,CAAA;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAA;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;QAC5D,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CACP,2EAA2E,CAC5E,CAAA;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAA;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,6EAA6E,CAC9E,CAAA;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,2BAA2B,CAAC,KAI3B;QACC,OAAO,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;IACxI,CAAC;IAED,iBAAiB,CAAC,KAIjB;QACC,OAAO,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAC1H,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,2CAA2C,sBAAU,CAAC,cAAc,EAAE,CACvE,CAAA;YACD,OAAM;QACR,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAA;QAC3C,MAAM,KAAK,GAAG;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAA;QACD,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,kBAAkB;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAA;QAE3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAA;YAC7D,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;YACjE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAA;YACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;YACpD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAA;YACD,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF;AAnQD,0CAmQC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { MigrationHelper } from './migration-helper';
|
|
2
|
+
export declare class MigrationTool extends MigrationHelper {
|
|
3
|
+
setupRepositories(options?: {
|
|
4
|
+
name?: string;
|
|
5
|
+
domain?: string;
|
|
6
|
+
team?: string;
|
|
7
|
+
oktaGroups?: string[];
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Step 2: Load Configuration
|
|
11
|
+
* Load stacks from iac-deploy
|
|
12
|
+
*/
|
|
13
|
+
loadConfiguration(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Step 3: Create Safety Net PR (disable autodeploy for stacks)
|
|
16
|
+
*/
|
|
17
|
+
createSafetyNetPR(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Step 4: Create Domain Enrollment PR
|
|
20
|
+
*/
|
|
21
|
+
createDomainEnrollmentPR(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Step 6: Create Service Repository PR (spacelift.yaml, import.tf)
|
|
24
|
+
*/
|
|
25
|
+
createServiceRepositoryPR(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Generate import.tf file with import blocks for stacks
|
|
28
|
+
* Uses stack configuration from YAML (contexts and stack_dependencies)
|
|
29
|
+
*/
|
|
30
|
+
private generateImportTf;
|
|
31
|
+
/**
|
|
32
|
+
* Add Spacelift provider to version.tf content
|
|
33
|
+
* Returns the updated content with spacelift provider added to required_providers
|
|
34
|
+
* Handles both cases: with existing required_providers block and without
|
|
35
|
+
*/
|
|
36
|
+
addSpaceliftProviderToVersionTf(existingContent: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Remove Spacelift provider from version.tf content
|
|
39
|
+
* Returns the updated content with spacelift provider removed from required_providers
|
|
40
|
+
* If spacelift is the only provider, removes the entire required_providers block
|
|
41
|
+
*/
|
|
42
|
+
removeSpaceliftProviderFromVersionTf(existingContent: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Step 5: Create iac-deploy Cleanup PR
|
|
45
|
+
*/
|
|
46
|
+
createIacDeployCleanupPR(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Create cleanup PR for iac-deploy (internal)
|
|
49
|
+
*/
|
|
50
|
+
private doCreateIacDeployCleanupPR;
|
|
51
|
+
/**
|
|
52
|
+
* Step 7: Generate State Removal Commands
|
|
53
|
+
*/
|
|
54
|
+
generateStateRemovalCommands(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Step 8: Generate Migration Procedure
|
|
57
|
+
*/
|
|
58
|
+
generateMigrationProcedure(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Display migration state
|
|
61
|
+
*/
|
|
62
|
+
checkMigrationState(): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Clean up migration (creates PR + removes local files)
|
|
65
|
+
*/
|
|
66
|
+
cleanupMigration(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Full migration workflow
|
|
69
|
+
*/
|
|
70
|
+
run(): Promise<void>;
|
|
71
|
+
}
|