windmill-labs/windmill · warning

${def.badge} triggers manage cloud subscriptions at creation

Error message

${def.badge} triggers manage cloud subscriptions at creation — fill in the imported resource, then re-create this trigger manually

What it means

createWorkspaceTriggerDisabled blocks trigger kinds marked `provisionsOnCreate` in TRIGGER_KINDS (e.g. cloud-subscription triggers like SQS/GCP/Azure). Such triggers manage cloud subscriptions at creation time, so they cannot be auto-created from an imported project; the user must fill in the imported resource and create the trigger manually. `def.badge` names the specific trigger family in the message.

Source

Thrown at frontend/src/lib/components/triggers/workspaceTriggersList.ts:414

export async function createWorkspaceTriggerDisabled(
	workspace: string,
	trigger: {
		kind: string
		path: string
		script_path: string
		is_flow: boolean
		summary?: string | null
		config?: Record<string, any> | null
	},
	opts: { hasEeLicense: boolean }
): Promise<unknown> {
	const def = TRIGGER_KINDS[trigger.kind as WorkspaceTriggerKind]
	if (!def) throw new Error(`trigger kind '${trigger.kind}' not supported yet`)
	if (def.eeOnly && !opts.hasEeLicense) {
		throw new Error(`trigger kind '${trigger.kind}' requires Enterprise`)
	}
	if (def.provisionsOnCreate) {
		throw new Error(
			`${def.badge} triggers manage cloud subscriptions at creation — fill in the imported resource, then re-create this trigger manually`
		)
	}
	// Remote input: only the allowlisted portable slice may reach the create call.
	const config = portableTriggerConfig(trigger.kind, trigger.config)
	if (trigger.kind === 'schedule') {
		// Spread the portable config first so behavioral settings survive the
		// import (cron_version, retry, failure/recovery/success handlers,
		// no_flow_overlap, …) — restoring only cron+timezone would silently
		// change the schedule's semantics once re-enabled.
		return ScheduleService.createSchedule({
			workspace,
			requestBody: {
				...config,
				path: trigger.path,
				schedule: (config.schedule as string) ?? '0 0 * * * *',
				timezone: (config.timezone as string) ?? 'UTC',
				script_path: trigger.script_path,

View on GitHub (pinned to e474e8803c)

Solutions

  1. Complete the imported resource configuration (settings/path) in the UI, then create the trigger manually as the message instructs.
  2. Skip provisioning triggers during install and surface a completion checklist to the user.
  3. If the trigger should not provision, verify the kind's TRIGGER_KINDS definition is correct (provisionsOnCreate flag).
  4. Provide the required cloud credentials/resources first, then re-add the trigger by hand.

Example fix

// before
await createWorkspaceTriggerDisabled(trigger, opts) // throws for provisionsOnCreate
// after
const def = TRIGGER_KINDS[trigger.kind as WorkspaceTriggerKind]
if (def?.provisionsOnCreate) {
  manualSteps.push(`create ${trigger.kind} trigger manually after configuring the resource`)
  continue
}
await createWorkspaceTriggerDisabled(trigger, opts)
Defensive patterns

Strategy: validation

Validate before calling

function triggerProvisionsOnCreate(kind: string): boolean {
  return TRIGGER_KINDS[kind as WorkspaceTriggerKind]?.provisionsOnCreate === true
}
// before install:
const manual = triggers.filter(triggerProvisionsOnCreate)

Type guard

function requiresManualProvisioning(k: WorkspaceTriggerKind): boolean {
  return TRIGGER_KINDS[k]?.provisionsOnCreate === true
}

Try / catch

try {
  await createWorkspaceTriggerDisabled(trigger, opts)
} catch (e) {
  if (String(e).includes('manage cloud subscriptions at creation')) {
    manualSteps.push(`${trigger.kind}: configure the imported resource, then create the trigger manually`)
    return null
  }
  throw e
}

Prevention

When it happens

Trigger: installProject encounters a trigger whose TRIGGER_KINDS def has provisionsOnCreate: true (a trigger that would provision a cloud subscription if created).

Common situations: Installing a project template that includes cloud-backed triggers (SQS, GCP, Azure subscription triggers) where the cloud resource/subscription cannot be safely provisioned from the import.

Related errors


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/98630279fad60290. Report an issue: GitHub.