Skip to content

Commit bf96fbf

Browse files
committed
support provisioning remote bindings
1 parent c23f464 commit bf96fbf

File tree

15 files changed

+149
-86
lines changed

15 files changed

+149
-86
lines changed

packages/wrangler/src/api/dev.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ export async function unstable_dev(
222222
logLevel: options?.logLevel ?? defaultLogLevel,
223223
port: options?.port ?? 0,
224224
experimentalProvision: undefined,
225+
experimentalAutoCreate: false,
225226
experimentalRemoteBindings: true,
226227
experimentalVectorizeBindToProd: vectorizeBindToProd ?? false,
227228
experimentalImagesLocalMode: imagesLocalMode ?? false,
@@ -240,6 +241,7 @@ export async function unstable_dev(
240241
RESOURCES_PROVISION: false,
241242
REMOTE_BINDINGS: false,
242243
DEPLOY_REMOTE_DIFF_CHECK: false,
244+
AUTOCREATE_RESOURCES: false,
243245
},
244246
() => startDev(devOptions)
245247
);

packages/wrangler/src/api/startDevWorker/ConfigController.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ async function resolveConfig(
389389
},
390390
assets: assetsOptions,
391391
tailConsumers: config.tail_consumers ?? [],
392+
userConfigPath: config.userConfigPath,
392393
} satisfies StartDevWorkerOptions;
393394

394395
if (

packages/wrangler/src/api/startDevWorker/LocalRuntimeController.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import {
99
} from "@cloudflare/containers-shared";
1010
import chalk from "chalk";
1111
import { Miniflare, Mutex } from "miniflare";
12+
import { provisionBindings } from "../../deployment-bundle/bindings";
1213
import * as MF from "../../dev/miniflare";
1314
import { getDockerPath } from "../../environment-variables/misc-variables";
15+
import { getFlag } from "../../experimental-flags";
1416
import { logger } from "../../logger";
1517
import { RuntimeController } from "./BaseController";
1618
import { castErrorCause } from "./events";
@@ -222,6 +224,16 @@ export class LocalRuntimeController extends RuntimeController {
222224
undefined
223225
: await unwrapHook(data.config.dev.auth);
224226

227+
if (getFlag("RESOURCES_PROVISION") && auth) {
228+
await provisionBindings(
229+
configBundle.bindings,
230+
auth?.accountId,
231+
data.config.name,
232+
getFlag("AUTOCREATE_RESOURCES"),
233+
data.config,
234+
true
235+
);
236+
}
225237
this.#remoteProxySessionData =
226238
await maybeStartOrUpdateRemoteProxySession(
227239
{

packages/wrangler/src/api/startDevWorker/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ export type StartDevWorkerOptions = Omit<
247247
containers?: ContainerNormalizedConfig[];
248248
name: string;
249249
complianceRegion: Config["compliance_region"];
250+
userConfigPath: Config["userConfigPath"];
250251
};
251252

252253
export type HookValues = string | number | boolean | object | undefined | null;

packages/wrangler/src/api/startDevWorker/utils.ts

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -364,13 +364,12 @@ export async function convertBindingsToCfWorkerInitBindings(
364364

365365
const fetchers: Record<string, ServiceFetch> = {};
366366

367-
const iterator: [string, WorkerMetadataBinding | Binding][] = Array.isArray(
368-
inputBindings
369-
)
370-
? inputBindings.map((b) => [b.name, b])
371-
: Object.entries(inputBindings ?? {});
367+
const bindingEntries: [string, WorkerMetadataBinding | Binding][] =
368+
Array.isArray(inputBindings)
369+
? inputBindings.map((b) => [b.name, b])
370+
: Object.entries(inputBindings ?? {});
372371

373-
for (const [name, binding] of iterator) {
372+
for (const [name, binding] of bindingEntries) {
374373
if (binding.type === "plain_text") {
375374
bindings.vars ??= {};
376375
bindings.vars[name] = "value" in binding ? binding.value : binding.text;
@@ -380,13 +379,13 @@ export async function convertBindingsToCfWorkerInitBindings(
380379
} else if (binding.type === "kv_namespace") {
381380
bindings.kv_namespaces ??= [];
382381
bindings.kv_namespaces.push({
383-
...binding,
382+
...omitType(binding),
384383
binding: name,
385384
id: "namespace_id" in binding ? binding.namespace_id : binding.id,
386385
});
387386
} else if (binding.type === "send_email") {
388387
bindings.send_email ??= [];
389-
bindings.send_email.push({ ...binding, name: name });
388+
bindings.send_email.push({ ...omitType(binding), name: name });
390389
} else if (binding.type === "wasm_module") {
391390
if (!("source" in binding)) {
392391
continue;
@@ -414,47 +413,53 @@ export async function convertBindingsToCfWorkerInitBindings(
414413
bindings.data_blobs ??= {};
415414
bindings.data_blobs[name] = await getBinaryFileContents(binding.source);
416415
} else if (binding.type === "browser") {
417-
bindings.browser = { ...binding, binding: name };
416+
bindings.browser = { ...omitType(binding), binding: name };
418417
} else if (binding.type === "ai") {
419-
bindings.ai = { ...binding, binding: name };
418+
bindings.ai = { ...omitType(binding), binding: name };
420419
} else if (binding.type === "images") {
421-
bindings.images = { ...binding, binding: name };
420+
bindings.images = { ...omitType(binding), binding: name };
422421
} else if (binding.type === "version_metadata") {
423422
bindings.version_metadata = { binding: name };
424423
} else if (binding.type === "durable_object_namespace") {
425424
bindings.durable_objects ??= { bindings: [] };
426-
bindings.durable_objects.bindings.push({ ...binding, name: name });
425+
bindings.durable_objects.bindings.push({
426+
...omitType(binding),
427+
name: name,
428+
});
427429
} else if (binding.type === "queue") {
428430
bindings.queues ??= [];
429-
bindings.queues.push({ ...binding, binding: name });
431+
bindings.queues.push({ ...omitType(binding), binding: name });
430432
} else if (binding.type === "r2_bucket") {
431433
bindings.r2_buckets ??= [];
432-
bindings.r2_buckets.push({ ...binding, binding: name });
434+
bindings.r2_buckets.push({ ...omitType(binding), binding: name });
433435
} else if (binding.type === "d1") {
434436
bindings.d1_databases ??= [];
435437
bindings.d1_databases.push({
436-
...binding,
438+
...omitType(binding),
437439
binding: name,
438440
database_id: "id" in binding ? binding.id : binding.database_id,
439441
});
440442
} else if (binding.type === "vectorize") {
441443
bindings.vectorize ??= [];
442-
bindings.vectorize.push({ ...binding, binding: name });
444+
bindings.vectorize.push({ ...omitType(binding), binding: name });
443445
} else if (binding.type === "hyperdrive") {
444446
bindings.hyperdrive ??= [];
445-
bindings.hyperdrive.push({ ...binding, binding: name });
447+
bindings.hyperdrive.push({ ...omitType(binding), binding: name });
446448
} else if (binding.type === "service") {
447449
bindings.services ??= [];
448-
bindings.services.push({ ...binding, binding: name });
450+
bindings.services.push({ ...omitType(binding), binding: name });
449451
} else if (binding.type === "fetcher") {
450452
fetchers[name] = binding.fetcher;
451453
} else if (binding.type === "analytics_engine") {
452454
bindings.analytics_engine_datasets ??= [];
453-
bindings.analytics_engine_datasets.push({ ...binding, binding: name });
455+
bindings.analytics_engine_datasets.push({
456+
...omitType(binding),
457+
binding: name,
458+
});
454459
} else if (binding.type === "dispatch_namespace") {
455460
bindings.dispatch_namespaces ??= [];
456461
bindings.dispatch_namespaces.push({
457-
...binding,
462+
...omitType(binding),
458463
binding: name,
459464
outbound:
460465
binding.outbound && "worker" in binding.outbound
@@ -463,31 +468,34 @@ export async function convertBindingsToCfWorkerInitBindings(
463468
});
464469
} else if (binding.type === "mtls_certificate") {
465470
bindings.mtls_certificates ??= [];
466-
bindings.mtls_certificates.push({ ...binding, binding: name });
471+
bindings.mtls_certificates.push({ ...omitType(binding), binding: name });
467472
} else if (binding.type === "pipeline") {
468473
bindings.pipelines ??= [];
469-
bindings.pipelines.push({ ...binding, binding: name });
474+
bindings.pipelines.push({ ...omitType(binding), binding: name });
470475
} else if (binding.type === "logfwdr") {
471476
bindings.logfwdr ??= { bindings: [] };
472-
bindings.logfwdr.bindings.push({ ...binding, name: name });
477+
bindings.logfwdr.bindings.push({ ...omitType(binding), name: name });
473478
} else if (binding.type === "workflow") {
474479
bindings.workflows ??= [];
475-
bindings.workflows.push({ ...binding, binding: name });
480+
bindings.workflows.push({ ...omitType(binding), binding: name });
476481
} else if (binding.type === "secrets_store_secret") {
477482
bindings.secrets_store_secrets ??= [];
478-
bindings.secrets_store_secrets.push({ ...binding, binding: name });
483+
bindings.secrets_store_secrets.push({
484+
...omitType(binding),
485+
binding: name,
486+
});
479487
} else if (binding.type === "unsafe_hello_world") {
480488
bindings.unsafe_hello_world ??= [];
481-
bindings.unsafe_hello_world.push({ ...binding, binding: name });
489+
bindings.unsafe_hello_world.push({ ...omitType(binding), binding: name });
482490
} else if (binding.type === "ratelimit") {
483491
bindings.ratelimits ??= [];
484-
bindings.ratelimits.push({ ...binding, name: name });
492+
bindings.ratelimits.push({ ...omitType(binding), name: name });
485493
} else if (binding.type === "worker_loader") {
486494
bindings.worker_loaders ??= [];
487-
bindings.worker_loaders.push({ ...binding, binding: name });
495+
bindings.worker_loaders.push({ ...omitType(binding), binding: name });
488496
} else if (binding.type === "vpc_service") {
489497
bindings.vpc_services ??= [];
490-
bindings.vpc_services.push({ ...binding, binding: name });
498+
bindings.vpc_services.push({ ...omitType(binding), binding: name });
491499
} else if (isUnsafeBindingType(binding.type)) {
492500
bindings.unsafe ??= {
493501
bindings: [],
@@ -511,6 +519,13 @@ function isUnsafeBindingType(type: string): type is `unsafe_${string}` {
511519
return type.startsWith("unsafe_");
512520
}
513521

522+
function omitType<T extends Record<string, unknown>>({
523+
type: _,
524+
...value
525+
}: T): Omit<T, "type"> {
526+
return value;
527+
}
528+
514529
export function extractBindingsOfType<
515530
Type extends NonNullable<StartDevWorkerOptions["bindings"]>[string]["type"],
516531
>(

packages/wrangler/src/core/register-yargs-command.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ function createHandler(def: CommandDefinition, commandName: string) {
159159
RESOURCES_PROVISION: args.experimentalProvision ?? false,
160160
REMOTE_BINDINGS: args.experimentalRemoteBindings ?? false,
161161
DEPLOY_REMOTE_DIFF_CHECK: false,
162+
AUTOCREATE_RESOURCES: args.experimentalAutoCreate,
162163
};
163164

164165
await run(experimentalFlags, () => {

packages/wrangler/src/deploy/index.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,6 @@ export const deployCommand = createCommand({
219219
"Name of a dispatch namespace to deploy the Worker to (Workers for Platforms)",
220220
type: "string",
221221
},
222-
"experimental-auto-create": {
223-
describe: "Automatically provision draft bindings with new resources",
224-
type: "boolean",
225-
default: true,
226-
hidden: true,
227-
alias: "x-auto-create",
228-
},
229222
"containers-rollout": {
230223
describe:
231224
"Rollout strategy for Containers changes. If set to immediate, it will override `rollout_percentage_steps` if configured and roll out to 100% of instances in one step. ",
@@ -251,6 +244,7 @@ export const deployCommand = createCommand({
251244
RESOURCES_PROVISION: args.experimentalProvision ?? false,
252245
REMOTE_BINDINGS: args.experimentalRemoteBindings ?? true,
253246
DEPLOY_REMOTE_DIFF_CHECK: args.experimentalDeployRemoteDiffCheck ?? false,
247+
AUTOCREATE_RESOURCES: args.experimentalAutoCreate,
254248
}),
255249
warnIfMultipleEnvsConfiguredButNoneSpecified: true,
256250
},

0 commit comments

Comments
 (0)