Always rebuild the gateway in make build; migrate legacy providers by activation
This commit is contained in:
1 parent
f3bf1472e7
commit
bae24cc439
3 files changed
+45
-4
No files matched your search
@@ -8,9 +8,7 @@ endif
|
|||||||
|
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
build: $(GATEWAY_BIN)
|
build:
|
||||||
|
|
||||||
$(GATEWAY_BIN):
|
|
||||||
go build -o $(GATEWAY_BIN) ./cmd/gateway
|
go build -o $(GATEWAY_BIN) ./cmd/gateway
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
|||||||
@@ -174,10 +174,15 @@ func (c *Config) normalize() {
|
|||||||
case TargetClaude, TargetCodex:
|
case TargetClaude, TargetCodex:
|
||||||
default:
|
default:
|
||||||
// Providers created before targets existed belong to the
|
// Providers created before targets existed belong to the
|
||||||
// Claude page.
|
// Claude page, unless they were only ever activated for
|
||||||
|
// Codex.
|
||||||
|
if c.Providers[i].EnabledForCodex && !c.Providers[i].EnabledForClaude {
|
||||||
|
c.Providers[i].Target = TargetCodex
|
||||||
|
} else {
|
||||||
c.Providers[i].Target = TargetClaude
|
c.Providers[i].Target = TargetClaude
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
switch c.Gateway.PortMode {
|
switch c.Gateway.PortMode {
|
||||||
case PortModeAuto, PortModeFixed:
|
case PortModeAuto, PortModeFixed:
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
@@ -221,6 +223,42 @@ func TestUpdateProviderKeepsEnabledFlags(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProviderTargetMigration(t *testing.T) {
|
||||||
|
home := t.TempDir()
|
||||||
|
t.Setenv("CROSSRELAY_HOME", home)
|
||||||
|
legacy := `{
|
||||||
|
"version": 1,
|
||||||
|
"relay_token": "crl_legacy",
|
||||||
|
"providers": [
|
||||||
|
{"id":"p_1","name":"claude-side","base_url":"https://a.example.com/v1","api_key":"sk","models":{"default":"m"},"enabled_for_claude":true,"created_at":"2026-10-01T00:00:00Z"},
|
||||||
|
{"id":"p_2","name":"codex-side","base_url":"https://b.example.com/v1","api_key":"sk","models":{"default":"m"},"enabled_for_codex":true,"created_at":"2026-10-01T00:00:00Z"},
|
||||||
|
{"id":"p_3","name":"never-active","base_url":"https://c.example.com/v1","api_key":"sk","models":{"default":"m"},"created_at":"2026-10-01T00:00:00Z"}
|
||||||
|
],
|
||||||
|
"gateway": {"port_mode": "auto"},
|
||||||
|
"language": "zh-CN"
|
||||||
|
}`
|
||||||
|
if err := os.WriteFile(filepath.Join(home, "config.json"), []byte(legacy), 0o600); err != nil {
|
||||||
|
t.Fatalf("write legacy config: %v", err)
|
||||||
|
}
|
||||||
|
store, err := Load()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Load: %v", err)
|
||||||
|
}
|
||||||
|
targets := map[string]string{}
|
||||||
|
for _, p := range store.Config().Providers {
|
||||||
|
targets[p.Name] = p.Target
|
||||||
|
}
|
||||||
|
if targets["claude-side"] != TargetClaude {
|
||||||
|
t.Errorf("claude-side target = %q, want claude", targets["claude-side"])
|
||||||
|
}
|
||||||
|
if targets["codex-side"] != TargetCodex {
|
||||||
|
t.Errorf("codex-side target = %q, want codex", targets["codex-side"])
|
||||||
|
}
|
||||||
|
if targets["never-active"] != TargetClaude {
|
||||||
|
t.Errorf("never-active target = %q, want claude", targets["never-active"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestProviderTargetDefaultsAndValidation(t *testing.T) {
|
func TestProviderTargetDefaultsAndValidation(t *testing.T) {
|
||||||
t.Setenv("CROSSRELAY_HOME", t.TempDir())
|
t.Setenv("CROSSRELAY_HOME", t.TempDir())
|
||||||
store, err := Load()
|
store, err := Load()
|
||||||
|
|||||||
Reference in new issue
Block a user