professionalize repo for public release

- rename ctcloud -> bucketeer everywhere (cmd/bucketeer, binary, compose service)
- group brand assets under assets/ (light/dark logo + UI screenshot)
- move long-form docs under docs/ (ARCHITECTURE, DESIGN, GOAL) and add
  docs/SKILL.md: how an agent queries/audits a running instance and answers
  user questions from the API and PostgreSQL
- README: large logo (light/dark picture) and UI screenshot, repository layout
- .gitignore: /bucketeer, .env, pgdata, build/test artifacts, OS junk
- .dockerignore: keep brand/docs/markdown out of the build context
This commit is contained in:
StasonJatham committed 2026-09-22 17:48:30 +02:00
1 parent 1ce5700cec
commit fac79b6215
18 files changed
+202 -42

No files matched your search

+1 -1
View File
@@ -1,4 +1,4 @@
// Package config loads all ctcloud configuration from environment variables.
// Package config loads all bucketeer configuration from environment variables.
// There are no configuration files at runtime.
package config
+4 -4
View File
@@ -6,12 +6,12 @@ import (
)
func TestLoadDefaults(t *testing.T) {
t.Setenv("DATABASE_URL", "postgres://localhost/ctcloud")
t.Setenv("DATABASE_URL", "postgres://localhost/bucketeer")
c, err := Load()
if err != nil {
t.Fatal(err)
}
if c.DatabaseURL != "postgres://localhost/ctcloud" {
if c.DatabaseURL != "postgres://localhost/bucketeer" {
t.Fatalf("database url = %q", c.DatabaseURL)
}
if c.DNSWorkers != 64 || c.DNSMaxCNAMEdepth != 8 {
@@ -23,7 +23,7 @@ func TestLoadDefaults(t *testing.T) {
}
func TestLoadOverrides(t *testing.T) {
t.Setenv("DATABASE_URL", "postgres://localhost/ctcloud")
t.Setenv("DATABASE_URL", "postgres://localhost/bucketeer")
t.Setenv("DNS_WORKERS", "4")
t.Setenv("ACTIVE_PROBING", "true")
t.Setenv("DB_FLUSH_INTERVAL", "250ms")
@@ -45,7 +45,7 @@ func TestLoadInvalid(t *testing.T) {
if _, err := Load(); err == nil {
t.Fatal("expected error without DATABASE_URL")
}
t.Setenv("DATABASE_URL", "postgres://localhost/ctcloud")
t.Setenv("DATABASE_URL", "postgres://localhost/bucketeer")
t.Setenv("LOG_LEVEL", "verbose")
if _, err := Load(); err == nil {
t.Fatal("expected error for bad LOG_LEVEL")
+2 -2
View File
@@ -131,7 +131,7 @@ func (s *Store) RemoveSTH(ctx context.Context, logID monitor.LogID, sth *cttypes
return err
}
// StoreIssuer and LoadIssuer are no-ops. ctcloud's identifier sink bypasses
// StoreIssuer and LoadIssuer are no-ops. bucketeer's identifier sink bypasses
// certificate-chain retrieval entirely, so the issuer cache is never consulted;
// keeping it empty also satisfies the "no certificate contents in the state
// store" requirement. The Go runtime cache handles any incidental calls.
@@ -170,7 +170,7 @@ func (s *Store) NotifyError(ctx context.Context, ctlog *loglist.Log, notifyErr e
return nil
}
// GetErrors returns the recent CT errors. ctcloud keeps only aggregate counters.
// GetErrors returns the recent CT errors. bucketeer keeps only aggregate counters.
func (s *Store) GetErrors(ctx context.Context, ctlog *loglist.Log, count int) (string, error) {
return "", nil
}
+1 -1
View File
@@ -17,7 +17,7 @@ import (
"tea.karlcom.de/karl/bucketeer/migrations"
)
// Store wraps a pgx pool with the operations ctcloud needs.
// Store wraps a pgx pool with the operations bucketeer needs.
type Store struct {
pool *pgxpool.Pool
metrics *metrics.Metrics