diff --git a/.changeset/fuzzy-dogs-listen.md b/.changeset/fuzzy-dogs-listen.md new file mode 100644 index 0000000000..18929cc419 --- /dev/null +++ b/.changeset/fuzzy-dogs-listen.md @@ -0,0 +1,7 @@ +--- +"wrangler": minor +--- + +Support Artifacts sources when creating Queue event subscriptions + +`wrangler queues subscription create` now accepts the `artifacts` and `artifacts.repo` source types supported by the Cloudflare API. diff --git a/packages/wrangler/src/__tests__/queues/queues-subscription.test.ts b/packages/wrangler/src/__tests__/queues/queues-subscription.test.ts index 33afc31f64..5b0c182397 100644 --- a/packages/wrangler/src/__tests__/queues/queues-subscription.test.ts +++ b/packages/wrangler/src/__tests__/queues/queues-subscription.test.ts @@ -84,7 +84,7 @@ describe("queues subscription", () => { -v, --version Show version number [boolean] OPTIONS - --source The event source type [string] [required] [choices: "images", "kv", "r2", "superSlurper", "vectorize", "workersAi.model", "workersBuilds.worker", "workflows.workflow"] + --source The event source type [string] [required] [choices: "artifacts", "artifacts.repo", "images", "kv", "r2", "superSlurper", "vectorize", "workersAi.model", "workersBuilds.worker", "workflows.workflow"] --events Comma-separated list of event types to subscribe to [string] [required] --name Name for the subscription (auto-generated if not provided) [string] --enabled Whether the subscription should be active [boolean] [default: true] @@ -187,6 +187,76 @@ describe("queues subscription", () => { `); }); + it("should create a subscription for an Artifacts account source", async ({ + expect, + }) => { + const queueNameResolveRequest = mockGetQueueByNameRequest( + expectedQueueName, + { + queue_id: expectedQueueId, + queue_name: expectedQueueName, + created_on: "", + producers: [], + consumers: [], + producers_total_count: 0, + consumers_total_count: 0, + modified_on: "", + } + ); + + const createRequest = mockCreateSubscriptionRequest( + { + name: "testQueue artifacts", + enabled: true, + source: { type: EventSourceType.ARTIFACTS }, + events: ["repo.created"], + }, + expectedQueueId + ); + + await runWrangler( + "queues subscription create testQueue --source artifacts --events repo.created" + ); + + expect(queueNameResolveRequest.count).toEqual(1); + expect(createRequest.count).toEqual(1); + }); + + it("should create a subscription for an Artifacts repository source", async ({ + expect, + }) => { + const queueNameResolveRequest = mockGetQueueByNameRequest( + expectedQueueName, + { + queue_id: expectedQueueId, + queue_name: expectedQueueName, + created_on: "", + producers: [], + consumers: [], + producers_total_count: 0, + consumers_total_count: 0, + modified_on: "", + } + ); + + const createRequest = mockCreateSubscriptionRequest( + { + name: "testQueue artifacts.repo", + enabled: true, + source: { type: EventSourceType.ARTIFACTS_REPO }, + events: ["pushed"], + }, + expectedQueueId + ); + + await runWrangler( + "queues subscription create testQueue --source artifacts.repo --events pushed" + ); + + expect(queueNameResolveRequest.count).toEqual(1); + expect(createRequest.count).toEqual(1); + }); + it("should create subscription with custom name and disabled state", async ({ expect, }) => { @@ -254,7 +324,7 @@ describe("queues subscription", () => { ) ).rejects.toThrowErrorMatchingInlineSnapshot(` [Error: Invalid values: - Argument: source, Given: "invalid", Choices: "images", "kv", "r2", "superSlurper", "vectorize", "workersAi.model", "workersBuilds.worker", "workflows.workflow"] + Argument: source, Given: "invalid", Choices: "artifacts", "artifacts.repo", "images", "kv", "r2", "superSlurper", "vectorize", "workersAi.model", "workersBuilds.worker", "workflows.workflow"] `); }); diff --git a/packages/wrangler/src/queues/cli/commands/subscription/create.ts b/packages/wrangler/src/queues/cli/commands/subscription/create.ts index c3beb3cae1..23d18b99a8 100644 --- a/packages/wrangler/src/queues/cli/commands/subscription/create.ts +++ b/packages/wrangler/src/queues/cli/commands/subscription/create.ts @@ -20,6 +20,12 @@ function parseSourceArgument( } ): EventSource { switch (source as EventSourceType) { + case EventSourceType.ARTIFACTS: + return { type: EventSourceType.ARTIFACTS }; + + case EventSourceType.ARTIFACTS_REPO: + return { type: EventSourceType.ARTIFACTS_REPO }; + case EventSourceType.IMAGES: return { type: EventSourceType.IMAGES }; diff --git a/packages/wrangler/src/queues/subscription-types.ts b/packages/wrangler/src/queues/subscription-types.ts index bca8648b9e..8e53eab710 100644 --- a/packages/wrangler/src/queues/subscription-types.ts +++ b/packages/wrangler/src/queues/subscription-types.ts @@ -15,6 +15,8 @@ export interface EventDestination { } export enum EventSourceType { + ARTIFACTS = "artifacts", + ARTIFACTS_REPO = "artifacts.repo", IMAGES = "images", KV = "kv", R2 = "r2", @@ -28,6 +30,8 @@ export enum EventSourceType { export const EVENT_SOURCE_TYPES = Object.values(EventSourceType); export type EventSource = + | ArtifactsEventSource + | ArtifactsRepoEventSource | ImagesEventSource | KvEventSource | R2EventSource @@ -37,6 +41,14 @@ export type EventSource = | WorkersBuildsWorkerEventSource | WorkflowsWorkflowEventSource; +export interface ArtifactsEventSource { + type: EventSourceType.ARTIFACTS; +} + +export interface ArtifactsRepoEventSource { + type: EventSourceType.ARTIFACTS_REPO; +} + export interface ImagesEventSource { type: EventSourceType.IMAGES; }