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 {