feat: rename project from Fonu to Havline
CI / verify (push) Canceled after 0s

This commit is contained in:
2026-10-01 16:54:35 +08:00
parent c377405696
commit 8fa5d922ac
250 changed files with 6724 additions and 5070 deletions
+1 -1
View File
@@ -228,7 +228,7 @@ func (a *CloudflareAPI) EnsureCNAME(ctx context.Context, zoneID, hostname, targe
return created.ID, nil
}
// DeleteDNSRecord 删除一条明确由 Fonu 接管的 DNS 记录。
// DeleteDNSRecord 删除一条明确由 Havline 接管的 DNS 记录。
func (a *CloudflareAPI) DeleteDNSRecord(ctx context.Context, zoneID, recordID string) error {
return a.do(ctx, http.MethodDelete, "/zones/"+zoneID+"/dns_records/"+recordID, nil, nil)
}
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"sort"
"strings"
"github.com/fonu/fonu/internal/proxy"
"github.com/havline/havline/internal/proxy"
)
type tokenPayload struct {
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"strings"
"testing"
"github.com/fonu/fonu/internal/proxy"
"github.com/havline/havline/internal/proxy"
)
func TestDecodeToken(t *testing.T) {
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"testing"
"time"
"github.com/fonu/fonu/internal/config"
"github.com/fonu/fonu/internal/db"
"github.com/havline/havline/internal/config"
"github.com/havline/havline/internal/db"
)
func TestComputeHealthUptimeExcludesUnknown(t *testing.T) {
+1 -1
View File
@@ -15,7 +15,7 @@ import (
"sync"
"time"
"github.com/fonu/fonu/internal/config"
"github.com/havline/havline/internal/config"
)
var metricsPortPattern = regexp.MustCompile(`(?i)starting metrics server on 127\.0\.0\.1:(\d+)/metrics`)
+1 -1
View File
@@ -4,7 +4,7 @@ import "time"
// Mode 是隧道的托管模式;不同模式决定启动参数与规则生效侧。
const (
ModeTokenLocal = "token-local" // token 解码成本地凭据,规则由 Fonu 生成
ModeTokenLocal = "token-local" // token 解码成本地凭据,规则由 Havline 生成
ModeTokenRemote = "token-remote" // 直接用 --token 启动,规则由 Cloudflare 面板管理
ModeAccountLocal = "account-local" // cert.pem + credentials,规则本地生成,可云端同步
)
+1 -1
View File
@@ -259,7 +259,7 @@ func (s *Service) dnsCheck(ctx context.Context, tunnel Tunnel) DiagnosticCheck {
return DiagnosticCheck{Name: "DNS 记录", Status: "error", Message: err.Error()}
}
if len(records) == 0 {
return DiagnosticCheck{Name: "DNS 记录", Status: "warning", Message: "没有 Fonu 接管的 DNS 记录"}
return DiagnosticCheck{Name: "DNS 记录", Status: "warning", Message: "没有 Havline 接管的 DNS 记录"}
}
return DiagnosticCheck{Name: "DNS 记录", Status: "ok", Message: fmt.Sprintf("已接管 %d 条记录", len(records))}
}
+2 -2
View File
@@ -6,8 +6,8 @@ import (
"os"
"strings"
"github.com/fonu/fonu/internal/fsutil"
"github.com/fonu/fonu/internal/validate"
"github.com/havline/havline/internal/fsutil"
"github.com/havline/havline/internal/validate"
)
// RouteView 是配置页展示的一条 ingress 路由。
+5 -5
View File
@@ -8,10 +8,10 @@ import (
"path/filepath"
"strings"
"github.com/fonu/fonu/internal/config"
"github.com/fonu/fonu/internal/fsutil"
"github.com/fonu/fonu/internal/proxy"
"github.com/fonu/fonu/internal/secret"
"github.com/havline/havline/internal/config"
"github.com/havline/havline/internal/fsutil"
"github.com/havline/havline/internal/proxy"
"github.com/havline/havline/internal/secret"
)
const defaultOriginService = "http://127.0.0.1:80"
@@ -525,7 +525,7 @@ func (s *Service) restartIfRunning(ctx context.Context, id int64) error {
return nil
}
// syncTunnelDNS 让 Cloudflare DNS 与目标 hostname 保持一致,并只清理 Fonu 自己接管的记录。
// syncTunnelDNS 让 Cloudflare DNS 与目标 hostname 保持一致,并只清理 Havline 自己接管的记录。
func (s *Service) syncTunnelDNS(ctx context.Context, api *CloudflareAPI, localTunnelID int64, remoteTunnelID string, hostnames []string) error {
desired := make(map[string]struct{}, len(hostnames))
for _, raw := range hostnames {
+3 -3
View File
@@ -8,9 +8,9 @@ import (
"strings"
"testing"
"github.com/fonu/fonu/internal/config"
"github.com/fonu/fonu/internal/db"
"github.com/fonu/fonu/internal/secret"
"github.com/havline/havline/internal/config"
"github.com/havline/havline/internal/db"
"github.com/havline/havline/internal/secret"
)
func TestAppSettingsAccountAndAPIToken(t *testing.T) {
+1 -1
View File
@@ -112,7 +112,7 @@ type settingsRow struct {
Network NetworkSettings
}
// DNSRecord 是 Fonu 自动创建或接管的 Cloudflare DNS 记录。
// DNSRecord 是 Havline 自动创建或接管的 Cloudflare DNS 记录。
type DNSRecord struct {
ID int64 `json:"id"`
TunnelID int64 `json:"tunnel_id"`