From f8e9c89636a83f7259bbab5ab8c94fa60a72fa49 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 19:50:16 +0000 Subject: [PATCH 01/10] Initial plan From a60cf801456f36007c8591880843c6fa479c928f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 19:56:36 +0000 Subject: [PATCH 02/10] feat(stack): add set and unset update schedule commands --- docs/stack.md | 46 +++++++++++++++++++++ src/commands/stack/set-update-schedule.ts | 42 +++++++++++++++++++ src/commands/stack/unset-update-schedule.ts | 27 ++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 src/commands/stack/set-update-schedule.ts create mode 100644 src/commands/stack/unset-update-schedule.ts diff --git a/docs/stack.md b/docs/stack.md index 727d5036b..9a0a4dfe0 100644 --- a/docs/stack.md +++ b/docs/stack.md @@ -9,6 +9,8 @@ Manage container stacks * [`mw stack ls`](#mw-stack-ls) * [`mw stack ps`](#mw-stack-ps) * [`mw stack rm [STACK-ID]`](#mw-stack-rm-stack-id) +* [`mw stack set-update-schedule STACK-ID SCHEDULE`](#mw-stack-set-update-schedule-stack-id-schedule) +* [`mw stack unset-update-schedule STACK-ID`](#mw-stack-unset-update-schedule-stack-id) * [`mw stack up`](#mw-stack-up) ## `mw stack delete [STACK-ID]` @@ -248,6 +250,50 @@ FLAG DESCRIPTIONS scripts), you can use this flag to easily get the IDs of created resources for further processing. ``` +## `mw stack set-update-schedule STACK-ID SCHEDULE` + +Set the update schedule of a container stack + +``` +USAGE + $ mw stack set-update-schedule STACK-ID SCHEDULE [--token ] [--timezone ] + +ARGUMENTS + STACK-ID ID of the stack + SCHEDULE Cron expression for the update schedule (validated by API) + +FLAGS + --timezone= Timezone for the update schedule (for example UTC or Europe/Berlin; validated by API) + +AUTHENTICATION FLAGS + --token= API token to use for authentication (overrides environment and config file). NOTE: watch out that + tokens passed via this flag might be logged in your shell history. + +DESCRIPTION + Set the update schedule of a container stack +``` + + +## `mw stack unset-update-schedule STACK-ID` + +Unset the update schedule of a container stack + +``` +USAGE + $ mw stack unset-update-schedule STACK-ID [--token ] + +ARGUMENTS + STACK-ID ID of the stack + +AUTHENTICATION FLAGS + --token= API token to use for authentication (overrides environment and config file). NOTE: watch out that + tokens passed via this flag might be logged in your shell history. + +DESCRIPTION + Unset the update schedule of a container stack +``` + + ## `mw stack up` Deploys a docker-compose compatible file to a mittwald container stack diff --git a/src/commands/stack/set-update-schedule.ts b/src/commands/stack/set-update-schedule.ts new file mode 100644 index 000000000..22e3a7bb9 --- /dev/null +++ b/src/commands/stack/set-update-schedule.ts @@ -0,0 +1,42 @@ +import { Args, Flags } from "@oclif/core"; +import { BaseCommand } from "../../lib/basecommands/BaseCommand.js"; +import assertSuccess from "../../lib/apiutil/assert_success.js"; + +export default class SetUpdateSchedule extends BaseCommand { + static description = "Set the update schedule of a container stack"; + + static args = { + "stack-id": Args.string({ + description: "ID of the stack", + required: true, + }), + schedule: Args.string({ + description: "Cron expression for the update schedule (validated by API)", + required: true, + }), + }; + + static flags = { + ...BaseCommand.baseFlags, + timezone: Flags.string({ + description: + "Timezone for the update schedule (for example UTC or Europe/Berlin; validated by API)", + required: false, + }), + }; + async run(): Promise { + const { args, flags } = await this.parse(SetUpdateSchedule); + + const response = await this.apiClient.container.setStackUpdateSchedule({ + stackId: args["stack-id"], + data: { + updateSchedule: { + cron: args.schedule, + timezone: flags.timezone, + }, + }, + }); + + assertSuccess(response); + } +} diff --git a/src/commands/stack/unset-update-schedule.ts b/src/commands/stack/unset-update-schedule.ts new file mode 100644 index 000000000..f2b1de0f9 --- /dev/null +++ b/src/commands/stack/unset-update-schedule.ts @@ -0,0 +1,27 @@ +import { Args } from "@oclif/core"; +import { BaseCommand } from "../../lib/basecommands/BaseCommand.js"; +import assertSuccess from "../../lib/apiutil/assert_success.js"; + +export default class UnsetUpdateSchedule extends BaseCommand { + static description = "Unset the update schedule of a container stack"; + + static args = { + "stack-id": Args.string({ + description: "ID of the stack", + required: true, + }), + }; + + async run(): Promise { + const { args } = await this.parse(UnsetUpdateSchedule); + + const response = await this.apiClient.container.setStackUpdateSchedule({ + stackId: args["stack-id"], + data: { + updateSchedule: null as unknown as { cron: string; timezone?: string }, + }, + }); + + assertSuccess(response); + } +} From bd979376ab69848630270b0b809dfb54e2b12eff Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 19:58:40 +0000 Subject: [PATCH 03/10] chore(stack): remove api validation wording from schedule help --- docs/stack.md | 4 ++-- src/commands/stack/set-update-schedule.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/stack.md b/docs/stack.md index 9a0a4dfe0..b04719f5b 100644 --- a/docs/stack.md +++ b/docs/stack.md @@ -260,10 +260,10 @@ USAGE ARGUMENTS STACK-ID ID of the stack - SCHEDULE Cron expression for the update schedule (validated by API) + SCHEDULE Cron expression for the update schedule FLAGS - --timezone= Timezone for the update schedule (for example UTC or Europe/Berlin; validated by API) + --timezone= Timezone for the update schedule (for example UTC or Europe/Berlin) AUTHENTICATION FLAGS --token= API token to use for authentication (overrides environment and config file). NOTE: watch out that diff --git a/src/commands/stack/set-update-schedule.ts b/src/commands/stack/set-update-schedule.ts index 22e3a7bb9..0f4ae5ce6 100644 --- a/src/commands/stack/set-update-schedule.ts +++ b/src/commands/stack/set-update-schedule.ts @@ -11,7 +11,7 @@ export default class SetUpdateSchedule extends BaseCommand { required: true, }), schedule: Args.string({ - description: "Cron expression for the update schedule (validated by API)", + description: "Cron expression for the update schedule", required: true, }), }; @@ -20,10 +20,11 @@ export default class SetUpdateSchedule extends BaseCommand { ...BaseCommand.baseFlags, timezone: Flags.string({ description: - "Timezone for the update schedule (for example UTC or Europe/Berlin; validated by API)", + "Timezone for the update schedule (for example UTC or Europe/Berlin)", required: false, }), }; + async run(): Promise { const { args, flags } = await this.parse(SetUpdateSchedule); From 939a69c346706a28940711123acd5fd1c38ba7f6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 20:03:42 +0000 Subject: [PATCH 04/10] fix(stack): use ExecRenderBaseCommand for update schedule commands --- src/commands/stack/set-update-schedule.ts | 24 +++++++++++++-------- src/commands/stack/unset-update-schedule.ts | 18 ++++++++++------ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/commands/stack/set-update-schedule.ts b/src/commands/stack/set-update-schedule.ts index 0f4ae5ce6..8c4c61ec1 100644 --- a/src/commands/stack/set-update-schedule.ts +++ b/src/commands/stack/set-update-schedule.ts @@ -1,8 +1,12 @@ import { Args, Flags } from "@oclif/core"; -import { BaseCommand } from "../../lib/basecommands/BaseCommand.js"; +import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js"; import assertSuccess from "../../lib/apiutil/assert_success.js"; +import { ReactNode } from "react"; -export default class SetUpdateSchedule extends BaseCommand { +export default class SetUpdateSchedule extends ExecRenderBaseCommand< + typeof SetUpdateSchedule, + void +> { static description = "Set the update schedule of a container stack"; static args = { @@ -17,7 +21,7 @@ export default class SetUpdateSchedule extends BaseCommand { }; static flags = { - ...BaseCommand.baseFlags, + ...ExecRenderBaseCommand.baseFlags, timezone: Flags.string({ description: "Timezone for the update schedule (for example UTC or Europe/Berlin)", @@ -25,19 +29,21 @@ export default class SetUpdateSchedule extends BaseCommand { }), }; - async run(): Promise { - const { args, flags } = await this.parse(SetUpdateSchedule); - + protected async exec(): Promise { const response = await this.apiClient.container.setStackUpdateSchedule({ - stackId: args["stack-id"], + stackId: this.args["stack-id"], data: { updateSchedule: { - cron: args.schedule, - timezone: flags.timezone, + cron: this.args.schedule, + timezone: this.flags.timezone, }, }, }); assertSuccess(response); } + + protected render(): ReactNode { + return null; + } } diff --git a/src/commands/stack/unset-update-schedule.ts b/src/commands/stack/unset-update-schedule.ts index f2b1de0f9..d0577d646 100644 --- a/src/commands/stack/unset-update-schedule.ts +++ b/src/commands/stack/unset-update-schedule.ts @@ -1,8 +1,12 @@ import { Args } from "@oclif/core"; -import { BaseCommand } from "../../lib/basecommands/BaseCommand.js"; +import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js"; import assertSuccess from "../../lib/apiutil/assert_success.js"; +import { ReactNode } from "react"; -export default class UnsetUpdateSchedule extends BaseCommand { +export default class UnsetUpdateSchedule extends ExecRenderBaseCommand< + typeof UnsetUpdateSchedule, + void +> { static description = "Unset the update schedule of a container stack"; static args = { @@ -12,11 +16,9 @@ export default class UnsetUpdateSchedule extends BaseCommand { }), }; - async run(): Promise { - const { args } = await this.parse(UnsetUpdateSchedule); - + protected async exec(): Promise { const response = await this.apiClient.container.setStackUpdateSchedule({ - stackId: args["stack-id"], + stackId: this.args["stack-id"], data: { updateSchedule: null as unknown as { cron: string; timezone?: string }, }, @@ -24,4 +26,8 @@ export default class UnsetUpdateSchedule extends BaseCommand { assertSuccess(response); } + + protected render(): ReactNode { + return null; + } } From 47e87b8914aa7aaa5ec5a84984810fc2cde468b3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 20:09:32 +0000 Subject: [PATCH 05/10] fix(stack): add progress and success output for schedule commands --- src/commands/stack/set-update-schedule.ts | 54 ++++++++++++++----- src/commands/stack/unset-update-schedule.ts | 60 +++++++++++++++++---- 2 files changed, 90 insertions(+), 24 deletions(-) diff --git a/src/commands/stack/set-update-schedule.ts b/src/commands/stack/set-update-schedule.ts index 8c4c61ec1..851f1580b 100644 --- a/src/commands/stack/set-update-schedule.ts +++ b/src/commands/stack/set-update-schedule.ts @@ -1,11 +1,20 @@ import { Args, Flags } from "@oclif/core"; import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js"; import assertSuccess from "../../lib/apiutil/assert_success.js"; -import { ReactNode } from "react"; +import { createElement, ReactNode } from "react"; +import { + makeProcessRenderer, + processFlags, +} from "../../rendering/process/process_flags.js"; +import { Success } from "../../rendering/react/components/Success.js"; + +type Result = { + stackId: string; +}; export default class SetUpdateSchedule extends ExecRenderBaseCommand< typeof SetUpdateSchedule, - void + Result > { static description = "Set the update schedule of a container stack"; @@ -22,6 +31,7 @@ export default class SetUpdateSchedule extends ExecRenderBaseCommand< static flags = { ...ExecRenderBaseCommand.baseFlags, + ...processFlags, timezone: Flags.string({ description: "Timezone for the update schedule (for example UTC or Europe/Berlin)", @@ -29,21 +39,39 @@ export default class SetUpdateSchedule extends ExecRenderBaseCommand< }), }; - protected async exec(): Promise { - const response = await this.apiClient.container.setStackUpdateSchedule({ - stackId: this.args["stack-id"], - data: { - updateSchedule: { - cron: this.args.schedule, - timezone: this.flags.timezone, + protected async exec(): Promise { + const p = makeProcessRenderer(this.flags, "Setting stack update schedule"); + + const stackId = this.args["stack-id"]; + + await p.runStep("updating stack schedule", async () => { + const response = await this.apiClient.container.setStackUpdateSchedule({ + stackId, + data: { + updateSchedule: { + cron: this.args.schedule, + timezone: this.flags.timezone, + }, }, - }, + }); + + assertSuccess(response); }); - assertSuccess(response); + await p.complete( + createElement( + Success, + null, + `Update schedule for stack ${stackId} was successfully set.`, + ), + ); + + return { stackId }; } - protected render(): ReactNode { - return null; + protected render({ stackId }: Result): ReactNode { + if (this.flags.quiet) { + return stackId; + } } } diff --git a/src/commands/stack/unset-update-schedule.ts b/src/commands/stack/unset-update-schedule.ts index d0577d646..eb7f6a0fd 100644 --- a/src/commands/stack/unset-update-schedule.ts +++ b/src/commands/stack/unset-update-schedule.ts @@ -1,11 +1,20 @@ import { Args } from "@oclif/core"; import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js"; import assertSuccess from "../../lib/apiutil/assert_success.js"; -import { ReactNode } from "react"; +import { createElement, ReactNode } from "react"; +import { + makeProcessRenderer, + processFlags, +} from "../../rendering/process/process_flags.js"; +import { Success } from "../../rendering/react/components/Success.js"; + +type Result = { + stackId: string; +}; export default class UnsetUpdateSchedule extends ExecRenderBaseCommand< typeof UnsetUpdateSchedule, - void + Result > { static description = "Unset the update schedule of a container stack"; @@ -16,18 +25,47 @@ export default class UnsetUpdateSchedule extends ExecRenderBaseCommand< }), }; - protected async exec(): Promise { - const response = await this.apiClient.container.setStackUpdateSchedule({ - stackId: this.args["stack-id"], - data: { - updateSchedule: null as unknown as { cron: string; timezone?: string }, - }, + static flags = { + ...ExecRenderBaseCommand.baseFlags, + ...processFlags, + }; + + protected async exec(): Promise { + const p = makeProcessRenderer( + this.flags, + "Unsetting stack update schedule", + ); + + const stackId = this.args["stack-id"]; + + await p.runStep("removing stack schedule", async () => { + const response = await this.apiClient.container.setStackUpdateSchedule({ + stackId, + data: { + updateSchedule: null as unknown as { + cron: string; + timezone?: string; + }, + }, + }); + + assertSuccess(response); }); - assertSuccess(response); + await p.complete( + createElement( + Success, + null, + `Update schedule for stack ${stackId} was successfully removed.`, + ), + ); + + return { stackId }; } - protected render(): ReactNode { - return null; + protected render({ stackId }: Result): ReactNode { + if (this.flags.quiet) { + return stackId; + } } } From 1a0feebaee1f13154c5bbc04d332e84f9eae6c91 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 20:35:13 +0000 Subject: [PATCH 06/10] chore: re-generate README --- docs/stack.md | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/stack.md b/docs/stack.md index b04719f5b..af18d3b14 100644 --- a/docs/stack.md +++ b/docs/stack.md @@ -256,14 +256,15 @@ Set the update schedule of a container stack ``` USAGE - $ mw stack set-update-schedule STACK-ID SCHEDULE [--token ] [--timezone ] + $ mw stack set-update-schedule STACK-ID SCHEDULE [--token ] [-q] [--timezone ] ARGUMENTS STACK-ID ID of the stack SCHEDULE Cron expression for the update schedule FLAGS - --timezone= Timezone for the update schedule (for example UTC or Europe/Berlin) + -q, --quiet suppress process output and only display a machine-readable summary + --timezone= Timezone for the update schedule (for example UTC or Europe/Berlin) AUTHENTICATION FLAGS --token= API token to use for authentication (overrides environment and config file). NOTE: watch out that @@ -271,6 +272,12 @@ AUTHENTICATION FLAGS DESCRIPTION Set the update schedule of a container stack + +FLAG DESCRIPTIONS + -q, --quiet suppress process output and only display a machine-readable summary + + This flag controls if you want to see the process output or only a summary. When using mw non-interactively (e.g. in + scripts), you can use this flag to easily get the IDs of created resources for further processing. ``` @@ -280,17 +287,26 @@ Unset the update schedule of a container stack ``` USAGE - $ mw stack unset-update-schedule STACK-ID [--token ] + $ mw stack unset-update-schedule STACK-ID [--token ] [-q] ARGUMENTS STACK-ID ID of the stack +FLAGS + -q, --quiet suppress process output and only display a machine-readable summary + AUTHENTICATION FLAGS --token= API token to use for authentication (overrides environment and config file). NOTE: watch out that tokens passed via this flag might be logged in your shell history. DESCRIPTION Unset the update schedule of a container stack + +FLAG DESCRIPTIONS + -q, --quiet suppress process output and only display a machine-readable summary + + This flag controls if you want to see the process output or only a summary. When using mw non-interactively (e.g. in + scripts), you can use this flag to easily get the IDs of created resources for further processing. ``` From 86f9adccf59f92ebb8f18995c4afaebdc272af10 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 20:37:22 +0000 Subject: [PATCH 07/10] fix: satisfy lint and add task completion checklist --- CLAUDE.md | 5 +++++ release.config.cjs | 6 ++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index b808ebfa1..c4006e599 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -23,6 +23,11 @@ code in this repository. - Follow the conventional commit format when writing commit messages - Make sure to re-generate the documentation before each commit +- Before wrapping up a task, run this checklist in order: + 1. `yarn lint` + 2. `yarn compile` + 3. `yarn test` + 4. `yarn generate:readme > &/dev/null` ## Architecture Overview diff --git a/release.config.cjs b/release.config.cjs index 24ccbed07..7b7d8d9e9 100644 --- a/release.config.cjs +++ b/release.config.cjs @@ -5,10 +5,8 @@ module.exports = { [ "@semantic-release/commit-analyzer", { - "releaseRules": [ - { "type": "chore", "scope": "deps", "release": "patch" }, - ] - } + releaseRules: [{ type: "chore", scope: "deps", release: "patch" }], + }, ], "@semantic-release/release-notes-generator", "@semantic-release/changelog", From 0bb4e7333ceefbf0c23b0cf377c98a5cb6e547ce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 20:38:34 +0000 Subject: [PATCH 08/10] docs: fix readme generation redirection syntax --- CLAUDE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c4006e599..73c2f2ce4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,7 +16,7 @@ code in this repository. **Development:** - `yarn clean` - Clean compiled files and build artifacts -- `yarn generate:readme > &/dev/null` - Generate documentation from command +- `yarn generate:readme >/dev/null 2>&1` - Generate documentation from command definitions ## Development best practices @@ -27,7 +27,7 @@ code in this repository. 1. `yarn lint` 2. `yarn compile` 3. `yarn test` - 4. `yarn generate:readme > &/dev/null` + 4. `yarn generate:readme >/dev/null 2>&1` ## Architecture Overview From 8af5c231ee4aedf81037eea23c26d45bcc013ff7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Jun 2026 20:47:34 +0000 Subject: [PATCH 09/10] docs: clarify ExecRenderBaseCommand behavior in agent guidance --- CLAUDE.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 73c2f2ce4..42586bfe2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,7 +45,7 @@ container, etc.). Each command corresponds to a specific API operation. - `BaseCommand` - Authenticated commands with API client setup - `ListBaseCommand` - List operations with table formatting - `RenderBaseCommand` - Single resource display -- `ExecRenderBaseCommand` - Long-running operations with progress +- `ExecRenderBaseCommand` - Run an `exec()` step and render its result with Ink - `DeleteBaseCommand` - Delete operations with confirmation **Context System:** Context management in `src/lib/context/` allows commands to @@ -91,3 +91,6 @@ providers: - Provide examples using the `static examples` property when useful - Keep the command summary short; do not repeat the summary at the beginning of the description +- Do not assume `ExecRenderBaseCommand` provides progress handling by itself; it + executes first and then renders, so use dedicated process/progress rendering + patterns when real-time progress output is required From 23b1db7528c2c29485fd9618e2abd66ebade4f93 Mon Sep 17 00:00:00 2001 From: Martin Helmich Date: Thu, 25 Jun 2026 09:16:11 +0200 Subject: [PATCH 10/10] refactor(stack): use JSX in update schedule commands Rename the stack update schedule commands from .ts to .tsx and replace createElement with JSX for the success output. Co-Authored-By: Claude Opus 4.8 --- ...{set-update-schedule.ts => set-update-schedule.tsx} | 10 ++++------ ...et-update-schedule.ts => unset-update-schedule.tsx} | 10 ++++------ 2 files changed, 8 insertions(+), 12 deletions(-) rename src/commands/stack/{set-update-schedule.ts => set-update-schedule.tsx} (90%) rename src/commands/stack/{unset-update-schedule.ts => unset-update-schedule.tsx} (89%) diff --git a/src/commands/stack/set-update-schedule.ts b/src/commands/stack/set-update-schedule.tsx similarity index 90% rename from src/commands/stack/set-update-schedule.ts rename to src/commands/stack/set-update-schedule.tsx index 851f1580b..01dbe712e 100644 --- a/src/commands/stack/set-update-schedule.ts +++ b/src/commands/stack/set-update-schedule.tsx @@ -1,7 +1,7 @@ import { Args, Flags } from "@oclif/core"; import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js"; import assertSuccess from "../../lib/apiutil/assert_success.js"; -import { createElement, ReactNode } from "react"; +import { ReactNode } from "react"; import { makeProcessRenderer, processFlags, @@ -59,11 +59,9 @@ export default class SetUpdateSchedule extends ExecRenderBaseCommand< }); await p.complete( - createElement( - Success, - null, - `Update schedule for stack ${stackId} was successfully set.`, - ), + + Update schedule for stack {stackId} was successfully set. + , ); return { stackId }; diff --git a/src/commands/stack/unset-update-schedule.ts b/src/commands/stack/unset-update-schedule.tsx similarity index 89% rename from src/commands/stack/unset-update-schedule.ts rename to src/commands/stack/unset-update-schedule.tsx index eb7f6a0fd..1b61bb645 100644 --- a/src/commands/stack/unset-update-schedule.ts +++ b/src/commands/stack/unset-update-schedule.tsx @@ -1,7 +1,7 @@ import { Args } from "@oclif/core"; import { ExecRenderBaseCommand } from "../../lib/basecommands/ExecRenderBaseCommand.js"; import assertSuccess from "../../lib/apiutil/assert_success.js"; -import { createElement, ReactNode } from "react"; +import { ReactNode } from "react"; import { makeProcessRenderer, processFlags, @@ -53,11 +53,9 @@ export default class UnsetUpdateSchedule extends ExecRenderBaseCommand< }); await p.complete( - createElement( - Success, - null, - `Update schedule for stack ${stackId} was successfully removed.`, - ), + + Update schedule for stack {stackId} was successfully removed. + , ); return { stackId };