Rename the module to the Coffey-Labs organisation

The repositories moved off LINUXexpert-org. Here that is not a
documentation change: the old organisation was the module path, so it is
declared in go.mod and repeated in every internal import.

Leaving it would have been worse than a stale link. GitHub redirects the
repository, but a go.mod whose module line disagrees with the path it was
fetched from is an error rather than a redirect, so `go get` on the new
address would have failed against the old declaration.

go.mod, 34 files of imports, and the repository links in README and
ARCHITECTURE. go mod tidy leaves go.sum untouched -- no dependency moved,
only our own path.
This commit is contained in:
2026-08-30 15:24:18 -07:00
parent 8bf7c8e2ac
commit 12ec0c3fd4
37 changed files with 73 additions and 73 deletions
+2 -2
View File
@@ -341,8 +341,8 @@ against an already-migrated store.
whether the recreated container comes up as the server it was. That is whether the recreated container comes up as the server it was. That is
what would retire the flag. what would retire the flag.
[#9]: https://github.com/LINUXexpert-org/stalwart-migrator/pull/9 [#9]: https://github.com/Coffey-Labs/stalwart-migrator/pull/9
[#11]: https://github.com/LINUXexpert-org/stalwart-migrator/pull/11 [#11]: https://github.com/Coffey-Labs/stalwart-migrator/pull/11
- Quota recalculation is the one step allowed to fail without failing the - Quota recalculation is the one step allowed to fail without failing the
phase. Stale counters are an accounting problem; a failed cutover is one phase. Stale counters are an accounting problem; a failed cutover is one
an operator has to respond to by restoring a machine that is otherwise an operator has to respond to by restoring a machine that is otherwise
+6 -6
View File
@@ -10,7 +10,7 @@ job](#recovery-is-your-job) before using it on anything you care about.
Go, standard library only — no external dependencies. Go, standard library only — no external dependencies.
A companion to [**ihasmail**](https://github.com/LINUXexpert-org/ihasmail), A companion to [**ihasmail**](https://github.com/Coffey-Labs/ihasmail),
a JMAP-first webmail client for Stalwart. That one is what you read your a JMAP-first webmail client for Stalwart. That one is what you read your
mail in; this one is what gets the server underneath it onto a version that mail in; this one is what gets the server underneath it onto a version that
speaks the protocol it needs. speaks the protocol it needs.
@@ -24,7 +24,7 @@ is the practice this project most recommends copying: see [Rehearse on a
clone first](#rehearse-on-a-clone-first). clone first](#rehearse-on-a-clone-first).
**It has also been used at a scale well past that, by someone else.** **It has also been used at a scale well past that, by someone else.**
[@kaya-eu](https://github.com/LINUXexpert-org/stalwart-migrator/issues/1) [@kaya-eu](https://github.com/Coffey-Labs/stalwart-migrator/issues/1)
reported three successful 0.15.5 → 0.16.19 migrations on three servers: a reported three successful 0.15.5 → 0.16.19 migrations on three servers: a
testing and a production instance, each 16 domains, 55 accounts and roughly testing and a production instance, each 16 domains, 55 accounts and roughly
**221 GB** of real mail, and an arm64 home server of 1.4 GB across 181 **221 GB** of real mail, and an arm64 home server of 1.4 GB across 181
@@ -40,7 +40,7 @@ boot](#the-store-migration-may-need-one-more-recovery-boot)), and data loss
from booting recovery mode again *after* a completed from booting recovery mode again *after* a completed
migration (see [Do not boot recovery mode migration (see [Do not boot recovery mode
again](#do-not-boot-recovery-mode-again-afterwards)). Their full report is again](#do-not-boot-recovery-mode-again-afterwards)). Their full report is
[issue #1](https://github.com/LINUXexpert-org/stalwart-migrator/issues/1). [issue #1](https://github.com/Coffey-Labs/stalwart-migrator/issues/1).
## Before you start: two things you must fix on the server ## Before you start: two things you must fix on the server
@@ -357,7 +357,7 @@ because getting an extra recovery boot wrong is its own hazard — see [Do
not boot recovery mode again not boot recovery mode again
afterwards](#do-not-boot-recovery-mode-again-afterwards). If you hit afterwards](#do-not-boot-recovery-mode-again-afterwards). If you hit
either, that is the manual step. Reported by either, that is the manual step. Reported by
[@kaya-eu](https://github.com/LINUXexpert-org/stalwart-migrator/issues/1). [@kaya-eu](https://github.com/Coffey-Labs/stalwart-migrator/issues/1).
## A certificate that serves HTTPS may not serve the mail ports ## A certificate that serves HTTPS may not serve the mail ports
@@ -373,7 +373,7 @@ certificate you are handed, not just to 443.
This tool does not set it for you. Like the `AcmeProvider` above, it This tool does not set it for you. Like the `AcmeProvider` above, it
should, and the supplemental plan is where it belongs. Reported by should, and the supplemental plan is where it belongs. Reported by
[@kaya-eu](https://github.com/LINUXexpert-org/stalwart-migrator/issues/1). [@kaya-eu](https://github.com/Coffey-Labs/stalwart-migrator/issues/1).
## You need a named admin account before you migrate ## You need a named admin account before you migrate
@@ -491,7 +491,7 @@ migration, use the admin API or `stalwart-cli` against the running server.
This is Stalwart's behaviour rather than this tool's, and it is reported This is Stalwart's behaviour rather than this tool's, and it is reported
here because this tool is where you learned the technique. Reported by here because this tool is where you learned the technique. Reported by
[@kaya-eu](https://github.com/LINUXexpert-org/stalwart-migrator/issues/1). [@kaya-eu](https://github.com/Coffey-Labs/stalwart-migrator/issues/1).
### Why it works this way ### Why it works this way
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"fmt" "fmt"
"os" "os"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/preflight" "github.com/Coffey-Labs/stalwart-migrator/internal/preflight"
) )
func runPreflight(args []string) error { func runPreflight(args []string) error {
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"path/filepath" "path/filepath"
"sort" "sort"
"github.com/LINUXexpert-org/stalwart-migrator/internal/backup" "github.com/Coffey-Labs/stalwart-migrator/internal/backup"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// preservePlan lifts the run's irreplaceable inputs out of the scratch // preservePlan lifts the run's irreplaceable inputs out of the scratch
+1 -1
View File
@@ -9,7 +9,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
func writeTemp(t *testing.T, dir, name, body string) string { func writeTemp(t *testing.T, dir, name, body string) string {
+5 -5
View File
@@ -12,11 +12,11 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/LINUXexpert-org/stalwart-migrator/internal/applyplan" "github.com/Coffey-Labs/stalwart-migrator/internal/applyplan"
"github.com/LINUXexpert-org/stalwart-migrator/internal/backup" "github.com/Coffey-Labs/stalwart-migrator/internal/backup"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/plan" "github.com/Coffey-Labs/stalwart-migrator/internal/plan"
"github.com/LINUXexpert-org/stalwart-migrator/internal/preflight" "github.com/Coffey-Labs/stalwart-migrator/internal/preflight"
) )
// runRehearse implements `stalwart-migrate rehearse` (ARCHITECTURE.md §4.9): // runRehearse implements `stalwart-migrate rehearse` (ARCHITECTURE.md §4.9):
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"flag" "flag"
"fmt" "fmt"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/validate" "github.com/Coffey-Labs/stalwart-migrator/internal/validate"
) )
// runReport prints what validation found for a run, from the checkpoint the // runReport prints what validation found for a run, from the checkpoint the
+2 -2
View File
@@ -6,8 +6,8 @@ package main
import ( import (
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/validate" "github.com/Coffey-Labs/stalwart-migrator/internal/validate"
) )
// `report` re-reads what the run recorded rather than re-checking, so the // `report` re-reads what the run recorded rather than re-checking, so the
+10 -10
View File
@@ -14,16 +14,16 @@ import (
"strings" "strings"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/applyplan" "github.com/Coffey-Labs/stalwart-migrator/internal/applyplan"
"github.com/LINUXexpert-org/stalwart-migrator/internal/backup" "github.com/Coffey-Labs/stalwart-migrator/internal/backup"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/cutover" "github.com/Coffey-Labs/stalwart-migrator/internal/cutover"
"github.com/LINUXexpert-org/stalwart-migrator/internal/plan" "github.com/Coffey-Labs/stalwart-migrator/internal/plan"
"github.com/LINUXexpert-org/stalwart-migrator/internal/preflight" "github.com/Coffey-Labs/stalwart-migrator/internal/preflight"
"github.com/LINUXexpert-org/stalwart-migrator/internal/recovery" "github.com/Coffey-Labs/stalwart-migrator/internal/recovery"
"github.com/LINUXexpert-org/stalwart-migrator/internal/service" "github.com/Coffey-Labs/stalwart-migrator/internal/service"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stage" "github.com/Coffey-Labs/stalwart-migrator/internal/stage"
"github.com/LINUXexpert-org/stalwart-migrator/internal/validate" "github.com/Coffey-Labs/stalwart-migrator/internal/validate"
) )
// runRun implements `stalwart-migrate run`: the real migration. // runRun implements `stalwart-migrate run`: the real migration.
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"fmt" "fmt"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
func runStatus(args []string) error { func runStatus(args []string) error {
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"os" "os"
"sort" "sort"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stalwartapi" "github.com/Coffey-Labs/stalwart-migrator/internal/stalwartapi"
) )
// runTenants prints who owns what, read-only. // runTenants prints who owns what, read-only.
+1 -1
View File
@@ -1,3 +1,3 @@
module github.com/LINUXexpert-org/stalwart-migrator module github.com/Coffey-Labs/stalwart-migrator
go 1.26.5 go 1.26.5
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"sort" "sort"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/backup" "github.com/Coffey-Labs/stalwart-migrator/internal/backup"
) )
// AccountRoleOperations restores the account roles a v0.16 migration drops. // AccountRoleOperations restores the account roles a v0.16 migration drops.
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/backup" "github.com/Coffey-Labs/stalwart-migrator/internal/backup"
) )
// The exact principal shape a real 0.15.5 reports. // The exact principal shape a real 0.15.5 reports.
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// Options configures a full backup pass. Which fields matter depends on // Options configures a full backup pass. Which fields matter depends on
+1 -1
View File
@@ -12,7 +12,7 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
func TestBackupRunEndToEndAndResume(t *testing.T) { func TestBackupRunEndToEndAndResume(t *testing.T) {
+2 -2
View File
@@ -12,8 +12,8 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/preflight" "github.com/Coffey-Labs/stalwart-migrator/internal/preflight"
) )
// ArtifactContainerDefinition is the preserved `docker inspect` of the // ArtifactContainerDefinition is the preserved `docker inspect` of the
+1 -1
View File
@@ -12,7 +12,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// inspectJSON builds a `docker inspect` document. extra is merged into // inspectJSON builds a `docker inspect` document. extra is merged into
+4 -4
View File
@@ -16,10 +16,10 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/preflight" "github.com/Coffey-Labs/stalwart-migrator/internal/preflight"
"github.com/LINUXexpert-org/stalwart-migrator/internal/service" "github.com/Coffey-Labs/stalwart-migrator/internal/service"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stalwartapi" "github.com/Coffey-Labs/stalwart-migrator/internal/stalwartapi"
) )
// Artifact names this phase records. ArtifactServiceUnit is the preserved // Artifact names this phase records. ArtifactServiceUnit is the preserved
+2 -2
View File
@@ -14,8 +14,8 @@ import (
"testing" "testing"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/service" "github.com/Coffey-Labs/stalwart-migrator/internal/service"
) )
// fakeController stands in for systemd, recording call order. // fakeController stands in for systemd, recording call order.
+2 -2
View File
@@ -11,8 +11,8 @@ import (
"strings" "strings"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stalwartapi" "github.com/Coffey-Labs/stalwart-migrator/internal/stalwartapi"
) )
// Options configures a Checker. Every field has a conservative default // Options configures a Checker. Every field has a conservative default
+1 -1
View File
@@ -14,7 +14,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// writeFakeBinary creates a shell script that behaves like `stalwart // writeFakeBinary creates a shell script that behaves like `stalwart
+1 -1
View File
@@ -10,7 +10,7 @@ import (
"os/exec" "os/exec"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// checkFunc is the closure Checker.Run uses to run and checkpoint one // checkFunc is the closure Checker.Run uses to run and checkpoint one
+1 -1
View File
@@ -13,7 +13,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// The defaults the official Stalwart image gives every container made from // The defaults the official Stalwart image gives every container made from
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"os" "os"
"os/exec" "os/exec"
"github.com/LINUXexpert-org/stalwart-migrator/internal/service" "github.com/Coffey-Labs/stalwart-migrator/internal/service"
) )
// DeploymentKind is how a Stalwart instance appears to be run, which // DeploymentKind is how a Stalwart instance appears to be run, which
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// recordingLauncher stands in for a deployment that is not a local binary - // recordingLauncher stands in for a deployment that is not a local binary -
+1 -1
View File
@@ -12,7 +12,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// Options configures one full recovery-mode migration cycle: starting the // Options configures one full recovery-mode migration cycle: starting the
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
func TestRecoveryRunEndToEndAndResume(t *testing.T) { func TestRecoveryRunEndToEndAndResume(t *testing.T) {
+2 -2
View File
@@ -10,8 +10,8 @@ import (
"os/exec" "os/exec"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/preflight" "github.com/Coffey-Labs/stalwart-migrator/internal/preflight"
) )
// DefaultDockerBinary is what shells out unless a caller names another. // DefaultDockerBinary is what shells out unless a caller names another.
+2 -2
View File
@@ -17,8 +17,8 @@ import (
"runtime" "runtime"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/preflight" "github.com/Coffey-Labs/stalwart-migrator/internal/preflight"
) )
// assetForArch maps a Go architecture to the release asset holding the // assetForArch maps a Go architecture to the release asset holding the
+1 -1
View File
@@ -20,7 +20,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// tarGzWith builds a release-shaped archive containing one entry. // tarGzWith builds a release-shaped archive containing one entry.
+3 -3
View File
@@ -10,9 +10,9 @@ import (
"strings" "strings"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/recovery" "github.com/Coffey-Labs/stalwart-migrator/internal/recovery"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stalwartapi" "github.com/Coffey-Labs/stalwart-migrator/internal/stalwartapi"
) )
// BootCheckOptions configures a normal (non-recovery-mode) boot of the // BootCheckOptions configures a normal (non-recovery-mode) boot of the
+1 -1
View File
@@ -12,7 +12,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
func freePort(t *testing.T) int { func freePort(t *testing.T) int {
+2 -2
View File
@@ -9,8 +9,8 @@ import (
"sort" "sort"
"strings" "strings"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stalwartapi" "github.com/Coffey-Labs/stalwart-migrator/internal/stalwartapi"
) )
// MailboxDelta is one mailbox whose message count didn't match between the // MailboxDelta is one mailbox whose message count didn't match between the
+2 -2
View File
@@ -11,8 +11,8 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stalwartapi" "github.com/Coffey-Labs/stalwart-migrator/internal/stalwartapi"
) )
// jmapEnvelope mirrors the wire shape stalwartapi.Client.call() parses. // jmapEnvelope mirrors the wire shape stalwartapi.Client.call() parses.
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
"github.com/LINUXexpert-org/stalwart-migrator/internal/stalwartapi" "github.com/Coffey-Labs/stalwart-migrator/internal/stalwartapi"
) )
// LiveOptions describes the migrated instance cutover has just started. // LiveOptions describes the migrated instance cutover has just started.
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/LINUXexpert-org/stalwart-migrator/internal/checkpoint" "github.com/Coffey-Labs/stalwart-migrator/internal/checkpoint"
) )
// A run that never captured a "before" cannot be checked against one. The // A run that never captured a "before" cannot be checked against one. The