Files
stalwart-migrator/cmd/stalwart-migrate/main.go
T
jcoffey-dev 558af1005f Stop the docs saying the migration does not work
Two places told an operator that `run` is unimplemented and refuses: the
usage text, and the first line of the README's status. Both predate `run`
being wired up, and the README contradicted itself three lines later, where
the command table says it works. Anyone reading either would conclude the
tool cannot migrate.

The rest of that section had drifted too: staging exists as a package, and
the package table was missing it along with applyplan, while the line counts
had aged. Recounted, and the column now says what it is measuring.

`report` really is unimplemented, so the usage text now says so where it is
advertised.
2026-08-24 12:19:26 -07:00

55 lines
1.4 KiB
Go

// SPDX-FileCopyrightText: 2026 LINUXexpert-org
// SPDX-License-Identifier: GPL-3.0-or-later
// Command stalwart-migrate drives an in-place Stalwart Mail Server upgrade
// (0.15.5 -> latest) through preflight checks, a defense-in-depth backup,
// a checkpointed migration, and post-migration validation. Recovery from a
// failed migration is the operator's own snapshot or backup and is out of
// scope for this tool - see ARCHITECTURE.md §4.8.
package main
import (
"fmt"
"os"
)
func main() {
if len(os.Args) < 2 {
usage()
os.Exit(1)
}
var err error
switch os.Args[1] {
case "preflight":
err = runPreflight(os.Args[2:])
case "rehearse":
err = runRehearse(os.Args[2:])
case "run":
err = runRun(os.Args[2:])
case "status":
err = runStatus(os.Args[2:])
case "report":
err = fmt.Errorf("not implemented yet: see internal/validate")
default:
usage()
os.Exit(1)
}
if err != nil {
fmt.Fprintln(os.Stderr, "stalwart-migrate:", err)
os.Exit(1)
}
}
func usage() {
fmt.Fprintln(os.Stderr, `usage: stalwart-migrate <command> [flags]
commands:
preflight run read-only checks and print the migration plan
rehearse convert this instance's settings and report what will NOT carry over (read-only)
run perform the migration (needs --yes and --recovery-point-confirmed)
status show the state of an in-progress or completed run
report print the validation report for a run (not implemented yet)`)
}