No description
- Go 100%
| cmd | ||
| internal/upgrader | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
upgrade-stalwart
upgrade-stalwart is a Go CLI for checking and upgrading Stalwart Mail binaries installed under /opt/stalwart-mail.
It manages:
- Stalwart Mail server (
stalwartlabs/stalwart) - Stalwart CLI (
stalwartlabs/cli)
Features
- Uses GitHub Releases API (
google/go-github/v85) to query latest releases. - Detects local installed versions from:
/opt/stalwart-mail/bin/stalwart/opt/stalwart-mail/bin/stalwart-cli
- Compares installed versions with latest release tags.
- Selects Linux x86_64 artifacts:
stalwart-x86_64-unknown-linux-gnu.tar.gzstalwart-cli-x86_64-unknown-linux-gnu.tar.xz
- Downloads archives to temporary directories.
- Extracts and validates expected binaries from the archives.
- Performs safe replacement:
- keeps backup copy of current binary (
.bak.<timestamp>) - replaces only after successful download/extract/validation
- sets mode
0755
- keeps backup copy of current binary (
- Restarts systemd service after successful install (
stalwart-mail.serviceby default). - Supports
--dry-runmode (no download, no replacement, no chmod, no restart).
Requirements
- Linux x86_64 host
- Go 1.26+
- Permissions to write under
/opt/stalwart-mail/bin - Permissions to restart the target systemd service
GitHub Auth
If present, the CLI uses one of these environment variables for GitHub API authentication:
GITHUB_TOKENGH_TOKENGITHUB_AUTH_TOKEN
If none are set, it uses unauthenticated GitHub API requests.
Build
go mod tidy
go build -o upgrade-stalwart .
Install Example
Copy compiled binary to /usr/local/sbin/upgrade-stalwart:
sudo install -m 0755 ./upgrade-stalwart /usr/local/sbin/upgrade-stalwart
Usage
upgrade-stalwart [command]
Show versions only (no changes)
upgrade-stalwart check
Upgrade all supported components
upgrade-stalwart upgrade
Force reinstall latest releases
upgrade-stalwart upgrade --force
Upgrade using a manual release archive URL
Example:
upgrade-stalwart upgrade --url https://github.com/stalwartlabs/stalwart/releases/download/v0.16.4/stalwart-x86_64-unknown-linux-gnu.tar.gz
Use explicit service name
upgrade-stalwart upgrade --service stalwart-mail.service
Dry-run mode
upgrade-stalwart upgrade --dry-run
Show CLI version
upgrade-stalwart version
Flags
Global flags:
--install-root(default:/opt/stalwart-mail)--service(default:stalwart-mail.service)--dry-run
Upgrade flags:
--force--url <download-url>
Exit Codes
0on success- non-zero on failure
Tests
Run unit tests:
go test ./...
Current tests cover:
- semantic version extraction/comparison
- release asset selection
- archive-to-component inference