windmill-labs/windmill · warning

This command is deprecated. Use "wmill generate-metadata" in

Error message

This command is deprecated. Use "wmill generate-metadata" instead.

What it means

The `wmill app generate-locks` command is deprecated. Running it logs this warning and transparently delegates to the unified `generateLocksCommand` implementation, which is now exposed as `wmill generate-metadata`. Behavior is unchanged; only the command name moved.

Source

Thrown at cli/src/commands/app/app.ts:458

  .command("bundle", bundleCommand)
  .command("new", newCommand)
  .command("generate-agents", generateAgentsCommand)
  .command(
    "generate-locks",
    'DEPRECATED: re-generate app lockfiles. Use "wmill generate-metadata" instead.'
  )
  // Deprecated compatibility command. Keep it working for older repos, but
  // exclude it from generated system prompt docs.
  // @deprecated use `wmill generate-metadata`
  .arguments("[app_folder:string]")
  .option("--yes", "Skip confirmation prompt")
  .option("--dry-run", "Perform a dry run without making changes")
  .option(
    "--default-ts <runtime:string>",
    "Default TypeScript runtime (bun or deno)"
  )
  .action(async (opts: any, appFolder: string | undefined) => {
    log.warn(
      colors.yellow('This command is deprecated. Use "wmill generate-metadata" instead.')
    );
    const { generateLocksCommand } = await import("./app_metadata.ts");
    await generateLocksCommand(opts, appFolder);
  })
  .command(
    "set-permissioned-as",
    "Set the on_behalf_of_email for an app (requires admin or wm_deployers group)"
  )
  .arguments("<path:string> <email:string>")
  .action((async (opts: any, appPath: string, email: string) => {
    const workspace = await resolveWorkspace(opts);
    await requireLogin(opts);

    const { lookupUsernameByEmail } = await import("../../core/permissioned_as.ts");
    const cache = new Map<string, { username: string; email: string }>();
    const username = await lookupUsernameByEmail(workspace.workspaceId, email, cache);

View on GitHub (pinned to e474e8803c)

Solutions

  1. Replace the command with `wmill generate-metadata` (same options).
  2. Update CI pipelines and docs to the new command name.
  3. The warning is harmless — the command still works via delegation — but switch before the deprecated alias is removed.

Example fix

// before
wmill app generate-locks --default-ts bun
// after
wmill generate-metadata --default-ts bun
Defensive patterns

Strategy: validation

Validate before calling

#!/bin/bash
# fail CI if the deprecated alias is used
grep -RInE 'wmill +app +generate-locks' .github/ scripts/ && { echo 'use: wmill generate-metadata'; exit 1; } || true

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Invoking `wmill app generate-locks [folder] [--dry-run] [--default-ts bun|deno]` (or any script/CI still using the old subcommand) on a current CLI version.

Common situations: CI pipelines or docs written against older CLI versions; muscle memory from pre-unification workflow; copy-pasted scripts from older repositories.

Related errors


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