srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2026-05-25 23:13:00 +0200
committersrdusr <[email protected]>2026-05-25 23:13:00 +0200
commitdc059db6db67abad249fa153593a89a45fa37486 (patch)
tree2b30974599b66975906c3dc8c1a3258418147648 /cmd
parent0d1ce88962fe31ce1d204634e6ea10998a02827a (diff)
downloadmitmux-dc059db6db67abad249fa153593a89a45fa37486.tar.gz
mitmux-dc059db6db67abad249fa153593a89a45fa37486.zip
Version flag, Makefile, and honest cross-platform documentation
Neither binary had a -version flag - a basic expectation for any CLI tool, and useful for anyone reporting a bug ("which build is this"). internal/version holds Version/Commit/Date, set via -ldflags "-X mitmux/internal/version.X=..." at build time and defaulting to "dev" for a plain `go build` with no ldflags, so -version is never blank or misleading about whether a given binary is a tagged release or a local build. Both mitmux and mitmuxd gained a -version flag that prints it and exits. Makefile: `make build` (both binaries for the current platform, version info from `git describe`), `make test` (the same build/vet/gofmt/test checks expected before every commit here), `make install` (a thin wrapper over `go install`, respecting GOBIN/GOPATH as usual - not reimplementing Go's own path resolution), `make release` (cross-compiles both binaries for linux/darwin/windows/freebsd, amd64+arm64 where it makes sense, into dist/). Every target is CGO_ENABLED=0: modernc.org/sqlite is pure Go, so no C toolchain is needed anywhere, cross-compiling included - this was already true before this commit, just not verified or made easy to use. Verified live, every target actually run rather than just written: `make build` produces working binaries with version info correctly picked up from git (confirmed against a real -version invocation, both the "dev" default and an ldflags-injected release-style version string); `make test` runs clean; `make release` was run for real and produced 6 platform/arch binaries, each confirmed with `file` to be a genuinely correctly-formatted executable for its target (Mach-O for both macOS architectures, PE32+ for Windows, ELF for both Linux architectures and FreeBSD) - not just "the command exited zero." `make install`'s correctness rests on `go install` itself, Go's own well-tested mechanism; deliberately not run for real here since it writes into the real GOPATH/bin outside this repo, unprompted. README gained an honest Platforms section: Linux is what's actually been run and verified throughout this project's development; macOS, Windows, and FreeBSD cross-compile cleanly and pass go vet, and the code has nothing Linux-specific in it (CA/history storage already used Go's own cross-platform os.UserConfigDir, not a hardcoded XDG path - also fixed the README's install-directory example, which had been Linux-only text), but they haven't run on real hardware, so they're documented as "should work, not yet verified" rather than a claim this session can't actually back up. Also flagged a concrete, real gotcha: macOS's shorter Unix domain socket path limit combined with the deeper ~/Library/Application Support default control-socket location could matter for a long username, with the existing -socket flag as the workaround. go build/vet/gofmt/test/mod tidy all clean.
Diffstat (limited to 'cmd')
-rw-r--r--cmd/mitmux/main.go7
-rw-r--r--cmd/mitmuxd/main.go7
2 files changed, 14 insertions, 0 deletions
diff --git a/cmd/mitmux/main.go b/cmd/mitmux/main.go
index 7ffe9b9..c9563fe 100644
--- a/cmd/mitmux/main.go
+++ b/cmd/mitmux/main.go
@@ -23,6 +23,7 @@ import (
"mitmux/internal/rules"
"mitmux/internal/scope"
"mitmux/internal/store"
+ "mitmux/internal/version"
)
func defaultSocketPath() string {
@@ -38,8 +39,14 @@ func defaultSocketPath() string {
func main() {
socketPath := flag.String("socket", "", "daemon control socket path (default: $XDG_RUNTIME_DIR/mitmux.sock, else <ca-dir>/mitmux.sock)")
+ showVersion := flag.Bool("version", false, "print version and exit")
flag.Parse()
+ if *showVersion {
+ fmt.Println(version.String("mitmux"))
+ return
+ }
+
path := *socketPath
if path == "" {
path = defaultSocketPath()
diff --git a/cmd/mitmuxd/main.go b/cmd/mitmuxd/main.go
index baaba85..0114871 100644
--- a/cmd/mitmuxd/main.go
+++ b/cmd/mitmuxd/main.go
@@ -22,6 +22,7 @@ import (
"mitmux/internal/ipc"
"mitmux/internal/proxy"
"mitmux/internal/store"
+ "mitmux/internal/version"
)
func main() {
@@ -31,8 +32,14 @@ func main() {
socketPath := flag.String("socket", "", "control socket path (default: $XDG_RUNTIME_DIR/mitmux.sock, else <ca-dir>/mitmux.sock)")
installCA := flag.Bool("install-ca", false, "generate the CA if needed, print OS-specific trust-store install steps, and exit (doesn't start the proxy)")
upstreamProxy := flag.String("upstream-proxy", "", "chain all outbound connections through this HTTP CONNECT proxy (host:port, optional http:// prefix) instead of dialing origins directly")
+ showVersion := flag.Bool("version", false, "print version and exit")
flag.Parse()
+ if *showVersion {
+ fmt.Println(version.String("mitmuxd"))
+ return
+ }
+
var listenAddrs []string
for _, a := range strings.Split(*listen, ",") {
if a = strings.TrimSpace(a); a != "" {