@action-llama/action-llama 0.3.0 → 0.4.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/LICENSE +21 -0
- package/README.md +43 -102
- package/dist/agents/container-entry.js +123 -17
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts +10 -4
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +83 -105
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/prompt.d.ts +2 -0
- package/dist/agents/prompt.d.ts.map +1 -1
- package/dist/agents/prompt.js +12 -4
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/runner.d.ts +10 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +60 -8
- package/dist/agents/runner.js.map +1 -1
- package/dist/cli/commands/{setup.d.ts → cloud-setup.d.ts} +1 -1
- package/dist/cli/commands/cloud-setup.d.ts.map +1 -0
- package/dist/cli/commands/cloud-setup.js +565 -0
- package/dist/cli/commands/cloud-setup.js.map +1 -0
- package/dist/cli/commands/cloud-teardown.d.ts +6 -0
- package/dist/cli/commands/cloud-teardown.d.ts.map +1 -0
- package/dist/cli/commands/cloud-teardown.js +152 -0
- package/dist/cli/commands/cloud-teardown.js.map +1 -0
- package/dist/cli/commands/console.d.ts.map +1 -1
- package/dist/cli/commands/console.js +108 -8
- package/dist/cli/commands/console.js.map +1 -1
- package/dist/cli/commands/creds.d.ts +2 -0
- package/dist/cli/commands/creds.d.ts.map +1 -0
- package/dist/cli/commands/creds.js +62 -0
- package/dist/cli/commands/creds.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +7 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +405 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +1 -0
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +67 -0
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +9 -2
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/run.d.ts +6 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +121 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/start.d.ts +2 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +41 -14
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +39 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +57 -16
- package/dist/cli/main.js.map +1 -1
- package/dist/credentials/builtins/aws.d.ts +4 -0
- package/dist/credentials/builtins/aws.d.ts.map +1 -0
- package/dist/credentials/builtins/aws.js +33 -0
- package/dist/credentials/builtins/aws.js.map +1 -0
- package/dist/credentials/builtins/bugsnag-token.d.ts +4 -0
- package/dist/credentials/builtins/bugsnag-token.d.ts.map +1 -0
- package/dist/credentials/builtins/bugsnag-token.js +18 -0
- package/dist/credentials/builtins/bugsnag-token.js.map +1 -0
- package/dist/credentials/builtins/github-webhook-secret.d.ts.map +1 -1
- package/dist/credentials/builtins/github-webhook-secret.js +2 -1
- package/dist/credentials/builtins/github-webhook-secret.js.map +1 -1
- package/dist/credentials/builtins/index.d.ts.map +1 -1
- package/dist/credentials/builtins/index.js +10 -0
- package/dist/credentials/builtins/index.js.map +1 -1
- package/dist/credentials/builtins/netlify-token.d.ts +4 -0
- package/dist/credentials/builtins/netlify-token.d.ts.map +1 -0
- package/dist/credentials/builtins/netlify-token.js +18 -0
- package/dist/credentials/builtins/netlify-token.js.map +1 -0
- package/dist/credentials/builtins/openai-key.d.ts +4 -0
- package/dist/credentials/builtins/openai-key.d.ts.map +1 -0
- package/dist/credentials/builtins/openai-key.js +38 -0
- package/dist/credentials/builtins/openai-key.js.map +1 -0
- package/dist/credentials/builtins/x-twitter-api.d.ts +4 -0
- package/dist/credentials/builtins/x-twitter-api.d.ts.map +1 -0
- package/dist/credentials/builtins/x-twitter-api.js +28 -0
- package/dist/credentials/builtins/x-twitter-api.js.map +1 -0
- package/dist/credentials/prompter.d.ts.map +1 -1
- package/dist/credentials/prompter.js +8 -5
- package/dist/credentials/prompter.js.map +1 -1
- package/dist/docker/cloud-run-runtime.d.ts +61 -0
- package/dist/docker/cloud-run-runtime.d.ts.map +1 -0
- package/dist/docker/cloud-run-runtime.js +510 -0
- package/dist/docker/cloud-run-runtime.js.map +1 -0
- package/dist/docker/ecs-runtime.d.ts +73 -0
- package/dist/docker/ecs-runtime.d.ts.map +1 -0
- package/dist/docker/ecs-runtime.js +596 -0
- package/dist/docker/ecs-runtime.js.map +1 -0
- package/dist/docker/image.d.ts.map +1 -1
- package/dist/docker/image.js +3 -2
- package/dist/docker/image.js.map +1 -1
- package/dist/docker/local-runtime.d.ts +19 -0
- package/dist/docker/local-runtime.d.ts.map +1 -0
- package/dist/docker/local-runtime.js +209 -0
- package/dist/docker/local-runtime.js.map +1 -0
- package/dist/docker/network.d.ts +1 -1
- package/dist/docker/network.d.ts.map +1 -1
- package/dist/docker/network.js +2 -1
- package/dist/docker/network.js.map +1 -1
- package/dist/docker/runtime.d.ts +90 -0
- package/dist/docker/runtime.d.ts.map +1 -0
- package/dist/docker/runtime.js +2 -0
- package/dist/docker/runtime.js.map +1 -0
- package/dist/gateway/index.d.ts +8 -2
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +16 -8
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/credentials.d.ts +5 -0
- package/dist/gateway/routes/credentials.d.ts.map +1 -0
- package/dist/gateway/routes/credentials.js +17 -0
- package/dist/gateway/routes/credentials.js.map +1 -0
- package/dist/gateway/routes/logs.d.ts +5 -0
- package/dist/gateway/routes/logs.d.ts.map +1 -0
- package/dist/gateway/routes/logs.js +31 -0
- package/dist/gateway/routes/logs.js.map +1 -0
- package/dist/gateway/routes/shutdown.d.ts +2 -1
- package/dist/gateway/routes/shutdown.d.ts.map +1 -1
- package/dist/gateway/routes/shutdown.js +7 -16
- package/dist/gateway/routes/shutdown.js.map +1 -1
- package/dist/gateway/routes/webhooks.d.ts +2 -1
- package/dist/gateway/routes/webhooks.d.ts.map +1 -1
- package/dist/gateway/routes/webhooks.js +11 -4
- package/dist/gateway/routes/webhooks.js.map +1 -1
- package/dist/gateway/types.d.ts +6 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +2 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/scheduler/index.d.ts +3 -2
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +286 -67
- package/dist/scheduler/index.js.map +1 -1
- package/dist/setup/scaffold.d.ts.map +1 -1
- package/dist/setup/scaffold.js +110 -50
- package/dist/setup/scaffold.js.map +1 -1
- package/dist/setup/validators.d.ts +14 -0
- package/dist/setup/validators.d.ts.map +1 -1
- package/dist/setup/validators.js +53 -0
- package/dist/setup/validators.js.map +1 -1
- package/dist/shared/asm-backend.d.ts +25 -0
- package/dist/shared/asm-backend.d.ts.map +1 -0
- package/dist/shared/asm-backend.js +107 -0
- package/dist/shared/asm-backend.js.map +1 -0
- package/dist/shared/aws-constants.d.ts +55 -0
- package/dist/shared/aws-constants.d.ts.map +1 -0
- package/dist/shared/aws-constants.js +55 -0
- package/dist/shared/aws-constants.js.map +1 -0
- package/dist/shared/config.d.ts +25 -5
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +15 -22
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/credential-backend.d.ts +28 -0
- package/dist/shared/credential-backend.d.ts.map +1 -0
- package/dist/shared/credential-backend.js +2 -0
- package/dist/shared/credential-backend.js.map +1 -0
- package/dist/shared/credentials.d.ts +42 -4
- package/dist/shared/credentials.d.ts.map +1 -1
- package/dist/shared/credentials.js +83 -6
- package/dist/shared/credentials.js.map +1 -1
- package/dist/shared/filesystem-backend.d.ts +18 -0
- package/dist/shared/filesystem-backend.d.ts.map +1 -0
- package/dist/shared/filesystem-backend.js +86 -0
- package/dist/shared/filesystem-backend.js.map +1 -0
- package/dist/shared/gsm-backend.d.ts +35 -0
- package/dist/shared/gsm-backend.d.ts.map +1 -0
- package/dist/shared/gsm-backend.js +208 -0
- package/dist/shared/gsm-backend.js.map +1 -0
- package/dist/shared/remote.d.ts +11 -0
- package/dist/shared/remote.d.ts.map +1 -0
- package/dist/shared/remote.js +29 -0
- package/dist/shared/remote.js.map +1 -0
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +13 -4
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/status-tracker.d.ts +3 -2
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js.map +1 -1
- package/dist/webhooks/definitions/github.js +1 -1
- package/dist/webhooks/definitions/github.js.map +1 -1
- package/dist/webhooks/definitions/sentry.js +1 -1
- package/dist/webhooks/definitions/sentry.js.map +1 -1
- package/dist/webhooks/providers/github.d.ts +1 -1
- package/dist/webhooks/providers/github.d.ts.map +1 -1
- package/dist/webhooks/providers/github.js +13 -9
- package/dist/webhooks/providers/github.js.map +1 -1
- package/dist/webhooks/providers/sentry.d.ts +1 -1
- package/dist/webhooks/providers/sentry.d.ts.map +1 -1
- package/dist/webhooks/providers/sentry.js +12 -9
- package/dist/webhooks/providers/sentry.js.map +1 -1
- package/dist/webhooks/registry.d.ts +1 -1
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/registry.js +20 -13
- package/dist/webhooks/registry.js.map +1 -1
- package/dist/webhooks/types.d.ts +16 -6
- package/dist/webhooks/types.d.ts.map +1 -1
- package/docker/Dockerfile +4 -1
- package/package.json +10 -1
- package/dist/cli/commands/setup.d.ts.map +0 -1
- package/dist/cli/commands/setup.js +0 -50
- package/dist/cli/commands/setup.js.map +0 -1
- package/dist/docker/container.d.ts +0 -19
- package/dist/docker/container.d.ts.map +0 -1
- package/dist/docker/container.js +0 -73
- package/dist/docker/container.js.map +0 -1
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
+
import { select, input, confirm } from "@inquirer/prompts";
|
|
4
|
+
import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
|
|
5
|
+
import { createLocalBackend, createBackendFromCloudConfig } from "../../shared/remote.js";
|
|
6
|
+
import { reconcileCloudIam } from "./doctor.js";
|
|
7
|
+
import { teardownCloud } from "./cloud-teardown.js";
|
|
8
|
+
import { STSClient, GetCallerIdentityCommand } from "@aws-sdk/client-sts";
|
|
9
|
+
import { ECRClient, DescribeRepositoriesCommand, CreateRepositoryCommand, } from "@aws-sdk/client-ecr";
|
|
10
|
+
import { ECSClient, ListClustersCommand, DescribeClustersCommand, CreateClusterCommand, } from "@aws-sdk/client-ecs";
|
|
11
|
+
import { IAMClient, ListRolesCommand, CreateRoleCommand, GetRoleCommand, AttachRolePolicyCommand, PutRolePolicyCommand, } from "@aws-sdk/client-iam";
|
|
12
|
+
import { EC2Client, DescribeVpcsCommand, DescribeSubnetsCommand, DescribeSecurityGroupsCommand, } from "@aws-sdk/client-ec2";
|
|
13
|
+
import { CloudWatchLogsClient, CreateLogGroupCommand, } from "@aws-sdk/client-cloudwatch-logs";
|
|
14
|
+
import { AWS_CONSTANTS } from "../../shared/aws-constants.js";
|
|
15
|
+
const CREATE_NEW = "__create_new__";
|
|
16
|
+
const MANUAL_INPUT = "__manual_input__";
|
|
17
|
+
export async function execute(opts) {
|
|
18
|
+
const projectPath = resolve(opts.project);
|
|
19
|
+
const configPath = resolve(projectPath, "config.toml");
|
|
20
|
+
console.log("\n=== Cloud Setup ===\n");
|
|
21
|
+
// Check for existing cloud config
|
|
22
|
+
if (existsSync(configPath)) {
|
|
23
|
+
const existing = parseTOML(readFileSync(configPath, "utf-8"));
|
|
24
|
+
if (existing.cloud && existing.cloud.provider) {
|
|
25
|
+
console.log(`Existing cloud config found (provider: ${existing.cloud.provider}).`);
|
|
26
|
+
const proceed = await confirm({
|
|
27
|
+
message: "Tear down existing cloud infrastructure before re-configuring?",
|
|
28
|
+
default: true,
|
|
29
|
+
});
|
|
30
|
+
if (proceed) {
|
|
31
|
+
await teardownCloud(projectPath, existing.cloud);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const skip = await confirm({
|
|
35
|
+
message: "Continue setup anyway (will overwrite [cloud] config)?",
|
|
36
|
+
default: false,
|
|
37
|
+
});
|
|
38
|
+
if (!skip) {
|
|
39
|
+
console.log("Aborted.");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// 1. Select provider
|
|
46
|
+
const provider = await select({
|
|
47
|
+
message: "Cloud provider:",
|
|
48
|
+
choices: [
|
|
49
|
+
{ name: "GCP Cloud Run Jobs", value: "cloud-run" },
|
|
50
|
+
{ name: "AWS ECS Fargate", value: "ecs" },
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
// 2. Prompt for provider-specific fields
|
|
54
|
+
const cloud = { provider };
|
|
55
|
+
if (provider === "cloud-run") {
|
|
56
|
+
cloud.gcpProject = await input({ message: "GCP project ID:" });
|
|
57
|
+
cloud.region = await input({ message: "Region:", default: "us-central1" });
|
|
58
|
+
cloud.artifactRegistry = await input({
|
|
59
|
+
message: "Artifact Registry repo:",
|
|
60
|
+
default: `${cloud.region}-docker.pkg.dev/${cloud.gcpProject}/${AWS_CONSTANTS.DEFAULT_ECR_REPO}`,
|
|
61
|
+
});
|
|
62
|
+
cloud.serviceAccount = await input({
|
|
63
|
+
message: "Service account email (for job creation):",
|
|
64
|
+
default: AWS_CONSTANTS.defaultGcpRunner(cloud.gcpProject),
|
|
65
|
+
});
|
|
66
|
+
const prefix = await input({ message: "Secret prefix:", default: AWS_CONSTANTS.DEFAULT_SECRET_PREFIX });
|
|
67
|
+
if (prefix !== AWS_CONSTANTS.DEFAULT_SECRET_PREFIX)
|
|
68
|
+
cloud.secretPrefix = prefix;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const ok = await setupEcsCloud(cloud);
|
|
72
|
+
if (!ok)
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// 3. Write [cloud] to config.toml
|
|
76
|
+
let rawConfig = {};
|
|
77
|
+
if (existsSync(configPath)) {
|
|
78
|
+
rawConfig = parseTOML(readFileSync(configPath, "utf-8"));
|
|
79
|
+
}
|
|
80
|
+
// Strip undefined values before writing
|
|
81
|
+
const cloudToWrite = {};
|
|
82
|
+
for (const [k, v] of Object.entries(cloud)) {
|
|
83
|
+
if (v !== undefined)
|
|
84
|
+
cloudToWrite[k] = v;
|
|
85
|
+
}
|
|
86
|
+
rawConfig.cloud = cloudToWrite;
|
|
87
|
+
writeFileSync(configPath, stringifyTOML(rawConfig));
|
|
88
|
+
console.log(`\nWrote [cloud] config to ${configPath}`);
|
|
89
|
+
// 4. Push credentials
|
|
90
|
+
console.log(`\nPushing local credentials to ${provider}...`);
|
|
91
|
+
try {
|
|
92
|
+
const local = createLocalBackend();
|
|
93
|
+
const remote = await createBackendFromCloudConfig(cloud);
|
|
94
|
+
const localEntries = await local.list();
|
|
95
|
+
if (localEntries.length === 0) {
|
|
96
|
+
console.log("No local credentials found. Run 'al doctor' to configure them, then 'al doctor -c' to push.");
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
let pushed = 0;
|
|
100
|
+
for (const entry of localEntries) {
|
|
101
|
+
const value = await local.read(entry.type, entry.instance, entry.field);
|
|
102
|
+
if (value !== undefined) {
|
|
103
|
+
await remote.write(entry.type, entry.instance, entry.field, value);
|
|
104
|
+
pushed++;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
console.log(`Pushed ${pushed} credential field(s).`);
|
|
108
|
+
// 5. Provision IAM
|
|
109
|
+
console.log(`\nProvisioning per-agent IAM resources...`);
|
|
110
|
+
await reconcileCloudIam(projectPath, cloud);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.log(`\nCloud credential push/IAM failed: ${err.message}`);
|
|
115
|
+
console.log("You can retry later with: al doctor -c");
|
|
116
|
+
}
|
|
117
|
+
console.log("\nCloud setup complete.");
|
|
118
|
+
}
|
|
119
|
+
// --- ECS auto-discovery setup ---
|
|
120
|
+
async function setupEcsCloud(cloud) {
|
|
121
|
+
// Check for AWS credentials before asking any questions
|
|
122
|
+
console.log("Checking for AWS credentials...");
|
|
123
|
+
const probe = new STSClient({});
|
|
124
|
+
try {
|
|
125
|
+
const identity = await probe.send(new GetCallerIdentityCommand({}));
|
|
126
|
+
console.log(` Authenticated as ${identity.Arn}\n`);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
console.log("\n No AWS credentials found. To configure them:\n");
|
|
130
|
+
console.log(" 1. Install the AWS CLI:");
|
|
131
|
+
console.log(" https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html\n");
|
|
132
|
+
console.log(" 2. Run: aws configure\n");
|
|
133
|
+
console.log(" 3. Then re-run: al cloud setup\n");
|
|
134
|
+
console.log(" Alternatively, set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables.\n");
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
cloud.awsRegion = await input({ message: "AWS region:", default: "us-east-1" });
|
|
138
|
+
const region = cloud.awsRegion;
|
|
139
|
+
// Create SDK clients with the chosen region
|
|
140
|
+
const stsClient = new STSClient({ region });
|
|
141
|
+
const ecrClient = new ECRClient({ region });
|
|
142
|
+
const ecsClient = new ECSClient({ region });
|
|
143
|
+
const iamClient = new IAMClient({});
|
|
144
|
+
const ec2Client = new EC2Client({ region });
|
|
145
|
+
// Get account ID in the target region
|
|
146
|
+
let accountId;
|
|
147
|
+
const identity = await stsClient.send(new GetCallerIdentityCommand({}));
|
|
148
|
+
accountId = identity.Account;
|
|
149
|
+
cloud.ecrRepository = await pickOrCreateEcrRepo(ecrClient, region, accountId);
|
|
150
|
+
cloud.ecsCluster = await pickOrCreateEcsCluster(ecsClient);
|
|
151
|
+
cloud.executionRoleArn = await pickOrCreateEcsRole(iamClient, "Execution role (ECR pull + CloudWatch Logs)", AWS_CONSTANTS.EXECUTION_ROLE, ["arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"]);
|
|
152
|
+
cloud.taskRoleArn = await pickOrCreateEcsRole(iamClient, "Default task role (Secrets Manager access)", AWS_CONSTANTS.DEFAULT_TASK_ROLE, [], [cloud.executionRoleArn]);
|
|
153
|
+
// Add Secrets Manager + CloudWatch Logs inline policy to execution role
|
|
154
|
+
const executionRoleName = cloud.executionRoleArn.split("/").pop();
|
|
155
|
+
const secretPrefix = AWS_CONSTANTS.DEFAULT_SECRET_PREFIX;
|
|
156
|
+
try {
|
|
157
|
+
await iamClient.send(new PutRolePolicyCommand({
|
|
158
|
+
RoleName: executionRoleName,
|
|
159
|
+
PolicyName: "ActionLlamaExecution",
|
|
160
|
+
PolicyDocument: JSON.stringify({
|
|
161
|
+
Version: "2012-10-17",
|
|
162
|
+
Statement: [
|
|
163
|
+
{
|
|
164
|
+
Effect: "Allow",
|
|
165
|
+
Action: "secretsmanager:GetSecretValue",
|
|
166
|
+
Resource: `arn:aws:secretsmanager:${region}:${accountId}:secret:${secretPrefix}/*`,
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
Effect: "Allow",
|
|
170
|
+
Action: "logs:CreateLogGroup",
|
|
171
|
+
Resource: `arn:aws:logs:${region}:${accountId}:log-group:${AWS_CONSTANTS.LOG_GROUP}*`,
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
}),
|
|
175
|
+
}));
|
|
176
|
+
console.log(` Attached ActionLlamaExecution policy to ${executionRoleName}`);
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
throw new Error(`Failed to attach ActionLlamaExecution policy to ${executionRoleName}: ${err.message}\n` +
|
|
180
|
+
`The execution role needs secretsmanager:GetSecretValue and logs:CreateLogGroup permissions.\n` +
|
|
181
|
+
`Either grant your IAM user iam:PutRolePolicy on this role, or attach the policy manually in the AWS Console.`);
|
|
182
|
+
}
|
|
183
|
+
// Create CloudWatch log group for ECS task logs
|
|
184
|
+
const cwlClient = new CloudWatchLogsClient({ region });
|
|
185
|
+
try {
|
|
186
|
+
await cwlClient.send(new CreateLogGroupCommand({ logGroupName: AWS_CONSTANTS.LOG_GROUP }));
|
|
187
|
+
console.log(` Created log group: ${AWS_CONSTANTS.LOG_GROUP}`);
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
if (err.name === "ResourceAlreadyExistsException") {
|
|
191
|
+
console.log(` Log group already exists: ${AWS_CONSTANTS.LOG_GROUP}`);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
console.log(` Warning: could not create log group: ${err.message}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Create CodeBuild service role for remote image builds
|
|
198
|
+
await ensureCodeBuildRole(iamClient, accountId, region, cloud.ecrRepository);
|
|
199
|
+
const result = await pickVpcAndSubnets(ec2Client);
|
|
200
|
+
cloud.subnets = result.subnets;
|
|
201
|
+
const sgs = await pickSecurityGroups(ec2Client, result.vpcId);
|
|
202
|
+
if (sgs.length > 0)
|
|
203
|
+
cloud.securityGroups = sgs;
|
|
204
|
+
const prefix = await input({ message: "Secret prefix:", default: AWS_CONSTANTS.DEFAULT_SECRET_PREFIX });
|
|
205
|
+
if (prefix !== AWS_CONSTANTS.DEFAULT_SECRET_PREFIX)
|
|
206
|
+
cloud.awsSecretPrefix = prefix;
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
// --- Resource pickers ---
|
|
210
|
+
async function pickOrCreateEcrRepo(ecrClient, region, accountId) {
|
|
211
|
+
console.log("Looking for ECR repositories...");
|
|
212
|
+
try {
|
|
213
|
+
const data = await ecrClient.send(new DescribeRepositoriesCommand({}));
|
|
214
|
+
const repos = data.repositories || [];
|
|
215
|
+
if (repos.length > 0) {
|
|
216
|
+
const choices = [
|
|
217
|
+
...repos.map((r) => ({ name: r.repositoryName, value: r.repositoryUri })),
|
|
218
|
+
{ name: "Create new repository", value: CREATE_NEW },
|
|
219
|
+
{ name: "Enter URI manually", value: MANUAL_INPUT },
|
|
220
|
+
];
|
|
221
|
+
const choice = await select({ message: "ECR repository:", choices });
|
|
222
|
+
if (choice === MANUAL_INPUT)
|
|
223
|
+
return input({ message: "ECR repository URI:" });
|
|
224
|
+
if (choice !== CREATE_NEW)
|
|
225
|
+
return choice;
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.log(" No ECR repositories found.");
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
console.log(" Could not list ECR repositories.");
|
|
233
|
+
}
|
|
234
|
+
const name = await input({ message: "New ECR repository name:", default: AWS_CONSTANTS.DEFAULT_ECR_REPO });
|
|
235
|
+
try {
|
|
236
|
+
const data = await ecrClient.send(new CreateRepositoryCommand({ repositoryName: name }));
|
|
237
|
+
const uri = data.repository.repositoryUri;
|
|
238
|
+
console.log(` Created: ${uri}`);
|
|
239
|
+
return uri;
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
if (err.name === "RepositoryAlreadyExistsException") {
|
|
243
|
+
const uri = `${accountId}.dkr.ecr.${region}.amazonaws.com/${name}`;
|
|
244
|
+
console.log(` Already exists: ${uri}`);
|
|
245
|
+
return uri;
|
|
246
|
+
}
|
|
247
|
+
console.log(` Failed to create repository: ${err.message}`);
|
|
248
|
+
return input({ message: "ECR repository URI:" });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async function pickOrCreateEcsCluster(ecsClient) {
|
|
252
|
+
console.log("\nLooking for ECS clusters...");
|
|
253
|
+
try {
|
|
254
|
+
const listData = await ecsClient.send(new ListClustersCommand({}));
|
|
255
|
+
const arns = listData.clusterArns || [];
|
|
256
|
+
if (arns.length > 0) {
|
|
257
|
+
const descData = await ecsClient.send(new DescribeClustersCommand({ clusters: arns }));
|
|
258
|
+
const clusters = (descData.clusters || []).filter((c) => c.status === "ACTIVE");
|
|
259
|
+
if (clusters.length > 0) {
|
|
260
|
+
const choices = [
|
|
261
|
+
...clusters.map((c) => ({
|
|
262
|
+
name: `${c.clusterName} (${c.runningTasksCount || 0} running tasks)`,
|
|
263
|
+
value: c.clusterName,
|
|
264
|
+
})),
|
|
265
|
+
{ name: "Create new cluster", value: CREATE_NEW },
|
|
266
|
+
{ name: "Enter name manually", value: MANUAL_INPUT },
|
|
267
|
+
];
|
|
268
|
+
const choice = await select({ message: "ECS cluster:", choices });
|
|
269
|
+
if (choice === MANUAL_INPUT)
|
|
270
|
+
return input({ message: "ECS cluster name:" });
|
|
271
|
+
if (choice !== CREATE_NEW)
|
|
272
|
+
return choice;
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
console.log(" No active ECS clusters found.");
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
console.log(" No ECS clusters found.");
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
console.log(" Could not list ECS clusters.");
|
|
284
|
+
}
|
|
285
|
+
const name = await input({ message: "New ECS cluster name:", default: AWS_CONSTANTS.DEFAULT_CLUSTER });
|
|
286
|
+
try {
|
|
287
|
+
await ecsClient.send(new CreateClusterCommand({ clusterName: name }));
|
|
288
|
+
console.log(` Created cluster: ${name}`);
|
|
289
|
+
return name;
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
console.log(` Failed to create cluster: ${err.message}`);
|
|
293
|
+
return input({ message: "ECS cluster name:" });
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const ECS_TRUST_POLICY = JSON.stringify({
|
|
297
|
+
Version: "2012-10-17",
|
|
298
|
+
Statement: [{
|
|
299
|
+
Effect: "Allow",
|
|
300
|
+
Principal: { Service: "ecs-tasks.amazonaws.com" },
|
|
301
|
+
Action: "sts:AssumeRole",
|
|
302
|
+
}],
|
|
303
|
+
});
|
|
304
|
+
async function pickOrCreateEcsRole(iamClient, label, defaultName, managedPolicies, excludeArns) {
|
|
305
|
+
console.log(`\nLooking for IAM roles (${label})...`);
|
|
306
|
+
try {
|
|
307
|
+
const data = await iamClient.send(new ListRolesCommand({ MaxItems: 200 }));
|
|
308
|
+
const ecsRoles = (data.Roles || []).filter((r) => {
|
|
309
|
+
if (excludeArns?.includes(r.Arn))
|
|
310
|
+
return false;
|
|
311
|
+
try {
|
|
312
|
+
const doc = typeof r.AssumeRolePolicyDocument === "string"
|
|
313
|
+
? JSON.parse(decodeURIComponent(r.AssumeRolePolicyDocument))
|
|
314
|
+
: r.AssumeRolePolicyDocument;
|
|
315
|
+
return doc?.Statement?.some((s) => {
|
|
316
|
+
const svc = s.Principal?.Service;
|
|
317
|
+
return svc === "ecs-tasks.amazonaws.com" ||
|
|
318
|
+
(Array.isArray(svc) && svc.includes("ecs-tasks.amazonaws.com"));
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
if (ecsRoles.length > 0) {
|
|
326
|
+
const choices = [
|
|
327
|
+
...ecsRoles.map((r) => ({ name: r.RoleName, value: r.Arn })),
|
|
328
|
+
{ name: `Create new: ${defaultName}`, value: CREATE_NEW },
|
|
329
|
+
{ name: "Enter ARN manually", value: MANUAL_INPUT },
|
|
330
|
+
];
|
|
331
|
+
const choice = await select({ message: `${label}:`, choices });
|
|
332
|
+
if (choice === MANUAL_INPUT)
|
|
333
|
+
return input({ message: `${label} ARN:` });
|
|
334
|
+
if (choice !== CREATE_NEW)
|
|
335
|
+
return choice;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
console.log(" No ECS-compatible IAM roles found.");
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// iam:ListRoles not available — try to find the default role directly
|
|
343
|
+
try {
|
|
344
|
+
const data = await iamClient.send(new GetRoleCommand({ RoleName: defaultName }));
|
|
345
|
+
const arn = data.Role.Arn;
|
|
346
|
+
console.log(` Found existing role: ${arn}`);
|
|
347
|
+
const choices = [
|
|
348
|
+
{ name: `Use ${defaultName}`, value: arn },
|
|
349
|
+
{ name: "Enter ARN manually", value: MANUAL_INPUT },
|
|
350
|
+
];
|
|
351
|
+
const choice = await select({ message: `${label}:`, choices });
|
|
352
|
+
if (choice === MANUAL_INPUT)
|
|
353
|
+
return input({ message: `${label} ARN:` });
|
|
354
|
+
return choice;
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
console.log(" No existing role found.");
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
const name = await input({ message: "New role name:", default: defaultName });
|
|
361
|
+
// Check if the role already exists before trying to create
|
|
362
|
+
try {
|
|
363
|
+
const data = await iamClient.send(new GetRoleCommand({ RoleName: name }));
|
|
364
|
+
const arn = data.Role.Arn;
|
|
365
|
+
console.log(` Role already exists: ${arn}`);
|
|
366
|
+
return arn;
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
// Role doesn't exist — create it
|
|
370
|
+
}
|
|
371
|
+
try {
|
|
372
|
+
const data = await iamClient.send(new CreateRoleCommand({
|
|
373
|
+
RoleName: name,
|
|
374
|
+
AssumeRolePolicyDocument: ECS_TRUST_POLICY,
|
|
375
|
+
}));
|
|
376
|
+
const arn = data.Role.Arn;
|
|
377
|
+
console.log(` Created role: ${arn}`);
|
|
378
|
+
for (const policyArn of managedPolicies) {
|
|
379
|
+
try {
|
|
380
|
+
await iamClient.send(new AttachRolePolicyCommand({
|
|
381
|
+
RoleName: name,
|
|
382
|
+
PolicyArn: policyArn,
|
|
383
|
+
}));
|
|
384
|
+
console.log(` Attached: ${policyArn.split("/").pop()}`);
|
|
385
|
+
}
|
|
386
|
+
catch (attachErr) {
|
|
387
|
+
console.log(` Warning: could not attach ${policyArn.split("/").pop()}: ${attachErr.message}`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return arn;
|
|
391
|
+
}
|
|
392
|
+
catch (err) {
|
|
393
|
+
console.log(` Failed to create role: ${err.message}`);
|
|
394
|
+
return input({ message: `${label} ARN:` });
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
async function ensureCodeBuildRole(iamClient, accountId, region, ecrRepository) {
|
|
398
|
+
const roleName = AWS_CONSTANTS.CODEBUILD_ROLE;
|
|
399
|
+
console.log(`\nEnsuring CodeBuild service role (${roleName})...`);
|
|
400
|
+
const trustPolicy = JSON.stringify({
|
|
401
|
+
Version: "2012-10-17",
|
|
402
|
+
Statement: [{
|
|
403
|
+
Effect: "Allow",
|
|
404
|
+
Principal: { Service: "codebuild.amazonaws.com" },
|
|
405
|
+
Action: "sts:AssumeRole",
|
|
406
|
+
}],
|
|
407
|
+
});
|
|
408
|
+
try {
|
|
409
|
+
await iamClient.send(new CreateRoleCommand({
|
|
410
|
+
RoleName: roleName,
|
|
411
|
+
AssumeRolePolicyDocument: trustPolicy,
|
|
412
|
+
}));
|
|
413
|
+
console.log(` Created role: ${roleName}`);
|
|
414
|
+
}
|
|
415
|
+
catch (err) {
|
|
416
|
+
if (err.name === "EntityAlreadyExistsException") {
|
|
417
|
+
console.log(` Role already exists`);
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
console.log(` Warning: could not create ${roleName}: ${err.message}`);
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// ECR push + S3 read + CloudWatch Logs
|
|
425
|
+
const repoArn = `arn:aws:ecr:${region}:${accountId}:repository/${ecrRepository.split("/").pop()}`;
|
|
426
|
+
const bucketName = AWS_CONSTANTS.buildBucket(accountId, region);
|
|
427
|
+
try {
|
|
428
|
+
await iamClient.send(new PutRolePolicyCommand({
|
|
429
|
+
RoleName: roleName,
|
|
430
|
+
PolicyName: "CodeBuildPermissions",
|
|
431
|
+
PolicyDocument: JSON.stringify({
|
|
432
|
+
Version: "2012-10-17",
|
|
433
|
+
Statement: [
|
|
434
|
+
{
|
|
435
|
+
Effect: "Allow",
|
|
436
|
+
Action: "ecr:GetAuthorizationToken",
|
|
437
|
+
Resource: "*",
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
Effect: "Allow",
|
|
441
|
+
Action: [
|
|
442
|
+
"ecr:BatchCheckLayerAvailability",
|
|
443
|
+
"ecr:PutImage",
|
|
444
|
+
"ecr:InitiateLayerUpload",
|
|
445
|
+
"ecr:UploadLayerPart",
|
|
446
|
+
"ecr:CompleteLayerUpload",
|
|
447
|
+
"ecr:GetDownloadUrlForLayer",
|
|
448
|
+
"ecr:BatchGetImage",
|
|
449
|
+
],
|
|
450
|
+
Resource: repoArn,
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
Effect: "Allow",
|
|
454
|
+
Action: "s3:GetObject",
|
|
455
|
+
Resource: `arn:aws:s3:::${bucketName}/*`,
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
Effect: "Allow",
|
|
459
|
+
Action: [
|
|
460
|
+
"logs:CreateLogGroup",
|
|
461
|
+
"logs:CreateLogStream",
|
|
462
|
+
"logs:PutLogEvents",
|
|
463
|
+
],
|
|
464
|
+
Resource: "*",
|
|
465
|
+
},
|
|
466
|
+
],
|
|
467
|
+
}),
|
|
468
|
+
}));
|
|
469
|
+
console.log(` Attached CodeBuildPermissions policy`);
|
|
470
|
+
}
|
|
471
|
+
catch (err) {
|
|
472
|
+
console.log(` Warning: could not attach policy to ${roleName}: ${err.message}`);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
async function pickVpcAndSubnets(ec2Client) {
|
|
476
|
+
console.log("\nLooking for VPCs...");
|
|
477
|
+
let vpcId;
|
|
478
|
+
try {
|
|
479
|
+
const data = await ec2Client.send(new DescribeVpcsCommand({}));
|
|
480
|
+
const vpcs = data.Vpcs || [];
|
|
481
|
+
if (vpcs.length > 0) {
|
|
482
|
+
if (vpcs.length === 1) {
|
|
483
|
+
vpcId = vpcs[0].VpcId;
|
|
484
|
+
const nameTag = vpcs[0].Tags?.find((t) => t.Key === "Name")?.Value;
|
|
485
|
+
console.log(` Using VPC: ${nameTag ? `${nameTag} (${vpcId})` : vpcId}`);
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
const choices = vpcs.map((v) => {
|
|
489
|
+
const nameTag = v.Tags?.find((t) => t.Key === "Name")?.Value;
|
|
490
|
+
const label = nameTag ? `${nameTag} (${v.VpcId})` : v.VpcId;
|
|
491
|
+
const defaultMarker = v.IsDefault ? " [default]" : "";
|
|
492
|
+
return { name: `${label} — ${v.CidrBlock}${defaultMarker}`, value: v.VpcId };
|
|
493
|
+
});
|
|
494
|
+
vpcId = await select({ message: "VPC:", choices });
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
catch {
|
|
499
|
+
console.log(" Could not list VPCs.");
|
|
500
|
+
}
|
|
501
|
+
if (!vpcId) {
|
|
502
|
+
const raw = await input({ message: "Subnet IDs (comma-separated):" });
|
|
503
|
+
return { subnets: raw.split(",").map(s => s.trim()).filter(Boolean), vpcId: "" };
|
|
504
|
+
}
|
|
505
|
+
// List subnets in chosen VPC
|
|
506
|
+
console.log(`\nLooking for subnets in ${vpcId}...`);
|
|
507
|
+
try {
|
|
508
|
+
const data = await ec2Client.send(new DescribeSubnetsCommand({
|
|
509
|
+
Filters: [{ Name: "vpc-id", Values: [vpcId] }],
|
|
510
|
+
}));
|
|
511
|
+
const subnets = data.Subnets || [];
|
|
512
|
+
if (subnets.length > 0) {
|
|
513
|
+
for (const s of subnets) {
|
|
514
|
+
const nameTag = s.Tags?.find((t) => t.Key === "Name")?.Value;
|
|
515
|
+
const label = nameTag ? `${nameTag} (${s.SubnetId})` : s.SubnetId;
|
|
516
|
+
console.log(` ${label} — ${s.AvailabilityZone}, ${s.CidrBlock}`);
|
|
517
|
+
}
|
|
518
|
+
const useAll = await confirm({
|
|
519
|
+
message: `Use all ${subnets.length} subnets? (recommended for multi-AZ)`,
|
|
520
|
+
default: true,
|
|
521
|
+
});
|
|
522
|
+
if (useAll) {
|
|
523
|
+
return { subnets: subnets.map((s) => s.SubnetId), vpcId };
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
console.log(" No subnets found in this VPC.");
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
catch {
|
|
531
|
+
console.log(" Could not list subnets.");
|
|
532
|
+
}
|
|
533
|
+
const raw = await input({ message: "Subnet IDs (comma-separated):" });
|
|
534
|
+
return { subnets: raw.split(",").map(s => s.trim()).filter(Boolean), vpcId };
|
|
535
|
+
}
|
|
536
|
+
async function pickSecurityGroups(ec2Client, vpcId) {
|
|
537
|
+
if (!vpcId) {
|
|
538
|
+
const raw = await input({ message: "Security group IDs (comma-separated, optional):" });
|
|
539
|
+
return raw.trim() ? raw.split(",").map(s => s.trim()).filter(Boolean) : [];
|
|
540
|
+
}
|
|
541
|
+
console.log(`\nLooking for security groups in ${vpcId}...`);
|
|
542
|
+
try {
|
|
543
|
+
const data = await ec2Client.send(new DescribeSecurityGroupsCommand({
|
|
544
|
+
Filters: [{ Name: "vpc-id", Values: [vpcId] }],
|
|
545
|
+
}));
|
|
546
|
+
const sgs = data.SecurityGroups || [];
|
|
547
|
+
if (sgs.length > 0) {
|
|
548
|
+
const choices = [
|
|
549
|
+
...sgs.map((sg) => ({
|
|
550
|
+
name: `${sg.GroupName} (${sg.GroupId})${sg.Description ? ` — ${sg.Description}` : ""}`,
|
|
551
|
+
value: sg.GroupId,
|
|
552
|
+
})),
|
|
553
|
+
{ name: "Skip (use VPC default)", value: "" },
|
|
554
|
+
];
|
|
555
|
+
const choice = await select({ message: "Security group:", choices });
|
|
556
|
+
return choice ? [choice] : [];
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
catch {
|
|
560
|
+
console.log(" Could not list security groups.");
|
|
561
|
+
}
|
|
562
|
+
const raw = await input({ message: "Security group IDs (comma-separated, optional):" });
|
|
563
|
+
return raw.trim() ? raw.split(",").map(s => s.trim()).filter(Boolean) : [];
|
|
564
|
+
}
|
|
565
|
+
//# sourceMappingURL=cloud-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-setup.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CloudConfig } from "../../shared/config.js";
|
|
2
|
+
export declare function execute(opts: {
|
|
3
|
+
project: string;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export declare function teardownCloud(projectPath: string, cloud: CloudConfig): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=cloud-teardown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-teardown.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud-teardown.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK1D,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCtE;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1F"}
|