alchemy 0.61.0 → 0.62.1
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 +1 -2
- package/bin/alchemy.js +1916 -1934
- package/bin/commands/init.ts +29 -2
- package/bin/services/execute-alchemy.ts +1 -2
- package/bin/services/github-workflow.ts +204 -142
- package/lib/alchemy.d.ts +2 -2
- package/lib/alchemy.d.ts.map +1 -1
- package/lib/alchemy.js.map +1 -1
- package/lib/aws/client-props.d.ts +149 -0
- package/lib/aws/client-props.d.ts.map +1 -0
- package/lib/aws/client-props.js +1 -0
- package/lib/aws/client-props.js.map +1 -0
- package/lib/aws/credentials.d.ts +68 -5
- package/lib/aws/credentials.d.ts.map +1 -1
- package/lib/aws/credentials.js +148 -0
- package/lib/aws/credentials.js.map +1 -1
- package/lib/aws/ec2/internet-gateway-attachment.d.ts +57 -3
- package/lib/aws/ec2/internet-gateway-attachment.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway-attachment.js +57 -3
- package/lib/aws/ec2/internet-gateway-attachment.js.map +1 -1
- package/lib/aws/ec2/internet-gateway.d.ts +68 -40
- package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway.js +68 -40
- package/lib/aws/ec2/internet-gateway.js.map +1 -1
- package/lib/aws/ec2/nat-gateway.d.ts +99 -18
- package/lib/aws/ec2/nat-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/nat-gateway.js +113 -37
- package/lib/aws/ec2/nat-gateway.js.map +1 -1
- package/lib/aws/ec2/route-table-association.d.ts +1 -1
- package/lib/aws/ec2/route-table-association.js +1 -1
- package/lib/aws/ec2/route-table.d.ts +64 -1
- package/lib/aws/ec2/route-table.d.ts.map +1 -1
- package/lib/aws/ec2/route-table.js +64 -1
- package/lib/aws/ec2/route-table.js.map +1 -1
- package/lib/aws/ec2/route.d.ts +60 -1
- package/lib/aws/ec2/route.d.ts.map +1 -1
- package/lib/aws/ec2/route.js +60 -1
- package/lib/aws/ec2/route.js.map +1 -1
- package/lib/aws/ec2/security-group.d.ts +96 -3
- package/lib/aws/ec2/security-group.d.ts.map +1 -1
- package/lib/aws/ec2/security-group.js +96 -3
- package/lib/aws/ec2/security-group.js.map +1 -1
- package/lib/aws/ec2/subnet.d.ts +61 -3
- package/lib/aws/ec2/subnet.d.ts.map +1 -1
- package/lib/aws/ec2/subnet.js +61 -3
- package/lib/aws/ec2/subnet.js.map +1 -1
- package/lib/aws/ec2/utils.d.ts +10 -2
- package/lib/aws/ec2/utils.d.ts.map +1 -1
- package/lib/aws/ec2/utils.js +68 -7
- package/lib/aws/ec2/utils.js.map +1 -1
- package/lib/aws/ec2/vpc.d.ts +50 -2
- package/lib/aws/ec2/vpc.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.js +50 -2
- package/lib/aws/ec2/vpc.js.map +1 -1
- package/lib/aws/index.d.ts +2 -0
- package/lib/aws/index.d.ts.map +1 -1
- package/lib/aws/index.js +2 -0
- package/lib/aws/index.js.map +1 -1
- package/lib/cloudflare/api-response.js +2 -2
- package/lib/cloudflare/api-response.js.map +1 -1
- package/lib/cloudflare/api.d.ts +19 -0
- package/lib/cloudflare/api.d.ts.map +1 -1
- package/lib/cloudflare/api.js +4 -0
- package/lib/cloudflare/api.js.map +1 -1
- package/lib/cloudflare/assets.d.ts.map +1 -1
- package/lib/cloudflare/assets.js +3 -4
- package/lib/cloudflare/assets.js.map +1 -1
- package/lib/cloudflare/bucket.d.ts +5 -3
- package/lib/cloudflare/bucket.d.ts.map +1 -1
- package/lib/cloudflare/bucket.js +22 -18
- package/lib/cloudflare/bucket.js.map +1 -1
- package/lib/cloudflare/bundle/plugin-compat-warning.js +7 -7
- package/lib/cloudflare/bundle/plugin-compat-warning.js.map +1 -1
- package/lib/cloudflare/cloudflare-env-proxy.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/kv-namespace.d.ts +2 -2
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv-namespace.js.map +1 -1
- package/lib/cloudflare/oauth.js +3 -3
- package/lib/cloudflare/oauth.js.map +1 -1
- package/lib/cloudflare/quick-tunnel.d.ts +1 -1
- package/lib/cloudflare/sveltekit/plugin.d.ts +2 -1
- package/lib/cloudflare/sveltekit/plugin.d.ts.map +1 -1
- package/lib/cloudflare/sveltekit/plugin.js +9 -0
- package/lib/cloudflare/sveltekit/plugin.js.map +1 -1
- package/lib/cloudflare/website.d.ts.map +1 -1
- package/lib/cloudflare/website.js +26 -97
- package/lib/cloudflare/website.js.map +1 -1
- package/lib/cloudflare/worker-bundle.d.ts.map +1 -1
- package/lib/cloudflare/worker-bundle.js +9 -8
- package/lib/cloudflare/worker-bundle.js.map +1 -1
- package/lib/cloudflare/worker-tail.d.ts.map +1 -1
- package/lib/cloudflare/worker-tail.js +6 -6
- package/lib/cloudflare/worker-tail.js.map +1 -1
- package/lib/resource.d.ts +1 -0
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +13 -2
- package/lib/resource.js.map +1 -1
- package/lib/scope.d.ts +24 -23
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +28 -22
- package/lib/scope.js.map +1 -1
- package/lib/state/cloudflare-state-store.d.ts.map +1 -1
- package/lib/state/cloudflare-state-store.js +2 -1
- package/lib/state/cloudflare-state-store.js.map +1 -1
- package/lib/util/idempotent-spawn.d.ts +13 -8
- package/lib/util/idempotent-spawn.d.ts.map +1 -1
- package/lib/util/idempotent-spawn.js +120 -77
- package/lib/util/idempotent-spawn.js.map +1 -1
- package/lib/util/index.d.ts +2 -0
- package/lib/util/index.d.ts.map +1 -0
- package/lib/util/index.js +2 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/safe-fetch.d.ts +24 -0
- package/lib/util/safe-fetch.d.ts.map +1 -1
- package/lib/util/safe-fetch.js +72 -0
- package/lib/util/safe-fetch.js.map +1 -1
- package/package.json +8 -5
- package/src/alchemy.ts +2 -2
- package/src/aws/client-props.ts +156 -0
- package/src/aws/credentials.ts +165 -4
- package/src/aws/ec2/internet-gateway-attachment.ts +59 -4
- package/src/aws/ec2/internet-gateway.ts +70 -41
- package/src/aws/ec2/nat-gateway.ts +123 -33
- package/src/aws/ec2/route-table-association.ts +1 -1
- package/src/aws/ec2/route-table.ts +66 -2
- package/src/aws/ec2/route.ts +62 -2
- package/src/aws/ec2/security-group.ts +98 -4
- package/src/aws/ec2/subnet.ts +63 -4
- package/src/aws/ec2/utils.ts +73 -7
- package/src/aws/ec2/vpc.ts +52 -3
- package/src/aws/index.ts +2 -0
- package/src/cloudflare/api-response.ts +2 -2
- package/src/cloudflare/api.ts +23 -0
- package/src/cloudflare/assets.ts +3 -4
- package/src/cloudflare/bucket.ts +27 -25
- package/src/cloudflare/bundle/plugin-compat-warning.ts +7 -7
- package/src/cloudflare/cloudflare-env-proxy.ts +2 -2
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/kv-namespace.ts +26 -27
- package/src/cloudflare/oauth.ts +3 -3
- package/src/cloudflare/sveltekit/plugin.ts +14 -1
- package/src/cloudflare/website.ts +30 -111
- package/src/cloudflare/worker-bundle.ts +9 -8
- package/src/cloudflare/worker-tail.ts +6 -8
- package/src/resource.ts +19 -2
- package/src/scope.ts +77 -46
- package/src/state/cloudflare-state-store.ts +2 -1
- package/src/util/idempotent-spawn.ts +142 -99
- package/src/util/index.ts +1 -0
- package/src/util/safe-fetch.ts +114 -0
- package/templates/astro/alchemy.run.ts +4 -2
- package/templates/nuxt/alchemy.run.ts +4 -2
- package/templates/react-router/alchemy.run.ts +4 -2
- package/templates/rwsdk/alchemy.run.ts +3 -3
- package/templates/sveltekit/alchemy.run.ts +4 -2
- package/templates/tanstack-start/alchemy.run.ts +4 -2
- package/templates/typescript/alchemy.run.ts +2 -2
- package/templates/vite/alchemy.run.ts +3 -2
- package/templates/vite/src/worker.ts +13 -0
- package/templates/vite/tsconfig.json +0 -1
- package/templates/vite/worker/index.ts +0 -12
package/bin/commands/init.ts
CHANGED
|
@@ -59,6 +59,7 @@ export const init = loggedProcedure
|
|
|
59
59
|
main: updatedConfig?.main,
|
|
60
60
|
});
|
|
61
61
|
await updatePackageJson(context);
|
|
62
|
+
await updateGitignore(context);
|
|
62
63
|
|
|
63
64
|
displaySuccessMessage(context);
|
|
64
65
|
} catch (_error) {
|
|
@@ -264,8 +265,7 @@ export const worker = await Vite("${context.projectName}", {
|
|
|
264
265
|
// main: "./.output/server/index.mjs",
|
|
265
266
|
// command: "vite build",
|
|
266
267
|
// dev: { command: "vite dev" },
|
|
267
|
-
assets: "dist"
|
|
268
|
-
wrangler: false,
|
|
268
|
+
assets: "dist"
|
|
269
269
|
});
|
|
270
270
|
|
|
271
271
|
console.log({
|
|
@@ -482,6 +482,33 @@ async function updatePackageJson(context: InitContext): Promise<void> {
|
|
|
482
482
|
}
|
|
483
483
|
}
|
|
484
484
|
|
|
485
|
+
async function updateGitignore(context: InitContext) {
|
|
486
|
+
try {
|
|
487
|
+
const gitignorePath = resolve(context.cwd, ".gitignore");
|
|
488
|
+
|
|
489
|
+
await fs.ensureFile(gitignorePath);
|
|
490
|
+
|
|
491
|
+
let gitignoreContent = "";
|
|
492
|
+
if (await fs.pathExists(gitignorePath)) {
|
|
493
|
+
gitignoreContent = await fs.readFile(gitignorePath, "utf-8");
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const lines = gitignoreContent.split("\n").map((line) => line.trim());
|
|
497
|
+
const hasAlchemy = lines.some(
|
|
498
|
+
(line) => line === ".alchemy" || line === ".alchemy/",
|
|
499
|
+
);
|
|
500
|
+
|
|
501
|
+
if (!hasAlchemy) {
|
|
502
|
+
if (gitignoreContent && !gitignoreContent.endsWith("\n")) {
|
|
503
|
+
gitignoreContent += "\n";
|
|
504
|
+
}
|
|
505
|
+
await fs.appendFile(gitignorePath, ".alchemy\n", "utf-8");
|
|
506
|
+
}
|
|
507
|
+
} catch (error) {
|
|
508
|
+
throwWithContext(error, "Failed to update .gitignore");
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
485
512
|
interface TsConfigUpdate {
|
|
486
513
|
include?: string[];
|
|
487
514
|
exclude?: string[];
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noTemplateCurlyInString: we are building a github template workflow */
|
|
1
2
|
import { spinner } from "@clack/prompts";
|
|
2
|
-
import
|
|
3
|
+
import fs from "fs-extra";
|
|
3
4
|
import path from "node:path";
|
|
5
|
+
import YAML from "yaml";
|
|
4
6
|
import { throwWithContext } from "../errors.ts";
|
|
5
7
|
import type { ProjectContext } from "../types.ts";
|
|
8
|
+
import { PackageManager } from "./package-manager.ts";
|
|
6
9
|
|
|
7
10
|
export async function addGitHubWorkflowToAlchemy(
|
|
8
11
|
context: ProjectContext,
|
|
@@ -16,128 +19,215 @@ export async function addGitHubWorkflowToAlchemy(
|
|
|
16
19
|
const workflowDir = path.join(context.path, ".github", "workflows");
|
|
17
20
|
await fs.ensureDir(workflowDir);
|
|
18
21
|
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- uses: actions/checkout@v4
|
|
69
|
-
|
|
70
|
-
- name: Setup Bun
|
|
71
|
-
uses: oven-sh/setup-bun@v1
|
|
72
|
-
with:
|
|
73
|
-
bun-version: latest
|
|
74
|
-
|
|
75
|
-
- name: Install dependencies
|
|
76
|
-
shell: bash
|
|
77
|
-
run: bun install
|
|
78
|
-
|
|
79
|
-
- name: Cleanup Preview
|
|
80
|
-
run: bun run destroy
|
|
81
|
-
env:
|
|
82
|
-
BRANCH_PREFIX: pr-\${{ github.event.pull_request.number }}
|
|
83
|
-
GITHUB_SHA: \${{ github.event.pull_request.head.sha }}
|
|
84
|
-
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}
|
|
85
|
-
GITHUB_REPOSITORY_OWNER: \${{ github.repository_owner }}
|
|
86
|
-
GITHUB_REPOSITORY_NAME: \${{ github.event.repository.name }}
|
|
87
|
-
PULL_REQUEST: \${{ github.event.pull_request.number }}
|
|
88
|
-
CLOUDFLARE_API_TOKEN: \${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
89
|
-
CLOUDFLARE_ACCOUNT_ID: \${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
90
|
-
`;
|
|
91
|
-
|
|
92
|
-
const publishWorkflow = `name: Publish
|
|
93
|
-
|
|
94
|
-
on:
|
|
95
|
-
push:
|
|
96
|
-
branches: [main]
|
|
97
|
-
|
|
98
|
-
# Ensure only one workflow runs at a time
|
|
99
|
-
concurrency:
|
|
100
|
-
group: "publish"
|
|
101
|
-
cancel-in-progress: false
|
|
102
|
-
|
|
103
|
-
jobs:
|
|
104
|
-
publish:
|
|
105
|
-
runs-on: ubuntu-latest
|
|
106
|
-
permissions:
|
|
107
|
-
contents: read
|
|
108
|
-
steps:
|
|
109
|
-
- uses: actions/checkout@v4
|
|
110
|
-
|
|
111
|
-
- name: Setup Bun
|
|
112
|
-
uses: oven-sh/setup-bun@v1
|
|
113
|
-
with:
|
|
114
|
-
bun-version: latest
|
|
115
|
-
|
|
116
|
-
- name: Install dependencies
|
|
117
|
-
shell: bash
|
|
118
|
-
run: bun install
|
|
119
|
-
|
|
120
|
-
- name: Deploy to Production
|
|
121
|
-
run: bun run deploy
|
|
122
|
-
env:
|
|
123
|
-
STAGE: prod
|
|
124
|
-
GITHUB_SHA: \${{ github.sha }}
|
|
125
|
-
CLOUDFLARE_API_TOKEN: \${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
126
|
-
CLOUDFLARE_ACCOUNT_ID: \${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
127
|
-
`;
|
|
22
|
+
const pmCommands =
|
|
23
|
+
PackageManager[context.packageManager] ?? PackageManager.bun;
|
|
24
|
+
const installCmd = pmCommands.install;
|
|
25
|
+
const runCmd = pmCommands.run;
|
|
26
|
+
|
|
27
|
+
// Get the current Node.js major version
|
|
28
|
+
const nodeVersion = process.version.match(/^v(\d+)/)?.[1] || "22";
|
|
29
|
+
|
|
30
|
+
const installRuntime =
|
|
31
|
+
context.packageManager === "bun"
|
|
32
|
+
? {
|
|
33
|
+
name: "Setup Bun",
|
|
34
|
+
uses: "oven-sh/setup-bun@v1",
|
|
35
|
+
with: { "bun-version": "latest" },
|
|
36
|
+
}
|
|
37
|
+
: context.packageManager === "deno"
|
|
38
|
+
? {
|
|
39
|
+
name: "Setup Deno",
|
|
40
|
+
uses: "denoland/setup-deno@v1",
|
|
41
|
+
with: { "deno-version": "v1.x" },
|
|
42
|
+
}
|
|
43
|
+
: {
|
|
44
|
+
name: "Setup Node.js",
|
|
45
|
+
uses: "actions/setup-node@v4",
|
|
46
|
+
with: {
|
|
47
|
+
"node-version": nodeVersion,
|
|
48
|
+
...(context.packageManager === "pnpm" ||
|
|
49
|
+
context.packageManager === "yarn"
|
|
50
|
+
? { cache: context.packageManager }
|
|
51
|
+
: {}),
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const installAdditionalPackageManager =
|
|
56
|
+
context.packageManager === "pnpm"
|
|
57
|
+
? [
|
|
58
|
+
{
|
|
59
|
+
name: "Setup pnpm",
|
|
60
|
+
uses: "pnpm/action-setup@v3",
|
|
61
|
+
with: { version: "9" },
|
|
62
|
+
},
|
|
63
|
+
]
|
|
64
|
+
: [];
|
|
65
|
+
|
|
66
|
+
const installDependencies = {
|
|
67
|
+
name: "Install dependencies",
|
|
68
|
+
shell: "bash",
|
|
69
|
+
run: installCmd,
|
|
70
|
+
};
|
|
128
71
|
|
|
129
72
|
await fs.writeFile(
|
|
130
73
|
path.join(workflowDir, "pr-preview.yml"),
|
|
131
|
-
|
|
74
|
+
YAML.stringify({
|
|
75
|
+
name: "Preview",
|
|
76
|
+
on: {
|
|
77
|
+
pull_request: {
|
|
78
|
+
types: ["opened", "reopened", "synchronize", "closed"],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
concurrency: {
|
|
82
|
+
group: "pr-preview-\${{ github.event.pull_request.number }}",
|
|
83
|
+
"cancel-in-progress": false,
|
|
84
|
+
},
|
|
85
|
+
jobs: {
|
|
86
|
+
"deploy-preview": {
|
|
87
|
+
if: "\${{ github.event.action != 'closed' }}",
|
|
88
|
+
"runs-on": "ubuntu-latest",
|
|
89
|
+
permissions: {
|
|
90
|
+
contents: "read",
|
|
91
|
+
"pull-requests": "write",
|
|
92
|
+
},
|
|
93
|
+
steps: [
|
|
94
|
+
{ uses: "actions/checkout@v4" },
|
|
95
|
+
installRuntime,
|
|
96
|
+
...installAdditionalPackageManager,
|
|
97
|
+
installDependencies,
|
|
98
|
+
{
|
|
99
|
+
name: "Deploy Preview",
|
|
100
|
+
run: `${runCmd} deploy --stage pr-\${{ github.event.pull_request.number }}`,
|
|
101
|
+
env: {
|
|
102
|
+
GITHUB_SHA: "${{ github.event.pull_request.head.sha }}",
|
|
103
|
+
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
|
|
104
|
+
GITHUB_REPOSITORY_OWNER: "${{ github.repository_owner }}",
|
|
105
|
+
GITHUB_REPOSITORY_NAME: "${{ github.event.repository.name }}",
|
|
106
|
+
PULL_REQUEST: "${{ github.event.pull_request.number }}",
|
|
107
|
+
CLOUDFLARE_EMAIL: "${{ secrets.CLOUDFLARE_EMAIL }}",
|
|
108
|
+
CLOUDFLARE_API_TOKEN: "${{ secrets.CLOUDFLARE_API_TOKEN }}",
|
|
109
|
+
CLOUDFLARE_ACCOUNT_ID: "${{ secrets.CLOUDFLARE_ACCOUNT_ID }}",
|
|
110
|
+
ALCHEMY_PASSWORD: "${{ secrets.ALCHEMY_PASSWORD }}",
|
|
111
|
+
ALCHEMY_STATE_TOKEN: "${{ secrets.ALCHEMY_STATE_TOKEN }}",
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
},
|
|
116
|
+
"cleanup-preview": {
|
|
117
|
+
if: "${{ github.event.action == 'closed' }}",
|
|
118
|
+
"runs-on": "ubuntu-latest",
|
|
119
|
+
permissions: {
|
|
120
|
+
contents: "read",
|
|
121
|
+
"pull-requests": "write",
|
|
122
|
+
},
|
|
123
|
+
steps: [
|
|
124
|
+
{ uses: "actions/checkout@v4" },
|
|
125
|
+
installRuntime,
|
|
126
|
+
...installAdditionalPackageManager,
|
|
127
|
+
installDependencies,
|
|
128
|
+
{
|
|
129
|
+
name: "Cleanup Preview",
|
|
130
|
+
run: `${runCmd} destroy`,
|
|
131
|
+
env: {
|
|
132
|
+
GITHUB_SHA: "${{ github.event.pull_request.head.sha }}",
|
|
133
|
+
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
|
|
134
|
+
GITHUB_REPOSITORY_OWNER: "${{ github.repository_owner }}",
|
|
135
|
+
GITHUB_REPOSITORY_NAME: "${{ github.event.repository.name }}",
|
|
136
|
+
PULL_REQUEST: "${{ github.event.pull_request.number }}",
|
|
137
|
+
CLOUDFLARE_EMAIL: "${{ secrets.CLOUDFLARE_EMAIL }}",
|
|
138
|
+
CLOUDFLARE_API_TOKEN: "${{ secrets.CLOUDFLARE_API_TOKEN }}",
|
|
139
|
+
CLOUDFLARE_ACCOUNT_ID: "${{ secrets.CLOUDFLARE_ACCOUNT_ID }}",
|
|
140
|
+
ALCHEMY_PASSWORD: "${{ secrets.ALCHEMY_PASSWORD }}",
|
|
141
|
+
ALCHEMY_STATE_TOKEN: "${{ secrets.ALCHEMY_STATE_TOKEN }}",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
} as const),
|
|
148
|
+
);
|
|
149
|
+
await fs.writeFile(
|
|
150
|
+
path.join(workflowDir, "publish.yml"),
|
|
151
|
+
YAML.stringify({
|
|
152
|
+
name: "Publish",
|
|
153
|
+
on: {
|
|
154
|
+
push: {
|
|
155
|
+
branches: ["main"],
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
concurrency: {
|
|
159
|
+
group: "publish",
|
|
160
|
+
"cancel-in-progress": false,
|
|
161
|
+
},
|
|
162
|
+
jobs: {
|
|
163
|
+
publish: {
|
|
164
|
+
"runs-on": "ubuntu-latest",
|
|
165
|
+
permissions: {
|
|
166
|
+
contents: "read",
|
|
167
|
+
},
|
|
168
|
+
steps: [
|
|
169
|
+
{ uses: "actions/checkout@v4" },
|
|
170
|
+
context.packageManager === "bun"
|
|
171
|
+
? {
|
|
172
|
+
name: "Setup Bun",
|
|
173
|
+
uses: "oven-sh/setup-bun@v1",
|
|
174
|
+
with: { "bun-version": "latest" },
|
|
175
|
+
}
|
|
176
|
+
: context.packageManager === "deno"
|
|
177
|
+
? {
|
|
178
|
+
name: "Setup Deno",
|
|
179
|
+
uses: "denoland/setup-deno@v1",
|
|
180
|
+
with: { "deno-version": "v1.x" },
|
|
181
|
+
}
|
|
182
|
+
: {
|
|
183
|
+
name: "Setup Node.js",
|
|
184
|
+
uses: "actions/setup-node@v4",
|
|
185
|
+
with: {
|
|
186
|
+
"node-version": nodeVersion,
|
|
187
|
+
...(context.packageManager === "pnpm" ||
|
|
188
|
+
context.packageManager === "yarn"
|
|
189
|
+
? { cache: context.packageManager }
|
|
190
|
+
: {}),
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
...(context.packageManager === "pnpm"
|
|
194
|
+
? [
|
|
195
|
+
{
|
|
196
|
+
name: "Setup pnpm",
|
|
197
|
+
uses: "pnpm/action-setup@v3",
|
|
198
|
+
with: { version: "9" },
|
|
199
|
+
},
|
|
200
|
+
]
|
|
201
|
+
: []),
|
|
202
|
+
{ name: "Install dependencies", shell: "bash", run: installCmd },
|
|
203
|
+
{
|
|
204
|
+
name: "Deploy to Production",
|
|
205
|
+
run: `${runCmd} deploy`,
|
|
206
|
+
env: {
|
|
207
|
+
STAGE: "prod",
|
|
208
|
+
GITHUB_SHA: "${{ github.sha }}",
|
|
209
|
+
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
|
|
210
|
+
CLOUDFLARE_EMAIL: "${{ secrets.CLOUDFLARE_EMAIL }}",
|
|
211
|
+
CLOUDFLARE_API_TOKEN: "${{ secrets.CLOUDFLARE_API_TOKEN }}",
|
|
212
|
+
CLOUDFLARE_ACCOUNT_ID: "${{ secrets.CLOUDFLARE_ACCOUNT_ID }}",
|
|
213
|
+
ALCHEMY_PASSWORD: "${{ secrets.ALCHEMY_PASSWORD }}",
|
|
214
|
+
ALCHEMY_STATE_TOKEN: "${{ secrets.ALCHEMY_STATE_TOKEN }}",
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
} as const),
|
|
132
221
|
);
|
|
133
|
-
await fs.writeFile(path.join(workflowDir, "publish.yml"), publishWorkflow);
|
|
134
222
|
|
|
135
223
|
let code = await fs.readFile(alchemyFilePath, "utf-8");
|
|
224
|
+
code = code.replace("{projectName}", context.name);
|
|
136
225
|
|
|
137
226
|
const alchemyImportRegex = /(import alchemy from "alchemy";)/;
|
|
138
227
|
const alchemyImportMatch = code.match(alchemyImportRegex);
|
|
139
228
|
if (alchemyImportMatch) {
|
|
140
|
-
const githubImport =
|
|
229
|
+
const githubImport = `\nimport { GitHubComment } from "alchemy/github";
|
|
230
|
+
import { CloudflareStateStore } from "alchemy/state";`;
|
|
141
231
|
code = code.replace(alchemyImportRegex, `$1${githubImport}`);
|
|
142
232
|
}
|
|
143
233
|
|
|
@@ -149,16 +239,6 @@ jobs:
|
|
|
149
239
|
lastImportEnd = lastImportMatch.index + lastImportMatch[0].length;
|
|
150
240
|
}
|
|
151
241
|
|
|
152
|
-
if (lastImportEnd > 0) {
|
|
153
|
-
const stageVariable = `
|
|
154
|
-
const stage = process.env.STAGE || process.env.BRANCH_PREFIX || "dev";
|
|
155
|
-
`;
|
|
156
|
-
code =
|
|
157
|
-
code.slice(0, lastImportEnd) +
|
|
158
|
-
stageVariable +
|
|
159
|
-
code.slice(lastImportEnd);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
242
|
const appCallRegex = /const app = await alchemy\("([^"]+)"\);/;
|
|
163
243
|
const appMatch = code.match(appCallRegex);
|
|
164
244
|
if (appMatch) {
|
|
@@ -166,29 +246,11 @@ const stage = process.env.STAGE || process.env.BRANCH_PREFIX || "dev";
|
|
|
166
246
|
code = code.replace(
|
|
167
247
|
appCallRegex,
|
|
168
248
|
`const app = await alchemy("${appName}", {
|
|
169
|
-
|
|
249
|
+
stateStore: (scope) => new CloudflareStateStore(scope),
|
|
170
250
|
});`,
|
|
171
251
|
);
|
|
172
252
|
}
|
|
173
253
|
|
|
174
|
-
const cloudflareResourceRegex =
|
|
175
|
-
/(await (?:Worker|TanStackStart|Nuxt|Astro|Website|SvelteKit|Redwood|ReactRouter|Vite)\([^,]+,\s*{[^}]*)(}\);)/g;
|
|
176
|
-
code = code.replace(
|
|
177
|
-
cloudflareResourceRegex,
|
|
178
|
-
(match, beforeClosing, closing) => {
|
|
179
|
-
if (beforeClosing.includes("version:")) {
|
|
180
|
-
return match;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const hasTrailingComma = beforeClosing.trim().endsWith(",");
|
|
184
|
-
const versionProp = hasTrailingComma
|
|
185
|
-
? ` version: stage === "prod" ? undefined : stage,\n`
|
|
186
|
-
: `,\n version: stage === "prod" ? undefined : stage,\n`;
|
|
187
|
-
|
|
188
|
-
return beforeClosing + versionProp + closing;
|
|
189
|
-
},
|
|
190
|
-
);
|
|
191
|
-
|
|
192
254
|
const finalizeRegex = /(await app\.finalize\(\);)/;
|
|
193
255
|
const finalizeMatch = code.match(finalizeRegex);
|
|
194
256
|
if (finalizeMatch) {
|
package/lib/alchemy.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DestroyStrategy, destroy } from "./destroy.ts";
|
|
2
2
|
import { env } from "./env.ts";
|
|
3
|
-
import { Scope } from "./scope.ts";
|
|
3
|
+
import { Scope, type ProviderCredentials } from "./scope.ts";
|
|
4
4
|
import { secret } from "./secret.ts";
|
|
5
5
|
import type { StateStoreType } from "./state.ts";
|
|
6
6
|
import type { LoggerApi } from "./util/cli.ts";
|
|
@@ -174,7 +174,7 @@ export interface AlchemyOptions {
|
|
|
174
174
|
export interface ScopeOptions extends AlchemyOptions {
|
|
175
175
|
enter: boolean;
|
|
176
176
|
}
|
|
177
|
-
export interface RunOptions extends AlchemyOptions {
|
|
177
|
+
export interface RunOptions extends AlchemyOptions, ProviderCredentials {
|
|
178
178
|
/**
|
|
179
179
|
* @default false
|
|
180
180
|
*/
|
package/lib/alchemy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAmB,OAAO,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAU/B,OAAO,EAAiB,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAmB,OAAO,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAU/B,OAAO,EAAiB,KAAK,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI/C;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC;AAE9B,eAAO,MAAM,OAAO,EAAE,OAAyB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,OAAO,GAAG,CAAC;IAChB,OAAO,EAAE,OAAO,OAAO,CAAC;IAExB;;OAEG;IACH,GAAG,EAAE,OAAO,GAAG,CAAC;IAEhB;;;;OAIG;IACH,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;;;;;;;;;;;;;;;OAiBG;IACH,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7E;;;;;;;;;;;;;;;;OAgBG;IACH,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACrE;AA6ND,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;IACf;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc,EAAE,mBAAmB;IACrE;;OAEG;IAEH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,iBAAe,GAAG,CAAC,CAAC,EAClB,GAAG,IAAI,EACH,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAC3D;IACE,EAAE,EAAE,MAAM;IACV,OAAO,EAAE,UAAU;IACnB,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC;CAC9C,GACJ,OAAO,CAAC,CAAC,CAAC,CAoEZ"}
|
package/lib/alchemy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alchemy.js","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,GAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"alchemy.js","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { Secret } from "../secret.ts";
|
|
2
|
+
/**
|
|
3
|
+
* AWS client properties for credential configuration.
|
|
4
|
+
*
|
|
5
|
+
* This interface defines the properties that can be used to configure AWS credentials
|
|
6
|
+
* at different levels of your application. It supports the three-tier credential resolution
|
|
7
|
+
* system (global → scope → resource) and enables multi-account and multi-region deployments.
|
|
8
|
+
*
|
|
9
|
+
* These properties can be specified at:
|
|
10
|
+
* 1. Resource level - directly in resource creation parameters
|
|
11
|
+
* 2. Scope level - in alchemy.run() options with `aws` property
|
|
12
|
+
* 3. Global level - through environment variables (AWS_REGION, AWS_PROFILE, etc.)
|
|
13
|
+
*
|
|
14
|
+
* The credential resolution follows a precedence order where resource-level credentials
|
|
15
|
+
* override scope-level credentials, which override global environment variables.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Resource-level credential overrides
|
|
20
|
+
* const vpc = await Vpc("main-vpc", {
|
|
21
|
+
* cidrBlock: "10.0.0.0/16",
|
|
22
|
+
* region: "us-west-2", // Override region
|
|
23
|
+
* profile: "production", // Override profile
|
|
24
|
+
* tags: { Name: "main-vpc" }
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Scope-level credential configuration
|
|
31
|
+
* await alchemy.run("production", {
|
|
32
|
+
* aws: {
|
|
33
|
+
* region: "us-west-2",
|
|
34
|
+
* profile: "production",
|
|
35
|
+
* }
|
|
36
|
+
* }, async () => {
|
|
37
|
+
* // Resources created here will use the scope credentials by default
|
|
38
|
+
* const vpc = await Vpc("main-vpc", {
|
|
39
|
+
* cidrBlock: "10.0.0.0/16"
|
|
40
|
+
* });
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export interface AwsClientProps {
|
|
45
|
+
/**
|
|
46
|
+
* AWS access key ID for authentication.
|
|
47
|
+
*
|
|
48
|
+
* This corresponds to the AWS_ACCESS_KEY_ID environment variable.
|
|
49
|
+
* When provided at the resource or scope level, it overrides the environment variable.
|
|
50
|
+
*/
|
|
51
|
+
accessKeyId?: Secret<string>;
|
|
52
|
+
/**
|
|
53
|
+
* AWS secret access key for authentication.
|
|
54
|
+
*
|
|
55
|
+
* This corresponds to the AWS_SECRET_ACCESS_KEY environment variable.
|
|
56
|
+
* When provided at the resource or scope level, it overrides the environment variable.
|
|
57
|
+
*/
|
|
58
|
+
secretAccessKey?: Secret<string>;
|
|
59
|
+
/**
|
|
60
|
+
* AWS session token for temporary credentials.
|
|
61
|
+
*
|
|
62
|
+
* This corresponds to the AWS_SESSION_TOKEN environment variable.
|
|
63
|
+
* Used with temporary credentials from STS or when assuming a role.
|
|
64
|
+
*/
|
|
65
|
+
sessionToken?: Secret<string>;
|
|
66
|
+
/**
|
|
67
|
+
* AWS region to use for API calls.
|
|
68
|
+
*
|
|
69
|
+
* This corresponds to the AWS_REGION or AWS_DEFAULT_REGION environment variables.
|
|
70
|
+
* When provided at the resource or scope level, it overrides the environment variables.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Resource in a specific region
|
|
75
|
+
* const euVpc = await Vpc("eu-vpc", {
|
|
76
|
+
* cidrBlock: "10.0.0.0/16",
|
|
77
|
+
* region: "eu-west-1",
|
|
78
|
+
* tags: { Name: "eu-vpc" }
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
region?: string;
|
|
83
|
+
/**
|
|
84
|
+
* AWS profile name to use from credentials file.
|
|
85
|
+
*
|
|
86
|
+
* This corresponds to the AWS_PROFILE environment variable.
|
|
87
|
+
* Profiles are defined in ~/.aws/credentials or ~/.aws/config files.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* // Resource using a specific profile
|
|
92
|
+
* const prodVpc = await Vpc("prod-vpc", {
|
|
93
|
+
* cidrBlock: "10.0.0.0/16",
|
|
94
|
+
* profile: "production-account",
|
|
95
|
+
* tags: { Name: "prod-vpc" }
|
|
96
|
+
* });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
profile?: string;
|
|
100
|
+
/**
|
|
101
|
+
* AWS role ARN to assume for authentication.
|
|
102
|
+
*
|
|
103
|
+
* This corresponds to the AWS_ROLE_ARN environment variable.
|
|
104
|
+
* Used for cross-account access or for assuming roles with specific permissions.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* // Resource using role assumption
|
|
109
|
+
* const crossAccountVpc = await Vpc("cross-account-vpc", {
|
|
110
|
+
* cidrBlock: "10.0.0.0/16",
|
|
111
|
+
* roleArn: "arn:aws:iam::123456789012:role/DeploymentRole",
|
|
112
|
+
* roleSessionName: "alchemy-deployment",
|
|
113
|
+
* tags: { Name: "cross-account-vpc" }
|
|
114
|
+
* });
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
roleArn?: string;
|
|
118
|
+
/**
|
|
119
|
+
* External ID to use when assuming a role.
|
|
120
|
+
*
|
|
121
|
+
* This corresponds to the AWS_EXTERNAL_ID environment variable.
|
|
122
|
+
* Used as an additional security measure when assuming roles across accounts.
|
|
123
|
+
*/
|
|
124
|
+
externalId?: string;
|
|
125
|
+
/**
|
|
126
|
+
* Session name to use when assuming a role.
|
|
127
|
+
*
|
|
128
|
+
* This corresponds to the AWS_ROLE_SESSION_NAME environment variable.
|
|
129
|
+
* Helps identify who/what is using the assumed role in AWS CloudTrail logs.
|
|
130
|
+
*/
|
|
131
|
+
roleSessionName?: string;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* AWS scope extensions - adds AWS credential support to scope options.
|
|
135
|
+
* This uses TypeScript module augmentation to extend the ProviderCredentials interface.
|
|
136
|
+
* Since ScopeOptions and RunOptions both extend ProviderCredentials,
|
|
137
|
+
* they automatically inherit these properties.
|
|
138
|
+
*/
|
|
139
|
+
declare module "../scope.ts" {
|
|
140
|
+
interface ProviderCredentials {
|
|
141
|
+
/**
|
|
142
|
+
* AWS credentials configuration for this scope.
|
|
143
|
+
* All AWS resources created within this scope will inherit these credentials
|
|
144
|
+
* unless overridden at the resource level.
|
|
145
|
+
*/
|
|
146
|
+
aws?: AwsClientProps;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=client-props.d.ts.map
|