Detail pages: rename the 'Runs' field to 'Launch' (matches the launcher concept)

The field showing a deployment's launcher + target is now labelled 'Launch'
(consistent with launcher/manager vocabulary) on ServiceDetail and the Service/
Job/Create field editors.
This commit is contained in:
2026-07-01 13:35:02 -07:00
parent 776e1235d7
commit 6929bd89d3
4 changed files with 6 additions and 6 deletions

View File

@@ -197,7 +197,7 @@ export function CreateDeploymentForm({
</select> </select>
</Field> </Field>
<TextField <TextField
label="Runs" label="Launch"
value={runTarget} value={runTarget}
onChange={setRunTarget} onChange={setRunTarget}
mono mono

View File

@@ -90,7 +90,7 @@ export function JobFields({ job, onSave, onDelete }: Props) {
placeholder="0 2 * * *" placeholder="0 2 * * *"
hint="Cron expression — castle generates a systemd timer that runs the job on this schedule." hint="Cron expression — castle generates a systemd timer that runs the job on this schedule."
/> />
<Field label="Runs" hint="How the job runs on each tick, then exits: the launcher and its target (a console script, command/argv, image, node script, or compose file)."> <Field label="Launch" hint="How the job runs on each tick, then exits: the launcher and its target (a console script, command/argv, image, node script, or compose file).">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<select <select
value={launcher} value={launcher}

View File

@@ -12,10 +12,10 @@ type Obj = Record<string, unknown>
const obj = (v: unknown): Obj => (v as Obj) ?? {} const obj = (v: unknown): Obj => (v as Obj) ?? {}
// The systemd launch mechanisms (a service is manager=systemd). Editable, so a // The systemd launch mechanisms (a service is manager=systemd). Editable, so a
// mis-set launcher can be corrected; the primary "Runs" target maps per launcher. // mis-set launcher can be corrected; the primary "Launch" target maps per launcher.
const LAUNCHERS = ["python", "command", "container", "compose", "node"] const LAUNCHERS = ["python", "command", "container", "compose", "node"]
/** Fold the "Runs" text into the run block for the chosen launcher, preserving /** Fold the "Launch" text into the run block for the chosen launcher, preserving
* any other run fields (args, ports, package_manager, …) already present. */ * any other run fields (args, ports, package_manager, …) already present. */
function applyLauncher(run: Obj, launcher: string, target: string): Obj { function applyLauncher(run: Obj, launcher: string, target: string): Obj {
const out: Obj = { ...run, launcher } const out: Obj = { ...run, launcher }
@@ -104,7 +104,7 @@ export function ServiceFields({ service, onSave, onDelete }: Props) {
<div className="space-y-4"> <div className="space-y-4">
<TextField label="Description" value={description} onChange={setDescription} /> <TextField label="Description" value={description} onChange={setDescription} />
<Field <Field
label="Runs" label="Launch"
hint="How this service starts: the launcher, and its target — a console script (python), a command/argv (command), an image (container), a script (node), or a compose file (compose)." hint="How this service starts: the launcher, and its target — a console script (python), a command/argv (command), an image (container), a script (node), or a compose file (compose)."
> >
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">

View File

@@ -116,7 +116,7 @@ export function ServiceDetailPage() {
)} )}
{deployment.launcher && ( {deployment.launcher && (
<> <>
<span className="text-[var(--muted)]">Runs</span> <span className="text-[var(--muted)]">Launch</span>
<span className="flex items-center gap-1 min-w-0"> <span className="flex items-center gap-1 min-w-0">
<Terminal size={12} className="shrink-0" /> <Terminal size={12} className="shrink-0" />
{launcherLabel(deployment.launcher)} {launcherLabel(deployment.launcher)}