Skip to content

refactor(server): extract TLS / ACME helpers into server/tlscert#484

Closed
fuziontech wants to merge 1 commit intofeature/binary-split-pr3-pure-helpersfrom
feature/binary-split-pr4-querylog-checkpoint
Closed

refactor(server): extract TLS / ACME helpers into server/tlscert#484
fuziontech wants to merge 1 commit intofeature/binary-split-pr3-pure-helpersfrom
feature/binary-split-pr4-querylog-checkpoint

Conversation

@fuziontech
Copy link
Copy Markdown
Member

Summary

  • Step 4 of the binary-split plan, stacked on PR refactor(server): extract auth and sysinfo helpers into pure subpackages #483
  • Extracts the TLS-cert and ACME (HTTP-01, DNS-01) helpers out of server/ into a focused server/tlscert/ subpackage with zero duckdb-go dependency
  • 5 files moved (3 source + 2 test); backward compatibility preserved via type aliases and re-export shims in server/tlscert_aliases.go
  • go list -deps ./server/tlscert | grep duckdb-go returns empty

Files moved

From To
server/certs.go server/tlscert/certs.go
server/acme.go server/tlscert/acme.go
server/acme_dns.go server/tlscert/acme_dns.go
server/acme_test.go server/tlscert/acme_test.go
server/acme_dns_test.go server/tlscert/acme_dns_test.go

Backward-compat shim

server/tlscert_aliases.go keeps existing references compiling unchanged:

type (
    ACMEManager    = tlscert.ACMEManager
    ACMEDNSManager = tlscert.ACMEDNSManager
)
var (
    NewACMEManager        = tlscert.NewACMEManager
    NewACMEDNSManager     = tlscert.NewACMEDNSManager
    EnsureCertificates    = tlscert.EnsureCertificates
    generateSelfSignedCert = tlscert.GenerateSelfSignedCert
)

The previously-private generateSelfSignedCert is now exported as tlscert.GenerateSelfSignedCert because server_test.go calls it directly to generate cert pairs without the EnsureCertificates file-existence check.

Note on scope

PR #4 originally targeted querylog.go + checkpoint.go extraction (those would do more for the goal — they directly link duckdb-go via sql.Open("duckdb", ...)). That hit a chicken-and-egg problem: those constructors take server.Config (which embeds DuckLakeConfig and QueryLogConfig), and the duckdb-bound config types haven't moved to a leaf package on this branch yet. PR #1.5 (a parallel branch) does that work for DuckLakeConfig. Once #1.5 merges and this stack rebases, the querylog/checkpoint extraction lands in a follow-up PR.

Pivoted to TLS/ACME for this PR because it's clean, self-contained, and progresses the goal in the same shape as PR #3.

Test plan

  • go build ./... clean
  • go build -tags kubernetes ./... clean
  • go test -short ./server/tlscert/... ./server/... ./controlplane/... — all green
  • go list -deps ./server/tlscert | grep duckdb-go returns empty

Stack

🤖 Generated with Claude Code

Step 4 of the binary-split plan. Moves the TLS-cert and ACME (HTTP-01,
DNS-01) helpers out of the server/ package root into a focused
server/tlscert subpackage with no dependency on github.com/duckdb/duckdb-go.

Files moved:
  server/certs.go      → server/tlscert/certs.go
  server/acme.go       → server/tlscert/acme.go
  server/acme_dns.go   → server/tlscert/acme_dns.go
  server/acme_test.go  → server/tlscert/acme_test.go
  server/acme_dns_test.go → server/tlscert/acme_dns_test.go

Backward compatibility preserved via type aliases and re-export `var`s in
server/tlscert_aliases.go:

  server.ACMEManager    is now an alias for tlscert.ACMEManager
  server.ACMEDNSManager is now an alias for tlscert.ACMEDNSManager
  server.NewACMEManager / NewACMEDNSManager / EnsureCertificates
    are re-export `var`s pointing at tlscert.X

So existing references in main.go, tests/integration/harness.go,
controlplane/control.go, and the Server struct's acmeManager /
acmeDNSManager fields all compile unchanged. New code should import
server/tlscert directly.

The previously-private generateSelfSignedCert is now exported as
tlscert.GenerateSelfSignedCert because server_test.go calls it
directly to generate a cert pair without going through the
EnsureCertificates file-existence check.

PR #4 originally targeted querylog + checkpoint extraction. That hit
a chicken-and-egg with DuckLakeConfig: those constructors take the
server.Config struct, and the duckdb-bound config types haven't moved
to a leaf package yet on this branch (PR #1.5 does that on a parallel
branch). Pivoted to TLS/ACME as a self-contained alternative — same
shape as PR #3, no cycle issues. The querylog / checkpoint move will
land in PR #5 once the config types are sorted.

Verified:
  - go build ./... clean
  - go build -tags kubernetes ./... clean
  - go test -short ./server/tlscert/... ./server/... ./controlplane/... ./
    all green
  - go list -deps ./server/tlscert | grep duckdb-go is empty

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@fuziontech fuziontech force-pushed the feature/binary-split-pr4-querylog-checkpoint branch from f898455 to c2df749 Compare May 1, 2026 16:04
@fuziontech fuziontech deleted the branch feature/binary-split-pr3-pure-helpers May 1, 2026 16:05
@fuziontech fuziontech closed this May 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant