From 430e49ac682733eb446bef8e6f244dcc01875734 Mon Sep 17 00:00:00 2001 From: Jihoon Jang <32415680+WhiteKiwi@users.noreply.github.com> Date: Tue, 20 Oct 2026 12:05:57 +0900 Subject: [PATCH 1/3] feat: prepare the pushman.io API endpoint --- README.md | 9 ++++++++- cmd/pushman/main_test.go | 32 ++++++++++++++++++++++++++++++++ internal/client/client.go | 2 +- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d1297e1..c4f59b0 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,14 @@ The CLI source is MIT licensed. The hosted Pushman service, iPhone app, monthly ## Configuration -The production API is `https://api.pushman.whitekiwi.link/v1`. For local development, an explicit loopback override is supported: +The next release targets `https://api.pushman.io/v1`. Service cutover and client +publication are still pending; existing releases use +`https://api.pushman.whitekiwi.link/v1` until updated. A build using the new endpoint +requires `pushman login` again. Credentials are scoped to the API base: login and +logout at the new endpoint preserve the old endpoint's keyring entry. There is no +automatic credential copy or fallback to the previous API. + +For local development, an explicit loopback override is supported: ```sh make pdev ARGS=status diff --git a/cmd/pushman/main_test.go b/cmd/pushman/main_test.go index a3a6ff1..8dece51 100644 --- a/cmd/pushman/main_test.go +++ b/cmd/pushman/main_test.go @@ -1,8 +1,13 @@ package main import ( + "errors" "runtime/debug" "testing" + + pushclient "github.com/pushmanhq/pushman-cli/internal/client" + "github.com/pushmanhq/pushman-cli/internal/credential" + keyring "github.com/zalando/go-keyring" ) func TestResolveVersionInfoUsesModuleAndVCSMetadata(t *testing.T) { @@ -54,3 +59,30 @@ func TestCredentialServiceNameSeparatesDevelopmentCredentials(t *testing.T) { t.Fatalf("development credential service = %q", development) } } + +func TestMigratedEndpointRequiresAnIndependentKeyringLogin(t *testing.T) { + keyring.MockInit() + old := credential.NewKeyring(credentialServiceName("https://api.pushman.whitekiwi.link/v1", "")) + target := credential.NewKeyring(credentialServiceName(pushclient.DefaultBaseURL, "")) + if err := old.Set("synthetic-old-endpoint-token"); err != nil { + t.Fatal(err) + } + if _, err := target.Get(); !errors.Is(err, credential.ErrNotFound) { + t.Fatal("new endpoint reused an existing endpoint credential") + } + if err := target.Set("synthetic-new-endpoint-token"); err != nil { + t.Fatal(err) + } + if token, err := old.Get(); err != nil || token != "synthetic-old-endpoint-token" { + t.Fatal("new login changed the original endpoint credential") + } + if err := target.Delete(); err != nil { + t.Fatal(err) + } + if _, err := target.Get(); !errors.Is(err, credential.ErrNotFound) { + t.Fatal("new endpoint logout did not clear its own credential") + } + if token, err := old.Get(); err != nil || token != "synthetic-old-endpoint-token" { + t.Fatal("new endpoint logout changed the original endpoint credential") + } +} diff --git a/internal/client/client.go b/internal/client/client.go index 2763435..273bd27 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -17,7 +17,7 @@ import ( "github.com/pushmanhq/pushman-cli/internal/credential" ) -const DefaultBaseURL = "https://api.pushman.whitekiwi.link/v1" +const DefaultBaseURL = "https://api.pushman.io/v1" type WaitFunc func(context.Context, time.Duration) error From 82c2bafa7a859fe6496d1d1c14f3c29a6d4e3e7b Mon Sep 17 00:00:00 2001 From: Jihoon Jang <32415680+WhiteKiwi@users.noreply.github.com> Date: Wed, 21 Oct 2026 08:41:17 +0900 Subject: [PATCH 2/3] docs: distinguish live API cutover from client publication --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c4f59b0..05621bb 100644 --- a/README.md +++ b/README.md @@ -143,10 +143,11 @@ The CLI source is MIT licensed. The hosted Pushman service, iPhone app, monthly ## Configuration -The next release targets `https://api.pushman.io/v1`. Service cutover and client -publication are still pending; existing releases use -`https://api.pushman.whitekiwi.link/v1` until updated. A build using the new endpoint -requires `pushman login` again. Credentials are scoped to the API base: login and +The source default targets the live service at `https://api.pushman.io/v1`. +Client publication remains separate; existing releases default to +`https://api.pushman.whitekiwi.link/v1`. Set `PUSHMAN_API_URL=https://api.pushman.io/v1` +in each CLI and local MCP process until using a release with the updated default. +The new endpoint requires `pushman login` again. Credentials are scoped to the API base: login and logout at the new endpoint preserve the old endpoint's keyring entry. There is no automatic credential copy or fallback to the previous API. From 6e7a6b6264754c00848f8a761eb6923fe68b53dc Mon Sep 17 00:00:00 2001 From: Jihoon Jang <32415680+WhiteKiwi@users.noreply.github.com> Date: Wed, 21 Oct 2026 08:44:33 +0900 Subject: [PATCH 3/3] docs: sync the accepted public API server origin snapshot --- api/openapi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/openapi.yaml b/api/openapi.yaml index 5b2387b..fa4d003 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -7,7 +7,7 @@ info: name: MIT identifier: MIT servers: - - url: https://api.pushman.whitekiwi.link/v1 + - url: https://api.pushman.io/v1 description: Production API origin. security: - bearerAuth: []