aws-lambda-api-tools 0.1.28 → 0.1.29
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/bin/bootstrap-iam.js +54 -25
- package/bin/cli.js +1 -1
- package/dist/bin/bootstrap-iam.js +240 -28
- package/dist/bin/bootstrap-iam.js.map +1 -1
- package/dist/bin/cli.js +64 -3
- package/dist/bin/cli.js.map +1 -1
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var a=require("commander"),o=require("path");a.program.name("aws-lambda-api-tools").description("CLI tools for AWS Lambda and API Gateway").version("0.1.5");a.program.command("create-gha-iam-stack").description("Create IAM stack for GitHub Actions OIDC authentication").option("--repo <owner/repo>","GitHub repository to add (owner/repo)",m,[]).option("--remove-repo <owner/repo>","GitHub repository to remove (owner/repo)",s,[]).option("--policy <name>","AWS managed policy name","AdministratorAccess").option("--mode <mode>","Operation mode: merge (add new repos), replace (overwrite all), list (show current repos)","replace").option("--yes","Skip confirmation prompt",!1).option("--stack-name <name>","CloudFormation stack name","GithubActionsIam").option("--role-name <name>","IAM role name","GithubActionsRole").action(async e=>{if(e.mode==="list"){process.argv=[process.argv[0],process.argv[1],"--mode=list",`--stack-name=${e.stackName}`,`--role-name=${e.roleName}`],require((0,o.join)(__dirname,"bootstrap-iam.js"));return}if(e.repo.length>0&&e.removeRepo.length>0){process.argv=[process.argv[0],process.argv[1],...e.repo.map(r=>`--repo=${r}`),...e.removeRepo.map(r=>`--remove-repo=${r}`),`--policy=${e.policy}`,"--mode=mixed",`--stack-name=${e.stackName}`,`--role-name=${e.roleName}`,...e.yes?["--yes"]:[]],require((0,o.join)(__dirname,"bootstrap-iam.js"));return}if(e.removeRepo.length>0){process.argv=[process.argv[0],process.argv[1],...e.removeRepo.map(r=>`--remove-repo=${r}`),`--policy=${e.policy}`,"--mode=remove",`--stack-name=${e.stackName}`,`--role-name=${e.roleName}`,...e.yes?["--yes"]:[]],require((0,o.join)(__dirname,"bootstrap-iam.js"));return}e.repo.length===0&&(console.error("Error: at least one --repo argument is required (or use --mode=list to view current repos)"),process.exit(1)),["merge","replace"].includes(e.mode)||(console.error("Error: --mode must be one of: merge, replace, list"),process.exit(1)),process.argv=[process.argv[0],process.argv[1],...e.repo.map(r=>`--repo=${r}`),`--policy=${e.policy}`,`--mode=${e.mode}`,`--stack-name=${e.stackName}`,`--role-name=${e.roleName}`,...e.yes?["--yes"]:[]],require((0,o.join)(__dirname,"bootstrap-iam.js"))});function m(e,r){return r.concat([e])}function s(e,r){return r.concat([e])}a.program.parse();
|
|
@@ -1,24 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
4
27
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
5
28
|
const child_process_1 = require("child_process");
|
|
6
29
|
const client_iam_1 = require("@aws-sdk/client-iam");
|
|
7
|
-
|
|
30
|
+
const readline = __importStar(require("readline"));
|
|
31
|
+
console.log('🚀 Starting GitHub OIDC IAM setup...\n');
|
|
8
32
|
// Parse command line arguments
|
|
9
33
|
const args = process.argv.slice(2);
|
|
10
34
|
const repoArgs = args.filter(t => t.startsWith("--repo=")).map(t => t.split("=")[1]);
|
|
35
|
+
const removeRepoArgs = args.filter(t => t.startsWith("--remove-repo=")).map(t => t.split("=")[1]);
|
|
11
36
|
const policyArg = args.find(t => t.startsWith("--policy="));
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
37
|
+
const modeArg = args.find(t => t.startsWith("--mode="));
|
|
38
|
+
const yesArg = args.find(t => t === "--yes");
|
|
39
|
+
const stackNameArg = args.find(t => t.startsWith("--stack-name="));
|
|
40
|
+
const roleNameArg = args.find(t => t.startsWith("--role-name="));
|
|
41
|
+
const mode = modeArg ? modeArg.split("=")[1] : 'replace';
|
|
42
|
+
const stackName = stackNameArg ? stackNameArg.split("=")[1] : 'GithubActionsIam';
|
|
43
|
+
const roleName = roleNameArg ? roleNameArg.split("=")[1] : 'GithubActionsRole';
|
|
44
|
+
// List mode doesn't require repos
|
|
45
|
+
if (mode !== 'list' && repoArgs.length === 0 && removeRepoArgs.length === 0) {
|
|
46
|
+
console.error("❌ Error: at least one --repo or --remove-repo argument is required");
|
|
47
|
+
console.error("Usage: create-gha-iam-stack --repo=owner/repo-name [--repo=owner/another-repo] [--policy=PolicyName] [--mode=merge|replace|list]");
|
|
48
|
+
console.error(" create-gha-iam-stack --remove-repo=owner/repo-name [--remove-repo=owner/another-repo]");
|
|
49
|
+
console.error(" create-gha-iam-stack --repo=owner/new-repo --remove-repo=owner/old-repo");
|
|
50
|
+
console.error(" create-gha-iam-stack --mode=list");
|
|
51
|
+
console.error("Example: create-gha-iam-stack --repo=myorg/my-repo --repo=myorg/another-repo --policy=AdministratorAccess --mode=merge");
|
|
52
|
+
console.error("Example: create-gha-iam-stack --remove-repo=myorg/old-repo");
|
|
53
|
+
console.error("Example: create-gha-iam-stack --repo=myorg/new-repo --remove-repo=myorg/old-repo");
|
|
54
|
+
console.error("Example: create-gha-iam-stack --mode=list");
|
|
16
55
|
process.exit(1);
|
|
17
56
|
}
|
|
18
|
-
const
|
|
57
|
+
const requestedRepos = repoArgs;
|
|
58
|
+
const reposToRemove = removeRepoArgs;
|
|
19
59
|
const policyName = policyArg ? policyArg.split("=")[1] : "AdministratorAccess";
|
|
20
|
-
|
|
21
|
-
|
|
60
|
+
const skipConfirmation = yesArg !== undefined;
|
|
61
|
+
// Utility function to prompt for confirmation
|
|
62
|
+
function promptConfirmation(message) {
|
|
63
|
+
if (skipConfirmation) {
|
|
64
|
+
return Promise.resolve(true);
|
|
65
|
+
}
|
|
66
|
+
const rl = readline.createInterface({
|
|
67
|
+
input: process.stdin,
|
|
68
|
+
output: process.stdout
|
|
69
|
+
});
|
|
70
|
+
return new Promise((resolve) => {
|
|
71
|
+
rl.question(`${message} (y/n): `, (answer) => {
|
|
72
|
+
rl.close();
|
|
73
|
+
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// Extract repos from existing trust policy
|
|
78
|
+
function extractReposFromTrustPolicy(trustPolicy) {
|
|
79
|
+
try {
|
|
80
|
+
const statements = trustPolicy.Statement || [];
|
|
81
|
+
for (const statement of statements) {
|
|
82
|
+
if (statement.Condition?.StringLike?.['token.actions.githubusercontent.com:sub']) {
|
|
83
|
+
const subs = statement.Condition.StringLike['token.actions.githubusercontent.com:sub'];
|
|
84
|
+
const subArray = Array.isArray(subs) ? subs : [subs];
|
|
85
|
+
return subArray
|
|
86
|
+
.map((sub) => sub.replace('repo:', '').replace(':*', ''))
|
|
87
|
+
.filter((repo) => repo.length > 0);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.warn('⚠️ Could not parse trust policy:', error);
|
|
93
|
+
}
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
22
96
|
// Check if GitHub OIDC provider already exists
|
|
23
97
|
async function checkOidcProviderExists() {
|
|
24
98
|
try {
|
|
@@ -31,7 +105,7 @@ async function checkOidcProviderExists() {
|
|
|
31
105
|
return true;
|
|
32
106
|
}
|
|
33
107
|
else {
|
|
34
|
-
console.log('ℹ️ No existing GitHub OIDC provider found');
|
|
108
|
+
console.log('ℹ️ No existing GitHub OIDC provider found - will create new one');
|
|
35
109
|
return false;
|
|
36
110
|
}
|
|
37
111
|
}
|
|
@@ -40,17 +114,98 @@ async function checkOidcProviderExists() {
|
|
|
40
114
|
return false;
|
|
41
115
|
}
|
|
42
116
|
}
|
|
117
|
+
// Check for existing IAM role and get current repos
|
|
118
|
+
async function getExistingRepos() {
|
|
119
|
+
try {
|
|
120
|
+
const iamClient = new client_iam_1.IAMClient({ region: process.env.AWS_REGION || 'us-east-1' });
|
|
121
|
+
const command = new client_iam_1.GetRoleCommand({ RoleName: roleName });
|
|
122
|
+
const response = await iamClient.send(command);
|
|
123
|
+
if (response.Role?.AssumeRolePolicyDocument) {
|
|
124
|
+
const trustPolicyJson = decodeURIComponent(response.Role.AssumeRolePolicyDocument);
|
|
125
|
+
const trustPolicy = JSON.parse(trustPolicyJson);
|
|
126
|
+
const existingRepos = extractReposFromTrustPolicy(trustPolicy);
|
|
127
|
+
if (existingRepos.length > 0) {
|
|
128
|
+
console.log(`\n✅ Found existing IAM role: ${roleName}`);
|
|
129
|
+
console.log(`📋 Current repositories (${existingRepos.length}):`);
|
|
130
|
+
existingRepos.forEach(repo => console.log(` - ${repo}`));
|
|
131
|
+
return existingRepos;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (error instanceof client_iam_1.NoSuchEntityException || error.name === 'NoSuchEntity') {
|
|
137
|
+
console.log(`\nℹ️ No existing IAM role found - will create new role: ${roleName}`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.warn('⚠️ Could not check for existing role:', error);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
// Calculate final repos list based on mode
|
|
146
|
+
function calculateFinalRepos(existing, requested, toRemove, mode) {
|
|
147
|
+
const existingSet = new Set(existing);
|
|
148
|
+
const requestedSet = new Set(requested);
|
|
149
|
+
const toRemoveSet = new Set(toRemove);
|
|
150
|
+
switch (mode) {
|
|
151
|
+
case 'merge':
|
|
152
|
+
return Array.from(new Set([...existing, ...requested])).sort();
|
|
153
|
+
case 'remove':
|
|
154
|
+
return existing.filter(repo => !requestedSet.has(repo)).sort();
|
|
155
|
+
case 'mixed':
|
|
156
|
+
// Start with existing, remove specified repos, then add new ones
|
|
157
|
+
const afterRemoval = existing.filter(repo => !toRemoveSet.has(repo));
|
|
158
|
+
return Array.from(new Set([...afterRemoval, ...requested])).sort();
|
|
159
|
+
case 'replace':
|
|
160
|
+
default:
|
|
161
|
+
return requested.sort();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Show diff of changes
|
|
165
|
+
function showDiff(existing, final, requested, mode) {
|
|
166
|
+
const existingSet = new Set(existing);
|
|
167
|
+
const finalSet = new Set(final);
|
|
168
|
+
const requestedSet = new Set(requested);
|
|
169
|
+
const added = final.filter(repo => !existingSet.has(repo));
|
|
170
|
+
const removed = existing.filter(repo => !finalSet.has(repo));
|
|
171
|
+
const unchanged = final.filter(repo => existingSet.has(repo));
|
|
172
|
+
console.log(`\n📊 Operation: ${mode.toUpperCase()}`);
|
|
173
|
+
console.log(`\n📝 Summary:`);
|
|
174
|
+
console.log(` Total repositories: ${existing.length} → ${final.length}`);
|
|
175
|
+
if (added.length > 0) {
|
|
176
|
+
console.log(`\n✨ Adding (${added.length}):`);
|
|
177
|
+
added.forEach(repo => console.log(` + ${repo}`));
|
|
178
|
+
}
|
|
179
|
+
if (removed.length > 0) {
|
|
180
|
+
console.log(`\n🗑️ Removing (${removed.length}):`);
|
|
181
|
+
removed.forEach(repo => console.log(` - ${repo}`));
|
|
182
|
+
}
|
|
183
|
+
if (unchanged.length > 0) {
|
|
184
|
+
console.log(`\n✓ Unchanged (${unchanged.length}):`);
|
|
185
|
+
unchanged.forEach(repo => console.log(` ${repo}`));
|
|
186
|
+
}
|
|
187
|
+
// Show which requested repos already exist (for merge/mixed modes)
|
|
188
|
+
if ((mode === 'merge' || mode === 'mixed') && requestedSet.size > added.length) {
|
|
189
|
+
const alreadyExists = requested.filter(repo => existingSet.has(repo));
|
|
190
|
+
if (alreadyExists.length > 0) {
|
|
191
|
+
console.log(`\nℹ️ Already exist (${alreadyExists.length}):`);
|
|
192
|
+
alreadyExists.forEach(repo => console.log(` ${repo}`));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
console.log(`\n📦 Final repository list (${final.length}):`);
|
|
196
|
+
final.forEach(repo => console.log(` • ${repo}`));
|
|
197
|
+
}
|
|
43
198
|
const app = new aws_cdk_lib_1.App();
|
|
44
199
|
class GithubActionsIamStack extends aws_cdk_lib_1.Stack {
|
|
45
200
|
constructor(scope, id, props) {
|
|
46
201
|
super(scope, id, props);
|
|
47
|
-
|
|
202
|
+
const { finalRepos = [], createOidcProvider = false } = props || {};
|
|
48
203
|
// Reference existing OIDC provider or create new one
|
|
49
204
|
const accountId = aws_cdk_lib_1.Stack.of(this).account;
|
|
50
205
|
const githubOidcProviderArn = `arn:aws:iam::${accountId}:oidc-provider/token.actions.githubusercontent.com`;
|
|
51
206
|
// Create OIDC provider only if it doesn't exist
|
|
52
|
-
if (
|
|
53
|
-
console.log('Creating new OIDC Provider...');
|
|
207
|
+
if (createOidcProvider) {
|
|
208
|
+
console.log('\n🔐 Creating new OIDC Provider...');
|
|
54
209
|
new aws_iam_1.CfnOIDCProvider(this, "GithubOidcProvider", {
|
|
55
210
|
url: "https://token.actions.githubusercontent.com",
|
|
56
211
|
clientIdList: ["sts.amazonaws.com"],
|
|
@@ -60,17 +215,15 @@ class GithubActionsIamStack extends aws_cdk_lib_1.Stack {
|
|
|
60
215
|
]
|
|
61
216
|
});
|
|
62
217
|
}
|
|
63
|
-
|
|
64
|
-
console.log('Using existing OIDC Provider');
|
|
65
|
-
}
|
|
66
|
-
console.log('Creating IAM Role...');
|
|
218
|
+
console.log(`\n👤 Creating/Updating IAM Role: ${roleName}...`);
|
|
67
219
|
const deploymentRole = new aws_iam_1.Role(this, "GithubActionsRole", {
|
|
220
|
+
roleName: roleName,
|
|
68
221
|
assumedBy: new aws_iam_1.WebIdentityPrincipal(githubOidcProviderArn, {
|
|
69
222
|
StringEquals: {
|
|
70
223
|
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
|
|
71
224
|
},
|
|
72
225
|
StringLike: {
|
|
73
|
-
"token.actions.githubusercontent.com:sub":
|
|
226
|
+
"token.actions.githubusercontent.com:sub": finalRepos.map(repo => `repo:${repo}:*`)
|
|
74
227
|
}
|
|
75
228
|
}),
|
|
76
229
|
managedPolicies: [
|
|
@@ -81,28 +234,83 @@ class GithubActionsIamStack extends aws_cdk_lib_1.Stack {
|
|
|
81
234
|
value: deploymentRole.roleArn,
|
|
82
235
|
description: "ARN of role to use in GitHub Actions"
|
|
83
236
|
});
|
|
237
|
+
new aws_cdk_lib_1.CfnOutput(this, "RoleName", {
|
|
238
|
+
value: deploymentRole.roleName,
|
|
239
|
+
description: "Name of the IAM role"
|
|
240
|
+
});
|
|
241
|
+
new aws_cdk_lib_1.CfnOutput(this, "PolicyName", {
|
|
242
|
+
value: policyName,
|
|
243
|
+
description: "AWS managed policy attached to the role"
|
|
244
|
+
});
|
|
245
|
+
new aws_cdk_lib_1.CfnOutput(this, "RepositoryCount", {
|
|
246
|
+
value: finalRepos.length.toString(),
|
|
247
|
+
description: "Number of repositories with access"
|
|
248
|
+
});
|
|
84
249
|
}
|
|
85
250
|
}
|
|
86
251
|
// Main execution
|
|
87
252
|
async function main() {
|
|
88
|
-
|
|
253
|
+
// LIST MODE - Just show current repos and exit
|
|
254
|
+
if (mode === 'list') {
|
|
255
|
+
console.log(`📋 Stack: ${stackName}`);
|
|
256
|
+
console.log(`👤 Role: ${roleName}\n`);
|
|
257
|
+
const existingRepos = await getExistingRepos();
|
|
258
|
+
if (existingRepos.length === 0) {
|
|
259
|
+
console.log('ℹ️ No repositories found in trust policy (or role does not exist)\n');
|
|
260
|
+
process.exit(0);
|
|
261
|
+
}
|
|
262
|
+
console.log(`\n✅ Current repositories in trust policy (${existingRepos.length}):\n`);
|
|
263
|
+
existingRepos.forEach((repo, idx) => console.log(` ${idx + 1}. ${repo}`));
|
|
264
|
+
console.log('');
|
|
265
|
+
process.exit(0);
|
|
266
|
+
}
|
|
267
|
+
// MODIFY MODE (merge/replace/remove/mixed)
|
|
268
|
+
if (requestedRepos.length > 0) {
|
|
269
|
+
console.log(`📋 Repositories to add (${requestedRepos.length}):`);
|
|
270
|
+
requestedRepos.forEach(repo => console.log(` + ${repo}`));
|
|
271
|
+
}
|
|
272
|
+
if (reposToRemove.length > 0) {
|
|
273
|
+
console.log(`🗑️ Repositories to remove (${reposToRemove.length}):`);
|
|
274
|
+
reposToRemove.forEach(repo => console.log(` - ${repo}`));
|
|
275
|
+
}
|
|
276
|
+
console.log(`🔑 Policy: ${policyName}`);
|
|
277
|
+
console.log(`🎯 Mode: ${mode}`);
|
|
278
|
+
// Check for existing setup
|
|
279
|
+
const existingRepos = await getExistingRepos();
|
|
89
280
|
const oidcExists = await checkOidcProviderExists();
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
281
|
+
// Calculate final repos list
|
|
282
|
+
const finalRepos = calculateFinalRepos(existingRepos, requestedRepos, reposToRemove, mode);
|
|
283
|
+
// Show diff
|
|
284
|
+
showDiff(existingRepos, finalRepos, requestedRepos, mode);
|
|
285
|
+
// Validation
|
|
286
|
+
if (finalRepos.length === 0) {
|
|
287
|
+
console.error('\n❌ Error: Final repository list is empty. Cannot proceed.');
|
|
288
|
+
process.exit(1);
|
|
289
|
+
}
|
|
290
|
+
// Prompt for confirmation
|
|
291
|
+
const confirmed = await promptConfirmation('\n❓ Do you want to proceed with these changes?');
|
|
292
|
+
if (!confirmed) {
|
|
293
|
+
console.log('\n❌ Operation cancelled by user');
|
|
294
|
+
process.exit(0);
|
|
295
|
+
}
|
|
296
|
+
console.log('\n✅ Confirmed - proceeding with deployment...');
|
|
297
|
+
// Create/update stack
|
|
298
|
+
new GithubActionsIamStack(app, stackName, {
|
|
299
|
+
createOidcProvider: !oidcExists,
|
|
300
|
+
finalRepos: finalRepos
|
|
93
301
|
});
|
|
94
|
-
console.log('Synthesizing CloudFormation template...');
|
|
302
|
+
console.log('\n🔨 Synthesizing CloudFormation template...');
|
|
95
303
|
const assembly = app.synth();
|
|
96
304
|
// Execute the deployment
|
|
97
|
-
console.log('Starting deployment...');
|
|
305
|
+
console.log('\n🚀 Starting deployment...');
|
|
98
306
|
try {
|
|
99
307
|
const cdkCommand = [
|
|
100
308
|
'cdk deploy',
|
|
101
|
-
|
|
309
|
+
stackName,
|
|
102
310
|
'--require-approval never',
|
|
103
311
|
`--app "${assembly.directory}"`,
|
|
104
312
|
].join(' ');
|
|
105
|
-
console.log(
|
|
313
|
+
console.log(`\n💻 Executing: ${cdkCommand}\n`);
|
|
106
314
|
(0, child_process_1.execSync)(cdkCommand, {
|
|
107
315
|
stdio: 'inherit',
|
|
108
316
|
env: {
|
|
@@ -110,16 +318,20 @@ async function main() {
|
|
|
110
318
|
AWS_REGION: process.env.AWS_REGION || 'us-east-1',
|
|
111
319
|
}
|
|
112
320
|
});
|
|
113
|
-
console.log('✅ Deployment completed successfully!');
|
|
321
|
+
console.log('\n✅ Deployment completed successfully!');
|
|
322
|
+
console.log('\n📋 Next steps:');
|
|
323
|
+
console.log(' 1. Copy the Role ARN from the output above');
|
|
324
|
+
console.log(' 2. Add it as a secret named \'AWS_ROLE_ARN\' in each repository');
|
|
325
|
+
console.log(' 3. Verify the GitHub Actions workflows can assume the role\n');
|
|
114
326
|
}
|
|
115
327
|
catch (error) {
|
|
116
|
-
console.error('❌ Deployment failed:', error);
|
|
328
|
+
console.error('\n❌ Deployment failed:', error);
|
|
117
329
|
process.exit(1);
|
|
118
330
|
}
|
|
119
331
|
}
|
|
120
332
|
// Run the main function
|
|
121
333
|
main().catch(error => {
|
|
122
|
-
console.error('❌ Setup failed:', error);
|
|
334
|
+
console.error('\n❌ Setup failed:', error);
|
|
123
335
|
process.exit(1);
|
|
124
336
|
});
|
|
125
337
|
//# sourceMappingURL=bootstrap-iam.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-iam.js","sourceRoot":"","sources":["../../src/bin/bootstrap-iam.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootstrap-iam.js","sourceRoot":"","sources":["../../src/bin/bootstrap-iam.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgE;AAChE,iDAAiG;AACjG,iDAAyC;AACzC,oDAA0H;AAC1H,mDAAqC;AAErC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AAEtD,+BAA+B;AAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACxD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;AAEjE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAsD,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9G,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACjF,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAE/E,kCAAkC;AAClC,IAAI,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;IAC3E,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACpF,OAAO,CAAC,KAAK,CAAC,kIAAkI,CAAC,CAAC;IAClJ,OAAO,CAAC,KAAK,CAAC,8FAA8F,CAAC,CAAC;IAC9G,OAAO,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;IAChG,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACzD,OAAO,CAAC,KAAK,CAAC,wHAAwH,CAAC,CAAC;IACxI,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC5E,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;IAClG,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CACjB;AAED,MAAM,cAAc,GAAG,QAAQ,CAAC;AAChC,MAAM,aAAa,GAAG,cAAc,CAAC;AACrC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAC/E,MAAM,gBAAgB,GAAG,MAAM,KAAK,SAAS,CAAC;AAE9C,8CAA8C;AAC9C,SAAS,kBAAkB,CAAC,OAAe;IACzC,IAAI,gBAAgB,EAAE;QACpB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2CAA2C;AAC3C,SAAS,2BAA2B,CAAC,WAAgB;IACnD,IAAI;QACF,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAClC,IAAI,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,yCAAyC,CAAC,EAAE;gBAChF,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,yCAAyC,CAAC,CAAC;gBACvF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrD,OAAO,QAAQ;qBACZ,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;qBAChE,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC9C;SACF;KACF;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;KAC1D;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+CAA+C;AAC/C,KAAK,UAAU,uBAAuB;IACpC,IAAI;QACF,MAAM,SAAS,GAAG,IAAI,sBAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,IAAI,8CAAiC,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,MAAM,cAAc,GAAG,QAAQ,CAAC,yBAAyB,EAAE,IAAI,CAC7D,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,qCAAqC,CAAC,CAC1E,CAAC;QAEF,IAAI,cAAc,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,0CAA0C,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC;SACb;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;YAChF,OAAO,KAAK,CAAC;SACd;KACF;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAED,oDAAoD;AACpD,KAAK,UAAU,gBAAgB;IAC7B,IAAI;QACF,MAAM,SAAS,GAAG,IAAI,sBAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,QAAQ,CAAC,IAAI,EAAE,wBAAwB,EAAE;YAC3C,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACnF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC;YAE/D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,4BAA4B,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;gBAClE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3D,OAAO,aAAa,CAAC;aACtB;SACF;KACF;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,KAAK,YAAY,kCAAqB,IAAK,KAAa,CAAC,IAAI,KAAK,cAAc,EAAE;YACpF,OAAO,CAAC,GAAG,CAAC,4DAA4D,QAAQ,EAAE,CAAC,CAAC;SACrF;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;SAC/D;KACF;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,2CAA2C;AAC3C,SAAS,mBAAmB,CAC1B,QAAkB,EAClB,SAAmB,EACnB,QAAkB,EAClB,IAAY;IAEZ,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtC,QAAQ,IAAI,EAAE;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjE,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjE,KAAK,OAAO;YACV,iEAAiE;YACjE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAErE,KAAK,SAAS,CAAC;QACf;YACE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;KAC3B;AACH,CAAC;AAED,uBAAuB;AACvB,SAAS,QAAQ,CAAC,QAAkB,EAAE,KAAe,EAAE,SAAmB,EAAE,IAAY;IACtF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,CAAC,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;KACpD;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QACpD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;KACtD;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;QACrD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;KACxD;IAED,mEAAmE;IACnE,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE;QAC9E,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,wBAAwB,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;YAC9D,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;SAC5D;KACF;IAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,GAAG,GAAG,IAAI,iBAAG,EAAE,CAAC;AAEtB,MAAM,qBAAsB,SAAQ,mBAAK;IACvC,YAAY,KAAU,EAAE,EAAU,EAAE,KAA2E;QAC7G,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAExB,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,kBAAkB,GAAG,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;QAEpE,qDAAqD;QACrD,MAAM,SAAS,GAAG,mBAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QACzC,MAAM,qBAAqB,GAAG,gBAAgB,SAAS,oDAAoD,CAAC;QAE5G,gDAAgD;QAChD,IAAI,kBAAkB,EAAE;YACtB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,IAAI,yBAAe,CAAC,IAAI,EAAE,oBAAoB,EAAE;gBAC9C,GAAG,EAAE,6CAA6C;gBAClD,YAAY,EAAE,CAAC,mBAAmB,CAAC;gBACnC,cAAc,EAAE;oBACd,0CAA0C;oBAC1C,0CAA0C;iBAC3C;aACF,CAAC,CAAC;SACJ;QAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,QAAQ,KAAK,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,IAAI,cAAI,CAAC,IAAI,EAAE,mBAAmB,EAAE;YACzD,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,IAAI,8BAAoB,CACjC,qBAAqB,EACrB;gBACE,YAAY,EAAE;oBACZ,yCAAyC,EAAE,mBAAmB;iBAC/D;gBACD,UAAU,EAAE;oBACV,yCAAyC,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC;iBACpF;aACF,CACF;YACD,eAAe,EAAE;gBACf,uBAAa,CAAC,wBAAwB,CAAC,UAAU,CAAC;aACnD;SACF,CAAC,CAAC;QAEH,IAAI,uBAAS,CAAC,IAAI,EAAE,SAAS,EAAE;YAC7B,KAAK,EAAE,cAAc,CAAC,OAAO;YAC7B,WAAW,EAAE,sCAAsC;SACpD,CAAC,CAAC;QAEH,IAAI,uBAAS,CAAC,IAAI,EAAE,UAAU,EAAE;YAC9B,KAAK,EAAE,cAAc,CAAC,QAAQ;YAC9B,WAAW,EAAE,sBAAsB;SACpC,CAAC,CAAC;QAEH,IAAI,uBAAS,CAAC,IAAI,EAAE,YAAY,EAAE;YAChC,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,yCAAyC;SACvD,CAAC,CAAC;QAEH,IAAI,uBAAS,CAAC,IAAI,EAAE,iBAAiB,EAAE;YACrC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE;YACnC,WAAW,EAAE,oCAAoC;SAClD,CAAC,CAAC;IACL,CAAC;CACF;AAED,iBAAiB;AACjB,KAAK,UAAU,IAAI;IACjB,+CAA+C;IAC/C,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,IAAI,CAAC,CAAC;QAEtC,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAE/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAED,OAAO,CAAC,GAAG,CAAC,6CAA6C,aAAa,CAAC,MAAM,MAAM,CAAC,CAAC;QACrF,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,2CAA2C;IAC3C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;QAClE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7D;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,gCAAgC,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;QACtE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;KAC5D;IACD,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAEhC,2BAA2B;IAC3B,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAEnD,6BAA6B;IAC7B,MAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IAE3F,YAAY;IACZ,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IAE1D,aAAa;IACb,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,0BAA0B;IAC1B,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,gDAAgD,CAAC,CAAC;IAE7F,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,sBAAsB;IACtB,IAAI,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE;QACxC,kBAAkB,EAAE,CAAC,UAAU;QAC/B,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAE7B,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,IAAI;QACF,MAAM,UAAU,GAAG;YACjB,YAAY;YACZ,SAAS;YACT,0BAA0B;YAC1B,UAAU,QAAQ,CAAC,SAAS,GAAG;SAChC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEZ,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,IAAI,CAAC,CAAC;QAE/C,IAAA,wBAAQ,EAAC,UAAU,EAAE;YACnB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;aAClD;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;KAChF;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC;AAED,wBAAwB;AACxB,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/bin/cli.js
CHANGED
|
@@ -8,11 +8,64 @@ commander_1.program
|
|
|
8
8
|
.version('0.1.5');
|
|
9
9
|
commander_1.program.command('create-gha-iam-stack')
|
|
10
10
|
.description('Create IAM stack for GitHub Actions OIDC authentication')
|
|
11
|
-
.option('--repo <owner/repo>', 'GitHub repository (owner/repo)', collect, [])
|
|
11
|
+
.option('--repo <owner/repo>', 'GitHub repository to add (owner/repo)', collect, [])
|
|
12
|
+
.option('--remove-repo <owner/repo>', 'GitHub repository to remove (owner/repo)', collectRemove, [])
|
|
12
13
|
.option('--policy <name>', 'AWS managed policy name', 'AdministratorAccess')
|
|
14
|
+
.option('--mode <mode>', 'Operation mode: merge (add new repos), replace (overwrite all), list (show current repos)', 'replace')
|
|
15
|
+
.option('--yes', 'Skip confirmation prompt', false)
|
|
16
|
+
.option('--stack-name <name>', 'CloudFormation stack name', 'GithubActionsIam')
|
|
17
|
+
.option('--role-name <name>', 'IAM role name', 'GithubActionsRole')
|
|
13
18
|
.action(async (options) => {
|
|
19
|
+
// List mode - no repos required
|
|
20
|
+
if (options.mode === 'list') {
|
|
21
|
+
process.argv = [
|
|
22
|
+
process.argv[0],
|
|
23
|
+
process.argv[1],
|
|
24
|
+
'--mode=list',
|
|
25
|
+
`--stack-name=${options.stackName}`,
|
|
26
|
+
`--role-name=${options.roleName}`,
|
|
27
|
+
];
|
|
28
|
+
require((0, path_1.join)(__dirname, 'bootstrap-iam.js'));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Mixed mode - both --repo and --remove-repo specified
|
|
32
|
+
if (options.repo.length > 0 && options.removeRepo.length > 0) {
|
|
33
|
+
process.argv = [
|
|
34
|
+
process.argv[0],
|
|
35
|
+
process.argv[1],
|
|
36
|
+
...options.repo.map((repo) => `--repo=${repo}`),
|
|
37
|
+
...options.removeRepo.map((repo) => `--remove-repo=${repo}`),
|
|
38
|
+
`--policy=${options.policy}`,
|
|
39
|
+
'--mode=mixed',
|
|
40
|
+
`--stack-name=${options.stackName}`,
|
|
41
|
+
`--role-name=${options.roleName}`,
|
|
42
|
+
...(options.yes ? ['--yes'] : [])
|
|
43
|
+
];
|
|
44
|
+
require((0, path_1.join)(__dirname, 'bootstrap-iam.js'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Pure remove mode - only --remove-repo specified
|
|
48
|
+
if (options.removeRepo.length > 0) {
|
|
49
|
+
process.argv = [
|
|
50
|
+
process.argv[0],
|
|
51
|
+
process.argv[1],
|
|
52
|
+
...options.removeRepo.map((repo) => `--remove-repo=${repo}`),
|
|
53
|
+
`--policy=${options.policy}`,
|
|
54
|
+
'--mode=remove',
|
|
55
|
+
`--stack-name=${options.stackName}`,
|
|
56
|
+
`--role-name=${options.roleName}`,
|
|
57
|
+
...(options.yes ? ['--yes'] : [])
|
|
58
|
+
];
|
|
59
|
+
require((0, path_1.join)(__dirname, 'bootstrap-iam.js'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Add/Replace mode - requires repos
|
|
14
63
|
if (options.repo.length === 0) {
|
|
15
|
-
console.error('Error: at least one --repo argument is required');
|
|
64
|
+
console.error('Error: at least one --repo argument is required (or use --mode=list to view current repos)');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
if (!['merge', 'replace'].includes(options.mode)) {
|
|
68
|
+
console.error('Error: --mode must be one of: merge, replace, list');
|
|
16
69
|
process.exit(1);
|
|
17
70
|
}
|
|
18
71
|
// Convert Commander options to argv format for bootstrap script
|
|
@@ -20,7 +73,11 @@ commander_1.program.command('create-gha-iam-stack')
|
|
|
20
73
|
process.argv[0],
|
|
21
74
|
process.argv[1],
|
|
22
75
|
...options.repo.map((repo) => `--repo=${repo}`),
|
|
23
|
-
`--policy=${options.policy}
|
|
76
|
+
`--policy=${options.policy}`,
|
|
77
|
+
`--mode=${options.mode}`,
|
|
78
|
+
`--stack-name=${options.stackName}`,
|
|
79
|
+
`--role-name=${options.roleName}`,
|
|
80
|
+
...(options.yes ? ['--yes'] : [])
|
|
24
81
|
];
|
|
25
82
|
require((0, path_1.join)(__dirname, 'bootstrap-iam.js'));
|
|
26
83
|
});
|
|
@@ -28,5 +85,9 @@ commander_1.program.command('create-gha-iam-stack')
|
|
|
28
85
|
function collect(value, previous) {
|
|
29
86
|
return previous.concat([value]);
|
|
30
87
|
}
|
|
88
|
+
// Helper function to collect multiple --remove-repo options
|
|
89
|
+
function collectRemove(value, previous) {
|
|
90
|
+
return previous.concat([value]);
|
|
91
|
+
}
|
|
31
92
|
commander_1.program.parse();
|
|
32
93
|
//# sourceMappingURL=cli.js.map
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,+BAA4B;AAE5B,mBAAO;KACJ,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,0CAA0C,CAAC;KACvD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC;KACpC,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|