Breaking: Go import path changed from gosuda.org/portal/v2 to github.com/gosuda/portal/v2.

rabbitprincess committed Mar 7, 2026 at 12:09 UTC d39802ee9104dc3d952a4caac4bfa9393a57d19a
21 files changed +36 -76
.github/workflows/cd.yml
-41
@@ -60,44 +60,3 @@ jobs:
60 labels: ${{ steps.meta.outputs.labels }}
61 cache-from: type=gha,mode=max
62 cache-to: type=gha,mode=max
63 -
64 - deploy:
65 - name: Deploy to `https://portal.iwanhae.kr`
66 - if: github.ref == 'refs/heads/main' && github.event_name == 'push'
67 - runs-on: ubuntu-latest
68 - needs: build-and-push
69 - environment: "kubernetes_iwanhae_kr"
70 - steps:
71 - - name: Checkout code
72 - uses: actions/checkout@v6
73 -
74 - - uses: azure/setup-kubectl@v4
75 -
76 - - name: Prepare Kubernetes context
77 - run: |
78 - kubectl config set-cluster default --server ${{ secrets.KUBERNETES_ENDPOINT }}
79 - kubectl config set-credentials default --token ${{ secrets.KUBERNETES_TOKEN }}
80 - kubectl config set-context default --cluster=default --user=default --namespace=${{ secrets.KUBERNETES_NAMESPACE }}
81 - kubectl config use-context default
82 - kubectl version
83 -
84 - - name: Get Container Image Tag from metadata action
85 - uses: docker/metadata-action@v5
86 - with:
87 - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
88 - tags: type=sha,enable=true,prefix=sha-,suffix=,format=short
89 - id: meta
90 -
91 - - name: Deploy to Kubernetes
92 - run: kubectl set image deployments.apps/portal portal="${{ steps.meta.outputs.tags }}"
93 -
94 - - name: Wait for Deployment to be Ready
95 - run: kubectl rollout status deployment/portal --timeout=1m
96 - timeout-minutes: 1
97 - continue-on-error: true
98 -
99 - - name: Rollback Deployment
100 - if: failure()
101 - run: |-
102 - kubectl rollout undo deployment/portal
103 - exit 1
.golangci.yml
+1 -1
@@ -8,7 +8,7 @@ formatters:
8 enable: [goimports]
9 settings:
10 goimports:
11 - local-prefixes: [github.com/gosuda, gosuda.org]
11 + local-prefixes: [github.com/gosuda/portal/v2]
12
13 linters:
14 default: none
AGENTS.md
+1 -1
@@ -96,7 +96,7 @@ Descriptive docs under `docs/` should match current code paths.
96
97 ## Go Conventions
98
99 -**Imports:** stdlib -> external -> internal (blank-line separated), local prefix `gosuda.org/portal/v2`.
99 +**Imports:** stdlib -> external -> internal (blank-line separated), local prefix `github.com/gosuda/portal/v2`.
100 **Concurrency:** `errgroup.Group` over `WaitGroup`; `errgroup.SetLimit` for bounded work; `context.WithTimeout` over `time.After` in loops; no bare `go func()` without owned lifecycle.
101 **I/O:** prefer directory-scoped operations when touching filesystem trees.
102
cmd/demo-app/main.go
+2 -2
@@ -20,8 +20,8 @@ import (
20 "github.com/rs/zerolog/log"
21 "golang.org/x/net/websocket"
22
23 - "gosuda.org/portal/v2/sdk"
24 - "gosuda.org/portal/v2/types"
23 + "github.com/gosuda/portal/v2/sdk"
24 + "github.com/gosuda/portal/v2/types"
25 )
26
27 //go:embed static
cmd/portal-tunnel/main.go
+2 -2
@@ -15,8 +15,8 @@ import (
15 "github.com/rs/zerolog"
16 "github.com/rs/zerolog/log"
17
18 - "gosuda.org/portal/v2/sdk"
19 - "gosuda.org/portal/v2/types"
18 + "github.com/gosuda/portal/v2/sdk"
19 + "github.com/gosuda/portal/v2/types"
20 )
21
22 var (
cmd/portal-tunnel/relays.go
+1 -1
@@ -14,7 +14,7 @@ import (
14
15 "github.com/rs/zerolog/log"
16
17 - "gosuda.org/portal/v2/sdk"
17 + "github.com/gosuda/portal/v2/sdk"
18 )
19
20 type relayRuntime struct {
cmd/relay-server/frontend.go
+2 -2
@@ -11,8 +11,8 @@ import (
11 "strings"
12 "sync"
13
14 - "gosuda.org/portal/v2/portal"
15 - "gosuda.org/portal/v2/portal/admin"
14 + "github.com/gosuda/portal/v2/portal"
15 + "github.com/gosuda/portal/v2/portal/admin"
16 )
17
18 type readDirFileFS interface {
cmd/relay-server/serve.go
+6 -6
@@ -11,12 +11,12 @@ import (
11
12 "github.com/rs/zerolog/log"
13
14 - "gosuda.org/portal/v2/portal"
15 - "gosuda.org/portal/v2/portal/acme"
16 - "gosuda.org/portal/v2/portal/admin"
17 - "gosuda.org/portal/v2/portal/keyless"
18 - "gosuda.org/portal/v2/portal/policy"
19 - "gosuda.org/portal/v2/types"
14 + "github.com/gosuda/portal/v2/portal"
15 + "github.com/gosuda/portal/v2/portal/acme"
16 + "github.com/gosuda/portal/v2/portal/admin"
17 + "github.com/gosuda/portal/v2/portal/keyless"
18 + "github.com/gosuda/portal/v2/portal/policy"
19 + "github.com/gosuda/portal/v2/types"
20 )
21
22 func runServer(cfg relayServerConfig) error {
go.mod
+1 -1
@@ -1,4 +1,4 @@
1 -module gosuda.org/portal/v2
1 +module github.com/gosuda/portal/v2
2
3 go 1.26.1
4
portal/acme/provider.go
+2 -2
@@ -7,8 +7,8 @@ import (
7
8 "github.com/go-acme/lego/v4/challenge"
9
10 - "gosuda.org/portal/v2/portal/acme/cloudflare"
11 - "gosuda.org/portal/v2/portal/acme/route53"
10 + "github.com/gosuda/portal/v2/portal/acme/cloudflare"
11 + "github.com/gosuda/portal/v2/portal/acme/route53"
12 )
13
14 const (
portal/admin/handler.go
+3 -3
@@ -7,9 +7,9 @@ import (
7 "net/http"
8 "strings"
9
10 - "gosuda.org/portal/v2/portal"
11 - "gosuda.org/portal/v2/portal/policy"
12 - "gosuda.org/portal/v2/types"
10 + "github.com/gosuda/portal/v2/portal"
11 + "github.com/gosuda/portal/v2/portal/policy"
12 + "github.com/gosuda/portal/v2/types"
13 )
14
15 const cookieName = "portal_admin"
portal/admin/handler_test.go
+2 -2
@@ -8,8 +8,8 @@ import (
8 "path/filepath"
9 "testing"
10
11 - "gosuda.org/portal/v2/portal/policy"
12 - "gosuda.org/portal/v2/types"
11 + "github.com/gosuda/portal/v2/portal/policy"
12 + "github.com/gosuda/portal/v2/types"
13 )
14
15 func TestLoginAndProtectedActions(t *testing.T) {
portal/admin/rows.go
+1 -1
@@ -6,7 +6,7 @@ import (
6 "strings"
7 "time"
8
9 - "gosuda.org/portal/v2/portal"
9 + "github.com/gosuda/portal/v2/portal"
10 )
11
12 const staleLeaseHideWindow = 3 * time.Minute
portal/admin/state.go
+1 -1
@@ -6,7 +6,7 @@ import (
6 "os"
7 "path/filepath"
8
9 - "gosuda.org/portal/v2/portal/policy"
9 + "github.com/gosuda/portal/v2/portal/policy"
10 )
11
12 type stateStore struct {
portal/admin/state_test.go
+1 -1
@@ -5,7 +5,7 @@ import (
5 "path/filepath"
6 "testing"
7
8 - "gosuda.org/portal/v2/portal/policy"
8 + "github.com/gosuda/portal/v2/portal/policy"
9 )
10
11 func TestStateStoreRoundTrip(t *testing.T) {
portal/broker.go
+1 -1
@@ -10,7 +10,7 @@ import (
10
11 "github.com/rs/zerolog/log"
12
13 - "gosuda.org/portal/v2/types"
13 + "github.com/gosuda/portal/v2/types"
14 )
15
16 var (
portal/broker_test.go
+1 -1
@@ -7,7 +7,7 @@ import (
7 "testing"
8 "time"
9
10 - "gosuda.org/portal/v2/types"
10 + "github.com/gosuda/portal/v2/types"
11 )
12
13 func TestLeaseBrokerClaimActivatesTLSMarker(t *testing.T) {
portal/helpers.go
+1 -1
@@ -9,7 +9,7 @@ import (
9 "strings"
10 "time"
11
12 - "gosuda.org/portal/v2/types"
12 + "github.com/gosuda/portal/v2/types"
13 )
14
15 const (
portal/server.go
+4 -3
@@ -18,9 +18,10 @@ import (
18 "golang.org/x/sync/errgroup"
19
20 "github.com/gosuda/keyless_tls/relay/l4"
21 - "gosuda.org/portal/v2/portal/keyless"
22 - "gosuda.org/portal/v2/portal/policy"
23 - "gosuda.org/portal/v2/types"
21 +
22 + "github.com/gosuda/portal/v2/portal/keyless"
23 + "github.com/gosuda/portal/v2/portal/policy"
24 + "github.com/gosuda/portal/v2/types"
25 )
26
27 type ServerConfig struct {
sdk/client.go
+2 -2
@@ -18,8 +18,8 @@ import (
18 "strings"
19 "time"
20
21 - "gosuda.org/portal/v2/portal/keyless"
22 - "gosuda.org/portal/v2/types"
21 + "github.com/gosuda/portal/v2/portal/keyless"
22 + "github.com/gosuda/portal/v2/types"
23 )
24
25 type ClientConfig struct {
sdk/listener.go
+1 -1
@@ -10,7 +10,7 @@ import (
10 "sync"
11 "time"
12
13 - "gosuda.org/portal/v2/types"
13 + "github.com/gosuda/portal/v2/types"
14 )
15
16 type ListenRequest struct {