From feeadc582b982bd1fbbb1d117c14200807c17bd7 Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Fri, 27 Mar 2026 02:05:59 -0700 Subject: [PATCH] Migrate module path from kyle/ to mc/ org All import paths updated to git.wntrmute.dev/mc/. Bumps mcdsl to v1.2.0. Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 2 +- Makefile | 4 +- client/mcproxy/client.go | 2 +- client/mcproxy/client_test.go | 12 ++-- cmd/mc-proxy/server.go | 12 ++-- cmd/mc-proxy/snapshot.go | 4 +- cmd/mc-proxy/status.go | 4 +- cmd/mcproxyctl/firewall.go | 2 +- cmd/mcproxyctl/health.go | 2 +- cmd/mcproxyctl/policies.go | 2 +- cmd/mcproxyctl/root.go | 2 +- cmd/mcproxyctl/routes.go | 2 +- gen/mc_proxy/v1/admin.pb.go | 2 +- go.mod | 4 +- go.sum | 4 +- internal/config/config.go | 2 +- internal/db/db.go | 2 +- internal/db/db_test.go | 2 +- internal/db/migrations.go | 2 +- internal/db/seed.go | 2 +- internal/db/snapshot.go | 2 +- internal/grpcserver/grpcserver.go | 8 +-- internal/grpcserver/grpcserver_test.go | 10 +-- internal/l7/policy.go | 2 +- internal/l7/serve.go | 4 +- internal/server/server.go | 14 ++-- internal/server/server_test.go | 6 +- proto/mc_proxy/v1/admin.proto | 2 +- .../{kyle => mc}/mcdsl/auth/auth.go | 0 .../{kyle => mc}/mcdsl/auth/cache.go | 0 .../{kyle => mc}/mcdsl/auth/context.go | 0 .../{kyle => mc}/mcdsl/config/config.go | 68 ++++++++++++++++++- .../{kyle => mc}/mcdsl/config/duration.go | 0 .../{kyle => mc}/mcdsl/db/db.go | 0 vendor/modules.txt | 8 +-- 35 files changed, 130 insertions(+), 64 deletions(-) rename vendor/git.wntrmute.dev/{kyle => mc}/mcdsl/auth/auth.go (100%) rename vendor/git.wntrmute.dev/{kyle => mc}/mcdsl/auth/cache.go (100%) rename vendor/git.wntrmute.dev/{kyle => mc}/mcdsl/auth/context.go (100%) rename vendor/git.wntrmute.dev/{kyle => mc}/mcdsl/config/config.go (82%) rename vendor/git.wntrmute.dev/{kyle => mc}/mcdsl/config/duration.go (100%) rename vendor/git.wntrmute.dev/{kyle => mc}/mcdsl/db/db.go (100%) diff --git a/CLAUDE.md b/CLAUDE.md index ae24cde..45a4c74 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -26,7 +26,7 @@ go test ./internal/sni -run TestExtract ## Architecture -- **Module path**: `git.wntrmute.dev/kyle/mc-proxy` +- **Module path**: `git.wntrmute.dev/mc/mc-proxy` - **Go with CGO_ENABLED=0**, statically linked, Alpine containers - **Dual mode, per-route** — L4 (passthrough) and L7 (TLS-terminating HTTP/2 reverse proxy) coexist on the same listener - **PROXY protocol** — listeners accept v1/v2; routes send v2. Enables edge→origin deployments over Tailscale diff --git a/Makefile b/Makefile index 689c9d7..cfa2fd3 100644 --- a/Makefile +++ b/Makefile @@ -21,8 +21,8 @@ lint: golangci-lint run ./... proto: - protoc --go_out=. --go_opt=module=git.wntrmute.dev/kyle/mc-proxy \ - --go-grpc_out=. --go-grpc_opt=module=git.wntrmute.dev/kyle/mc-proxy \ + protoc --go_out=. --go_opt=module=git.wntrmute.dev/mc/mc-proxy \ + --go-grpc_out=. --go-grpc_opt=module=git.wntrmute.dev/mc/mc-proxy \ proto/mc_proxy/v1/*.proto proto-lint: diff --git a/client/mcproxy/client.go b/client/mcproxy/client.go index ed7e73f..a55f10e 100644 --- a/client/mcproxy/client.go +++ b/client/mcproxy/client.go @@ -10,7 +10,7 @@ import ( "google.golang.org/grpc/credentials/insecure" healthpb "google.golang.org/grpc/health/grpc_health_v1" - pb "git.wntrmute.dev/kyle/mc-proxy/gen/mc_proxy/v1" + pb "git.wntrmute.dev/mc/mc-proxy/gen/mc_proxy/v1" ) // Client provides access to the mc-proxy admin API. diff --git a/client/mcproxy/client_test.go b/client/mcproxy/client_test.go index da9c540..6a5d544 100644 --- a/client/mcproxy/client_test.go +++ b/client/mcproxy/client_test.go @@ -15,12 +15,12 @@ import ( healthpb "google.golang.org/grpc/health/grpc_health_v1" "google.golang.org/grpc/test/bufconn" - pb "git.wntrmute.dev/kyle/mc-proxy/gen/mc_proxy/v1" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" - "git.wntrmute.dev/kyle/mc-proxy/internal/db" - "git.wntrmute.dev/kyle/mc-proxy/internal/firewall" - "git.wntrmute.dev/kyle/mc-proxy/internal/grpcserver" - "git.wntrmute.dev/kyle/mc-proxy/internal/server" + pb "git.wntrmute.dev/mc/mc-proxy/gen/mc_proxy/v1" + "git.wntrmute.dev/mc/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/db" + "git.wntrmute.dev/mc/mc-proxy/internal/firewall" + "git.wntrmute.dev/mc/mc-proxy/internal/grpcserver" + "git.wntrmute.dev/mc/mc-proxy/internal/server" ) func setupTestClient(t *testing.T) *Client { diff --git a/cmd/mc-proxy/server.go b/cmd/mc-proxy/server.go index 30d9d2f..e819c1e 100644 --- a/cmd/mc-proxy/server.go +++ b/cmd/mc-proxy/server.go @@ -11,12 +11,12 @@ import ( "github.com/spf13/cobra" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" - "git.wntrmute.dev/kyle/mc-proxy/internal/db" - "git.wntrmute.dev/kyle/mc-proxy/internal/firewall" - "git.wntrmute.dev/kyle/mc-proxy/internal/grpcserver" - "git.wntrmute.dev/kyle/mc-proxy/internal/metrics" - "git.wntrmute.dev/kyle/mc-proxy/internal/server" + "git.wntrmute.dev/mc/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/db" + "git.wntrmute.dev/mc/mc-proxy/internal/firewall" + "git.wntrmute.dev/mc/mc-proxy/internal/grpcserver" + "git.wntrmute.dev/mc/mc-proxy/internal/metrics" + "git.wntrmute.dev/mc/mc-proxy/internal/server" ) func serverCmd() *cobra.Command { diff --git a/cmd/mc-proxy/snapshot.go b/cmd/mc-proxy/snapshot.go index 13c47a6..a9f8750 100644 --- a/cmd/mc-proxy/snapshot.go +++ b/cmd/mc-proxy/snapshot.go @@ -9,8 +9,8 @@ import ( "github.com/spf13/cobra" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" - "git.wntrmute.dev/kyle/mc-proxy/internal/db" + "git.wntrmute.dev/mc/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/db" ) func snapshotCmd() *cobra.Command { diff --git a/cmd/mc-proxy/status.go b/cmd/mc-proxy/status.go index d353105..a635be3 100644 --- a/cmd/mc-proxy/status.go +++ b/cmd/mc-proxy/status.go @@ -9,8 +9,8 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" - pb "git.wntrmute.dev/kyle/mc-proxy/gen/mc_proxy/v1" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" + pb "git.wntrmute.dev/mc/mc-proxy/gen/mc_proxy/v1" + "git.wntrmute.dev/mc/mc-proxy/internal/config" ) func statusCmd() *cobra.Command { diff --git a/cmd/mcproxyctl/firewall.go b/cmd/mcproxyctl/firewall.go index 5160828..5283703 100644 --- a/cmd/mcproxyctl/firewall.go +++ b/cmd/mcproxyctl/firewall.go @@ -7,7 +7,7 @@ import ( "github.com/spf13/cobra" - "git.wntrmute.dev/kyle/mc-proxy/client/mcproxy" + "git.wntrmute.dev/mc/mc-proxy/client/mcproxy" ) func firewallCmd() *cobra.Command { diff --git a/cmd/mcproxyctl/health.go b/cmd/mcproxyctl/health.go index 007d078..7dc7778 100644 --- a/cmd/mcproxyctl/health.go +++ b/cmd/mcproxyctl/health.go @@ -7,7 +7,7 @@ import ( "github.com/spf13/cobra" - "git.wntrmute.dev/kyle/mc-proxy/client/mcproxy" + "git.wntrmute.dev/mc/mc-proxy/client/mcproxy" ) func healthCmd() *cobra.Command { diff --git a/cmd/mcproxyctl/policies.go b/cmd/mcproxyctl/policies.go index 768ee55..12614be 100644 --- a/cmd/mcproxyctl/policies.go +++ b/cmd/mcproxyctl/policies.go @@ -7,7 +7,7 @@ import ( "github.com/spf13/cobra" - mcproxy "git.wntrmute.dev/kyle/mc-proxy/client/mcproxy" + mcproxy "git.wntrmute.dev/mc/mc-proxy/client/mcproxy" ) func policiesCmd() *cobra.Command { diff --git a/cmd/mcproxyctl/root.go b/cmd/mcproxyctl/root.go index f13a2dc..9e450b8 100644 --- a/cmd/mcproxyctl/root.go +++ b/cmd/mcproxyctl/root.go @@ -6,7 +6,7 @@ import ( "github.com/spf13/cobra" - "git.wntrmute.dev/kyle/mc-proxy/client/mcproxy" + "git.wntrmute.dev/mc/mc-proxy/client/mcproxy" ) const defaultSocketPath = "/srv/mc-proxy/mc-proxy.sock" diff --git a/cmd/mcproxyctl/routes.go b/cmd/mcproxyctl/routes.go index fa04827..68e1f14 100644 --- a/cmd/mcproxyctl/routes.go +++ b/cmd/mcproxyctl/routes.go @@ -7,7 +7,7 @@ import ( "github.com/spf13/cobra" - mcproxy "git.wntrmute.dev/kyle/mc-proxy/client/mcproxy" + mcproxy "git.wntrmute.dev/mc/mc-proxy/client/mcproxy" ) func routesCmd() *cobra.Command { diff --git a/gen/mc_proxy/v1/admin.pb.go b/gen/mc_proxy/v1/admin.pb.go index 4fc2d30..99b4863 100644 --- a/gen/mc_proxy/v1/admin.pb.go +++ b/gen/mc_proxy/v1/admin.pb.go @@ -1449,7 +1449,7 @@ const file_proto_mc_proxy_v1_admin_proto_rawDesc = "" + "\x0eListL7Policies\x12\".mc_proxy.v1.ListL7PoliciesRequest\x1a#.mc_proxy.v1.ListL7PoliciesResponse\x12P\n" + "\vAddL7Policy\x12\x1f.mc_proxy.v1.AddL7PolicyRequest\x1a .mc_proxy.v1.AddL7PolicyResponse\x12Y\n" + "\x0eRemoveL7Policy\x12\".mc_proxy.v1.RemoveL7PolicyRequest\x1a#.mc_proxy.v1.RemoveL7PolicyResponse\x12J\n" + - "\tGetStatus\x12\x1d.mc_proxy.v1.GetStatusRequest\x1a\x1e.mc_proxy.v1.GetStatusResponseB:Z8git.wntrmute.dev/kyle/mc-proxy/gen/mc_proxy/v1;mcproxyv1b\x06proto3" + "\tGetStatus\x12\x1d.mc_proxy.v1.GetStatusRequest\x1a\x1e.mc_proxy.v1.GetStatusResponseB:Z8git.wntrmute.dev/mc/mc-proxy/gen/mc_proxy/v1;mcproxyv1b\x06proto3" var ( file_proto_mc_proxy_v1_admin_proto_rawDescOnce sync.Once diff --git a/go.mod b/go.mod index 4d8e9f0..593200a 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ -module git.wntrmute.dev/kyle/mc-proxy +module git.wntrmute.dev/mc/mc-proxy go 1.25.7 require ( - git.wntrmute.dev/kyle/mcdsl v1.0.0 + git.wntrmute.dev/mc/mcdsl v1.2.0 github.com/oschwald/maxminddb-golang v1.13.1 github.com/prometheus/client_golang v1.23.2 github.com/spf13/cobra v1.10.2 diff --git a/go.sum b/go.sum index cc771a2..c6ecf99 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -git.wntrmute.dev/kyle/mcdsl v1.0.0 h1:YB7dx4gdNYKKcVySpL6UkwHqdCJ9Nl1yS0+eHk0hNtk= -git.wntrmute.dev/kyle/mcdsl v1.0.0/go.mod h1:wo0tGfUAxci3XnOe4/rFmR0RjUElKdYUazc+Np986sg= +git.wntrmute.dev/mc/mcdsl v1.2.0 h1:41hep7/PNZJfN0SN/nM+rQpyF1GSZcvNNjyVG81DI7U= +git.wntrmute.dev/mc/mcdsl v1.2.0/go.mod h1:lXYrAt74ZUix6rx9oVN8d2zH1YJoyp4uxPVKQ+SSxuM= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= diff --git a/internal/config/config.go b/internal/config/config.go index 405c5cc..2228ab4 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -7,7 +7,7 @@ import ( "os" "strings" - mcdslconfig "git.wntrmute.dev/kyle/mcdsl/config" + mcdslconfig "git.wntrmute.dev/mc/mcdsl/config" ) // Duration is an alias for the mcdsl config.Duration type, which wraps diff --git a/internal/db/db.go b/internal/db/db.go index c00ad78..30823d7 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -4,7 +4,7 @@ import ( "database/sql" "fmt" - mcdsldb "git.wntrmute.dev/kyle/mcdsl/db" + mcdsldb "git.wntrmute.dev/mc/mcdsl/db" ) // Store wraps a SQLite database connection for mc-proxy persistence. diff --git a/internal/db/db_test.go b/internal/db/db_test.go index 206f7f4..51455cb 100644 --- a/internal/db/db_test.go +++ b/internal/db/db_test.go @@ -4,7 +4,7 @@ import ( "path/filepath" "testing" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/config" ) func openTestDB(t *testing.T) *Store { diff --git a/internal/db/migrations.go b/internal/db/migrations.go index 3188c89..5907efc 100644 --- a/internal/db/migrations.go +++ b/internal/db/migrations.go @@ -1,7 +1,7 @@ package db import ( - mcdsldb "git.wntrmute.dev/kyle/mcdsl/db" + mcdsldb "git.wntrmute.dev/mc/mcdsl/db" ) // Migrations is the ordered list of schema migrations for mc-proxy. diff --git a/internal/db/seed.go b/internal/db/seed.go index 7690cee..d938c28 100644 --- a/internal/db/seed.go +++ b/internal/db/seed.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/config" ) // Seed populates the database from TOML config data. Only called when the diff --git a/internal/db/snapshot.go b/internal/db/snapshot.go index 2b05649..b23b142 100644 --- a/internal/db/snapshot.go +++ b/internal/db/snapshot.go @@ -1,7 +1,7 @@ package db import ( - mcdsldb "git.wntrmute.dev/kyle/mcdsl/db" + mcdsldb "git.wntrmute.dev/mc/mcdsl/db" ) // Snapshot creates a consistent backup of the database using VACUUM INTO. diff --git a/internal/grpcserver/grpcserver.go b/internal/grpcserver/grpcserver.go index be1f671..0881af7 100644 --- a/internal/grpcserver/grpcserver.go +++ b/internal/grpcserver/grpcserver.go @@ -17,10 +17,10 @@ import ( "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/timestamppb" - pb "git.wntrmute.dev/kyle/mc-proxy/gen/mc_proxy/v1" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" - "git.wntrmute.dev/kyle/mc-proxy/internal/db" - "git.wntrmute.dev/kyle/mc-proxy/internal/server" + pb "git.wntrmute.dev/mc/mc-proxy/gen/mc_proxy/v1" + "git.wntrmute.dev/mc/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/db" + "git.wntrmute.dev/mc/mc-proxy/internal/server" ) var countryCodeRe = regexp.MustCompile(`^[A-Z]{2}$`) diff --git a/internal/grpcserver/grpcserver_test.go b/internal/grpcserver/grpcserver_test.go index 76cdd1a..0531a6a 100644 --- a/internal/grpcserver/grpcserver_test.go +++ b/internal/grpcserver/grpcserver_test.go @@ -15,11 +15,11 @@ import ( "google.golang.org/grpc/status" "google.golang.org/grpc/test/bufconn" - pb "git.wntrmute.dev/kyle/mc-proxy/gen/mc_proxy/v1" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" - "git.wntrmute.dev/kyle/mc-proxy/internal/db" - "git.wntrmute.dev/kyle/mc-proxy/internal/firewall" - "git.wntrmute.dev/kyle/mc-proxy/internal/server" + pb "git.wntrmute.dev/mc/mc-proxy/gen/mc_proxy/v1" + "git.wntrmute.dev/mc/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/db" + "git.wntrmute.dev/mc/mc-proxy/internal/firewall" + "git.wntrmute.dev/mc/mc-proxy/internal/server" ) // testEnv bundles all the objects needed for a grpcserver test. diff --git a/internal/l7/policy.go b/internal/l7/policy.go index fa5996a..5e3d36f 100644 --- a/internal/l7/policy.go +++ b/internal/l7/policy.go @@ -4,7 +4,7 @@ import ( "net/http" "strings" - "git.wntrmute.dev/kyle/mc-proxy/internal/metrics" + "git.wntrmute.dev/mc/mc-proxy/internal/metrics" ) // PolicyRule defines an L7 blocking policy. diff --git a/internal/l7/serve.go b/internal/l7/serve.go index 3d027d7..9fb8995 100644 --- a/internal/l7/serve.go +++ b/internal/l7/serve.go @@ -15,8 +15,8 @@ import ( "strconv" "time" - "git.wntrmute.dev/kyle/mc-proxy/internal/metrics" - "git.wntrmute.dev/kyle/mc-proxy/internal/proxyproto" + "git.wntrmute.dev/mc/mc-proxy/internal/metrics" + "git.wntrmute.dev/mc/mc-proxy/internal/proxyproto" "golang.org/x/net/http2" ) diff --git a/internal/server/server.go b/internal/server/server.go index 8eb9c44..bd224c6 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -11,13 +11,13 @@ import ( "sync/atomic" "time" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" - "git.wntrmute.dev/kyle/mc-proxy/internal/firewall" - "git.wntrmute.dev/kyle/mc-proxy/internal/l7" - "git.wntrmute.dev/kyle/mc-proxy/internal/metrics" - "git.wntrmute.dev/kyle/mc-proxy/internal/proxy" - "git.wntrmute.dev/kyle/mc-proxy/internal/proxyproto" - "git.wntrmute.dev/kyle/mc-proxy/internal/sni" + "git.wntrmute.dev/mc/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/firewall" + "git.wntrmute.dev/mc/mc-proxy/internal/l7" + "git.wntrmute.dev/mc/mc-proxy/internal/metrics" + "git.wntrmute.dev/mc/mc-proxy/internal/proxy" + "git.wntrmute.dev/mc/mc-proxy/internal/proxyproto" + "git.wntrmute.dev/mc/mc-proxy/internal/sni" ) // L7PolicyRule is an L7 blocking policy attached to a route. diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 0e12f7b..2919aed 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -24,9 +24,9 @@ import ( "testing" "time" - "git.wntrmute.dev/kyle/mc-proxy/internal/config" - "git.wntrmute.dev/kyle/mc-proxy/internal/firewall" - "git.wntrmute.dev/kyle/mc-proxy/internal/proxyproto" + "git.wntrmute.dev/mc/mc-proxy/internal/config" + "git.wntrmute.dev/mc/mc-proxy/internal/firewall" + "git.wntrmute.dev/mc/mc-proxy/internal/proxyproto" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" ) diff --git a/proto/mc_proxy/v1/admin.proto b/proto/mc_proxy/v1/admin.proto index 888c8c2..4f9886c 100644 --- a/proto/mc_proxy/v1/admin.proto +++ b/proto/mc_proxy/v1/admin.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package mc_proxy.v1; -option go_package = "git.wntrmute.dev/kyle/mc-proxy/gen/mc_proxy/v1;mcproxyv1"; +option go_package = "git.wntrmute.dev/mc/mc-proxy/gen/mc_proxy/v1;mcproxyv1"; import "google/protobuf/timestamp.proto"; diff --git a/vendor/git.wntrmute.dev/kyle/mcdsl/auth/auth.go b/vendor/git.wntrmute.dev/mc/mcdsl/auth/auth.go similarity index 100% rename from vendor/git.wntrmute.dev/kyle/mcdsl/auth/auth.go rename to vendor/git.wntrmute.dev/mc/mcdsl/auth/auth.go diff --git a/vendor/git.wntrmute.dev/kyle/mcdsl/auth/cache.go b/vendor/git.wntrmute.dev/mc/mcdsl/auth/cache.go similarity index 100% rename from vendor/git.wntrmute.dev/kyle/mcdsl/auth/cache.go rename to vendor/git.wntrmute.dev/mc/mcdsl/auth/cache.go diff --git a/vendor/git.wntrmute.dev/kyle/mcdsl/auth/context.go b/vendor/git.wntrmute.dev/mc/mcdsl/auth/context.go similarity index 100% rename from vendor/git.wntrmute.dev/kyle/mcdsl/auth/context.go rename to vendor/git.wntrmute.dev/mc/mcdsl/auth/context.go diff --git a/vendor/git.wntrmute.dev/kyle/mcdsl/config/config.go b/vendor/git.wntrmute.dev/mc/mcdsl/config/config.go similarity index 82% rename from vendor/git.wntrmute.dev/kyle/mcdsl/config/config.go rename to vendor/git.wntrmute.dev/mc/mcdsl/config/config.go index b28ff58..023a7ef 100644 --- a/vendor/git.wntrmute.dev/kyle/mcdsl/config/config.go +++ b/vendor/git.wntrmute.dev/mc/mcdsl/config/config.go @@ -34,7 +34,7 @@ import ( "github.com/pelletier/go-toml/v2" - "git.wntrmute.dev/kyle/mcdsl/auth" + "git.wntrmute.dev/mc/mcdsl/auth" ) // Base contains the configuration sections common to all Metacircular @@ -144,6 +144,8 @@ func Load[T any](path string, envPrefix string) (*T, error) { applyEnvToStruct(reflect.ValueOf(&cfg).Elem(), envPrefix) } + applyPortEnv(&cfg) + applyBaseDefaults(&cfg) if err := validateBase(&cfg); err != nil { @@ -239,6 +241,70 @@ func findBase(cfg any) *Base { return nil } +// applyPortEnv overrides ServerConfig.ListenAddr and ServerConfig.GRPCAddr +// from $PORT and $PORT_GRPC respectively. These environment variables are +// set by the MCP agent to assign authoritative port bindings, so they take +// precedence over both TOML values and generic env overrides. +func applyPortEnv(cfg any) { + sc := findServerConfig(cfg) + if sc == nil { + return + } + + if port, ok := os.LookupEnv("PORT"); ok { + sc.ListenAddr = ":" + port + } + if port, ok := os.LookupEnv("PORT_GRPC"); ok { + sc.GRPCAddr = ":" + port + } +} + +// findServerConfig returns a pointer to the ServerConfig in the config +// struct. It first checks for an embedded Base (which contains Server), +// then walks the struct tree via reflection to find any ServerConfig field +// directly (e.g., the Metacrypt pattern where ServerConfig is embedded +// without Base). +func findServerConfig(cfg any) *ServerConfig { + if base := findBase(cfg); base != nil { + return &base.Server + } + + return findServerConfigReflect(reflect.ValueOf(cfg)) +} + +// findServerConfigReflect walks the struct tree to find a ServerConfig field. +func findServerConfigReflect(v reflect.Value) *ServerConfig { + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if v.Kind() != reflect.Struct { + return nil + } + + scType := reflect.TypeOf(ServerConfig{}) + t := v.Type() + for i := range t.NumField() { + field := t.Field(i) + fv := v.Field(i) + + if field.Type == scType { + sc, ok := fv.Addr().Interface().(*ServerConfig) + if ok { + return sc + } + } + + // Recurse into embedded or nested structs. + if fv.Kind() == reflect.Struct && field.Type != scType { + if sc := findServerConfigReflect(fv); sc != nil { + return sc + } + } + } + + return nil +} + // applyEnvToStruct recursively walks a struct and overrides field values // from environment variables. The env variable name is built from the // prefix and the toml tag: PREFIX_SECTION_FIELD (uppercased). diff --git a/vendor/git.wntrmute.dev/kyle/mcdsl/config/duration.go b/vendor/git.wntrmute.dev/mc/mcdsl/config/duration.go similarity index 100% rename from vendor/git.wntrmute.dev/kyle/mcdsl/config/duration.go rename to vendor/git.wntrmute.dev/mc/mcdsl/config/duration.go diff --git a/vendor/git.wntrmute.dev/kyle/mcdsl/db/db.go b/vendor/git.wntrmute.dev/mc/mcdsl/db/db.go similarity index 100% rename from vendor/git.wntrmute.dev/kyle/mcdsl/db/db.go rename to vendor/git.wntrmute.dev/mc/mcdsl/db/db.go diff --git a/vendor/modules.txt b/vendor/modules.txt index 5d461f3..ef22a29 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,8 +1,8 @@ -# git.wntrmute.dev/kyle/mcdsl v1.0.0 +# git.wntrmute.dev/mc/mcdsl v1.2.0 ## explicit; go 1.25.7 -git.wntrmute.dev/kyle/mcdsl/auth -git.wntrmute.dev/kyle/mcdsl/config -git.wntrmute.dev/kyle/mcdsl/db +git.wntrmute.dev/mc/mcdsl/auth +git.wntrmute.dev/mc/mcdsl/config +git.wntrmute.dev/mc/mcdsl/db # github.com/beorn7/perks v1.0.1 ## explicit; go 1.11 github.com/beorn7/perks/quantile