51 Commits
Author SHA1 Message Date
Hanzo Dev 5d49337743 fix(s3api): bound gateway startup filer reads so an unresponsive filer can't hang :8333
Red flagged NewCircuitBreaker's unbounded context.Background() filer read as a latent
CrashLoopBackOff: on a K8s cold/co-restart the s3 gateway dials the filer Service (TCP
accepted by kube endpoints) before the filer answers RPCs, the unbounded read blocks
~4min, :8333 never binds, liveness kills the pod. Confirmed via goroutine dump; the fix
is a bounded context (zap-proto muxConn.CallContext honors ctx.Done()).

The startup path has THREE reads of this anti-pattern, all of which block :8333 — fixing
only the circuit breaker leaves the gateway hanging at the first one:
- command/s3.go GetFilerConfiguration: REQUIRED read, already in a for{}+Sleep(1s) retry
  loop, but the unbounded ctx defeats the retry (first call hangs forever). Bound each
  attempt (10s) so the retry loop actually retries until the filer answers.
- s3api/s3api_circuit_breaker.go: OPTIONAL read. Bound (10s); the existing fail-open path
  (circuit breaker disabled) runs on deadline.
- s3api/bucket_metadata.go BucketRegistry.init: OPTIONAL warm-up whose error path was
  glog.Fatal (itself a CrashLoop trigger). Bound (10s) + warn-and-proceed instead of
  Fatal; the registry warms lazily via GetBucketMetadata -> LoadBucketMetadataFromFiler.

Empirically verified on a local single-node cluster: the bounded ctx is honored
(muxConn.CallContext returns "context deadline exceeded" at 10s), :8333 binds (~10s vs an
indefinite hang before), and a SigV4 create-bucket / PUT / GET (byte-identical) / DELETE
round-trip succeeds. GOWORK=off go build ./s3/... = 0; s3api bucket registry/metadata
tests pass. Keeps the fail-open intent; only bounds the wait.
2026-07-17 23:08:44 -07:00
Hanzo Dev cecd33914f chore(deps): go mod tidy — drop two unused indirect deps, mark sqlite indirect
go mod tidy (GOWORK=off) removes go.mod/go.sum entries no longer referenced by
any package, under any build tag:
- github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 — unimported (grep all .go = 0)
- github.com/luxfi/container v0.0.4 — unimported (grep all .go = 0)
- modernc.org/sqlite marked // indirect (pulled transitively via hanzoai/sqlite;
  no direct import remains)

Default build and full-tag build (elastic gocdk sqlite ydb tarantool tikv rclone)
both green. go.sum: the checksums for the two dropped modules are removed.

NOTE: github.com/hanzos3/go-sdk is deliberately NOT dropped — `go mod why` shows
it is a required transitive dep of github.com/luxfi/zapdb (the filer zapdb
metadata store) via s3/filer/luxdb; tidy keeps it.
2026-07-17 21:56:49 -07:00
Hanzo Dev 714db20c0f chore(cruft): drop committed macOS build artifact; correct stale gRPC status in LLM.md
- remove stress: a 32MB Mach-O arm64 (macOS) binary committed to the repo root,
  unreferenced by any build/CI/script — an accidentally-committed build artifact.
- LLM.md: the gRPC-rip section listed volume RPC, raft, cert hot-reload and the
  core dial/server as still grpc-bound; all were since ported to ZAP. The main
  module now has zero google.golang.org/grpc imports (grep -rl google.golang.org/grpc s3/ = 0).
  Record the true residual: google.golang.org/grpc // indirect is pulled only by
  the optional Google Cloud client family (kms/pubsub/storage apiv*), which are
  grpc-transport SDKs never dialed in a no-GCP deployment; zeroing it is a
  CTO-gated GCP-surface rip, not an RPC-transport change.
2026-07-17 21:16:55 -07:00
Hanzo Dev f4ec1896c3 chore(notice): pin SeaweedFS provenance and deviations; sweep product branding 2026-07-13 16:05:26 -07:00
037e7efdb4 fix(sqlite): use hanzoai/sqlite (the one driver), drop direct modernc import (#15)
* fix(sqlite): use hanzoai/sqlite (the one driver), drop direct modernc import

* fix(sqlite): use hanzoai/sqlite (the one driver), drop direct modernc import

---------

Co-authored-by: Hanzo AI <ai@hanzo.ai>
2026-07-10 02:23:01 -07:00
596c633aaf ci: self-contained multi-arch docker-build (fix 'workflow was not found') (#14)
The public s3 repo called a reusable workflow in the PRIVATE hanzoai/.github repo
(uses: hanzoai/.github/.github/workflows/docker-build.yml@main). GitHub forbids a
public repo from calling a private repo's reusable workflow — it resolves as
'workflow was not found', so every docker-build failed at 0s (not a runner or YAML
issue; the shared file and org access were both fine).

Replace with a self-contained build that:
- pushes to ghcr.io/hanzoai/s3 with GITHUB_TOKEN (no custom registry secret, no
  cross-repo reusable dependency),
- builds linux/amd64 + linux/arm64 (was amd64-only) via buildx/QEMU — the Dockerfile
  is pure-Go (CGO_ENABLED=0) so it cross-builds cleanly,
- runs on the self-hosted amd64 runner (evo).

Co-authored-by: Hanzo AI <ai@hanzo.ai>
2026-06-26 14:31:56 -07:00
b70cf438ac deps: drop seaweedfs-org deps — fork goexif + go-fuse to hanzoai (#13)
* deps: drop seaweedfs-org deps — fork goexif + go-fuse to hanzoai

Replaces the last external github.com/seaweedfs/* import paths with Hanzo forks:
- github.com/seaweedfs/goexif v1.0.3 -> github.com/hanzoai/goexif v1.0.4
- github.com/seaweedfs/go-fuse/v2 v2.9.3 -> github.com/hanzoai/go-fuse/v2 v2.9.4
46 .go files repointed (1 goexif + 45 go-fuse sites); go.mod/go.sum updated; LLM.md
notes no seaweedfs-org import paths remain. The forks are full module-path renames
(zero seaweedfs residue), Apache-2.0 attribution retained in each fork's LICENSE.

Verified: go build ./s3 -> exit 0, binary runs (Hanzo S3 4.34). go mod tidy clean
(GOPRIVATE=github.com/hanzoai/*). With this, 'seaweedfs' is gone from s3's deps.

* docs: correct fork license identities (red review)

goexif is BSD-2-Clause (Robert Carlsen), go-fuse is BSD-3-Clause (Go-FUSE
Authors) — not Apache-2.0, and neither fork has a NOTICE. The s3 codebase's
own Apache-2.0 + NOTICE (crediting SeaweedFS) is separate.

---------

Co-authored-by: Hanzo AI <ai@hanzo.ai>
2026-06-26 13:31:21 -07:00
3cb9b321c8 fix: correct seaweedfs->hanzo rename artifacts + drop legacy minio + datastore cross-link (#12)
* fix: correct crude seaweedfs->hanzo rename artifacts + drop legacy minio

- s3 update: GitHubLatestRelease("hanzo","hanzo") -> ("hanzoai","s3"); the
  blunt rename pointed updates at a nonexistent repo (help text already said
  hanzoai/s3). Now 's3 update' pulls real Hanzo S3 releases. (go build clean.)
- LLM.md: fix upstream attribution (was github.com/hanzo/hanzo) to credit the real
  SeaweedFS upstream, matching NOTICE; correct 'renamed from weed'; note goexif +
  go-fuse are the only external deps still under the seaweedfs org.
- LLM.md: add S-Chain section cross-linking datastore (OLAP) + the S-Chain storage
  role (reverse of hanzoai/datastore's link), proven-vs-direction scoped.
- drop legacy docker/compose/local-minio-gateway-compose.yml (unreferenced MinIO-
  gateway demo).

main is already ZAP-native + internally renamed; these are residual-artifact fixes.

* fix: correct seaweedfs->hanzo rename artifacts + datastore cross-link

- s3 update: GitHubLatestRelease("hanzo","hanzo") -> ("hanzoai","s3") so updates
  pull real Hanzo S3 releases (help text already said hanzoai/s3). go build clean.
- LLM.md: correct upstream attribution to SeaweedFS (matches NOTICE); note goexif +
  go-fuse are the only remaining seaweedfs-org deps; add S-Chain datastore cross-link.

---------

Co-authored-by: Hanzo AI <ai@hanzo.ai>
2026-06-26 12:49:52 -07:00
Hanzo AI f5dbe1b59b deps: bump Go to 1.26.4 across go.mod, Dockerfiles, GH Actions
Workspace-wide sync. luxfi/node already shipped on 1.26.4 in v1.30.6
(commit 121aca1fa9); this is the cross-repo catch-up.
2026-06-07 12:12:41 -07:00
Hanzo AI 4477fab42f deps: bump github.com/zap-proto/go to v1.0.0-rc1
Canonical bootstrap (commit f123708 series). Replaces the v0.2.x
prototype lineage with the v1.x runtime.
2026-06-07 11:37:00 -07:00
Hanzo AI 1e56aacb12 Revert "chore: gitignore artifacts + storage updates"
This reverts commit d3c5bbdbd0.
2026-06-01 15:40:46 -07:00
Hanzo AI d3c5bbdbd0 chore: gitignore artifacts + storage updates 2026-06-01 15:40:17 -07:00
Hanzo AI 171f8cc92a docs(llm): explicit Upstream attribution line
LICENSE-attested or repo-attested upstream is now called out at the
top of LLM.md alongside the project description, so downstream
audits (universe/docs/PRODUCTS.md) can rely on a single canonical
location for the OSS lineage statement.
2026-05-18 21:35:25 -07:00
Hanzo AI e2e6266f67 client: harden ObjectStore — PresignOpts conditions, typed errors, cursor pagination 2026-05-13 02:18:06 -07:00
Hanzo AI f5e4ac7dee client: declare canonical ObjectStore interface 2026-05-13 01:16:06 -07:00
Hanzo AI bb1b8491f5 go.mod: bump go directive to 1.26.3 (security advisory) 2026-05-12 21:26:50 -07:00
Hanzo AI 08fbf3bec7 ci: add id-token: write to caller permissions
Required for hanzoai/.github/.github/workflows/docker-build.yml@main —
without it the workflow_call dies as startup_failure with no jobs
dispatched. Caller permissions are a CEILING.
2026-05-07 09:11:49 -07:00
Hanzo AI 409a4c8390 deploy: pin :latest → semver across image refs
Replaces all ghcr.io/hanzoai/<svc>:latest pins with the latest published
semver tag for each service. Per CLAUDE.md auto-bump policy: mutable
branch tags (:latest, :main, :dev) are deprecated for cluster pins —
only immutable semver permitted.

Bulk update across services with published v* tags. Services without a
published semver remain on :latest until their release pipeline cuts a
v* tag.
2026-05-07 08:34:07 -07:00
Hanzo AI 07977ad612 chore: sync latest 2026-04-09 18:44:00 -07:00
Hanzo AI bad5af1535 feat: /v1/s3/* management routes + ZAP transport 2026-04-09 18:32:20 -07:00
Hanzo AI d0f2d9321b chore: update stdlib dependencies 2026-04-01 15:10:59 -07:00
Hanzo AI 95b5dd78c6 chore: symlink AGENTS.md and CLAUDE.md to LLM.md
Canonical project context lives in LLM.md. Symlinks ensure
agentic coding tools (Claude Code, Cursor, etc.) find context
automatically regardless of which filename they look for.
2026-04-01 14:14:24 -07:00
Hanzo Dev a6f60e67b3 infra: replace nginx references with hanzoai/ingress
Update compose volume mounts and comments to reference hanzoai/ingress
instead of nginx for the MinIO load balancer proxy.
2026-03-25 12:12:04 -07:00
Hanzo Dev 0190a78c40 chore: rename docker-compose.yaml to compose.yml in docs 2026-03-25 04:12:59 -07:00
Hanzo Dev e0f8ec5681 ci: enable multi-arch builds (amd64 + arm64 native runners) 2026-03-24 22:47:20 -07:00
Hanzo Dev f7d0b343eb Migrate Docker build to shared reusable workflow
Replace custom docker/build-push-action steps with
hanzoai/.github/.github/workflows/docker-build.yml@main.
Keeps binaries job for release builds unchanged.
Drops hanzoai/space dual-image (use hanzoai/s3 only).

amd64-only until arm64 runner is restored.
2026-03-24 22:32:33 -07:00
Hanzo Dev cbb2f4785b ci: add multi-env Docker image tagging for test/dev branches
Trigger builds on main, test, dev branches. Add type=ref,event=branch
and type=ref,event=pr to metadata-action tags so branch names map to
image tags automatically.
2026-03-24 20:55:28 -07:00
Hanzo Dev eb0d454b86 refactor: consolidate Dockerfiles into single production Dockerfile
Replaced 7 Dockerfiles with one. Dockerfile.hanzo (our from-source
production build using golang:1.26-bookworm) becomes the canonical
Dockerfile. Deleted upstream MinIO cruft: Dockerfile.cicd (minio/minio:edge
wrapper), Dockerfile.hotfix and Dockerfile.release (download pre-built
binaries from dl.min.io), Dockerfile.release.old_cpu (Go 1.24, stale),
Dockerfile.scratch (bare binary copy).

Updated publish.yml to reference Dockerfile instead of Dockerfile.hanzo.
Removed docker-hotfix Makefile targets that referenced deleted files.
2026-03-24 20:50:15 -07:00
Hanzo Dev 59c79c4b5a fix: bump Go to 1.26 in Dockerfile.hotfix and Dockerfile.release (were 1.24) 2026-03-24 19:17:17 -07:00
Hanzo Dev 37c901af29 feat: rename X-Hanzo-S3-* headers to X-S3-*
Drop vendor-specific prefix from internal S3 storage headers.
30 files across cmd/ and internal/ — all header constants,
metadata keys, replication headers, and test fixtures updated.
2026-03-24 18:46:59 -07:00
Hanzo Dev 1fef0529bb chore: bump Go 1.26.1 2026-03-22 14:28:22 -07:00
Hanzo Dev ce5f965e2e ci: semantic version tags for Docker images, remove RELEASE.* trigger 2026-03-14 14:07:26 -07:00
Hanzo Dev 4e66a4589d rebrand: remove MINIO_ env legacy support, upgrade console
- Remove EnvLegacyPrefix ("MINIO_") from config — only S3_ supported
- Remove MINIO_ROOT_USER/PASSWORD backward compat from credential loading
- Rename internal config variables: minioConfig* → s3Config*
- Update console to v1.7.7-hanzo.3 with OpenID login detection and
  S3-renamed types (GlobalS3Config, S3Client, S3Admin)
2026-03-14 03:26:58 -07:00
Hanzo Dev 2d2a14a199 ci: upgrade Go from 1.24 to 1.26 across all workflows and Dockerfile
- Update Dockerfile.hanzo build stage to golang:1.26-bookworm
- Update go.mod toolchain to go1.26.1
- Update all 12 CI workflow files to use go-version 1.26.x
2026-03-13 20:07:24 -07:00
Hanzo Dev d9ea56128a rebrand: complete MinIO → Hanzo S3 rename across entire codebase
- Change s3ReservedBucket constant from "minio" to "s3" so health
  endpoints register at /s3/health/* instead of /minio/health/*
- Update Prometheus metrics namespace from "minio" to "s3"
- Update API response DisplayName from "minio" to "s3"
- Update release binary name and download URL references
- Multi-stage Dockerfile.hanzo with distroless base for CI builds
- Update publish workflow with build-args for version injection
- Update .gitignore for new binary naming convention
- 780+ files touched by automated rebrand script
2026-03-13 20:03:20 -07:00
Hanzo Dev 9a7f86d250 ci: rename runners to {org}-{role}-{os}-{arch} convention
Unified ARC runner naming across all orgs:
- lux-build → lux-build-linux-amd64
- hanzo-build → hanzo-build-linux-amd64
- hanzo-k8s → hanzo-deploy-linux-amd64
- liquidity-build → liquidity-build-linux-amd64
2026-03-12 18:23:57 -07:00
Hanzo Dev 4c6803ef86 docs: add LLM.md project guide 2026-03-11 10:28:52 -07:00
Hanzo Dev 6589505ff6 chore: update Go module dependencies 2026-03-09 23:27:26 -07:00
Hanzo Dev 33af6079e1 feat: use S3_ env prefix with MINIO_ backwards compatibility
- Override EnvPrefix to "S3_" instead of importing MINIO_ from madmin-go
- Add EnvLegacyPrefix "MINIO_" constant for backwards compat
- Add MINIO_ fallback in ResolveConfigParam for subsystem env vars
- Add MINIO_ROOT_USER/PASSWORD fallback in credential loading
- Add MINIO_ access key fallback in credential loading
- Skip legacy MINIO_ vars in bootstrap peer sync
2026-03-01 22:56:30 -08:00
Hanzo Dev 83f30b4d0a Add /health/* routes without /minio/ prefix
Register health check handlers at both /minio/health/* (legacy) and /health/*
(short path) so /health/live and /health/ready work without the minio prefix.
2026-03-01 22:52:57 -08:00
Hanzo Dev 4e1e9c5ac3 Fix S3 debugging tools (check-md5, verify) 2026-02-26 20:51:51 -08:00
Hanzo Dev fcece90c2b Rebrand docs, helm, and user-facing strings: MinIO→S3, min.io→hanzo.ai
- Replace all MinIO brand references with S3 in docs, helm charts, and comments
- Replace quay.io/minio images with ghcr.io/hanzoai/s3 and ghcr.io/hanzos3/*
- Replace min.io domains: docs→docs.hanzo.ai, dl→dl.hanzo.space, play→play.hanzo.space
- Replace slack.min.io with hanzo.ai/discord
- Replace subnet.min.io with subnet.hanzo.ai
- Update Makefile REPO to ghcr.io/hanzoai
- Update helm values: mc image, OIDC clientId, service account name
- Update Go source user-facing URLs and messages
- Fix test configs and grafana dashboard descriptions
2026-02-23 17:28:20 -08:00
Hanzo Dev d145b35b54 Rebrand CI workflows: master→main, minio→hanzo, optimize publish pipeline
- Switch all 13 workflow branch triggers from master to main
- Replace quay.io/minio/minio with ghcr.io/hanzoai/s3 in all compose/workflow files
- Rebrand issue templates (MinIO → Hanzo, min.io → hanzo.ai)
- Update LDAP test config (MinIO Inc → Hanzo Inc, min.io → hanzo.ai)
- Add QEMU setup and concurrency group to publish workflow
- Fix dl.hanzo.space worker custom domain routing
2026-02-23 14:18:41 -08:00
Hanzo Dev 4d19e36d80 Docker builds on ubuntu-latest, binary builds on self-hosted runner
Cluster lacks resources for DinD sidecar. Split strategy:
- Docker image builds: ubuntu-latest (has Docker built-in)
- Binary cross-compilation: self-hosted hanzo-build (on tag push)
2026-02-23 13:26:40 -08:00
Hanzo Dev e08a944f4f Use hanzoai/space instead of hanzoai/storage for Docker image alias 2026-02-23 13:14:27 -08:00
Hanzo Dev d13f9930bc Use self-hosted build runner for CI builds
- Both docker and binaries jobs now run on [self-hosted, hanzo-build]
- Build runner deployed to hanzo-k8s (actions-runner-system namespace)
- Buildx uses docker-container driver (no DinD needed)
2026-02-23 12:57:23 -08:00
Hanzo Dev e4e06d0a40 Push Docker image to ghcr.io/hanzoai/s3, switch to main branch, add arm64
- Publish workflow now pushes to both ghcr.io/hanzoai/s3 and ghcr.io/hanzoai/storage
- Trigger on main branch (not master)
- Build linux/amd64 + linux/arm64
- Dockerfile label points to github.com/hanzoai/s3
2026-02-23 12:05:51 -08:00
Hanzo Dev 71ed51e045 Rebrand orchestration docs and remove dead minio screenshot link 2026-02-23 01:44:29 -08:00
Hanzo Dev e17fa49add fix publish workflow: create release before upload, fix GHCR image name 2026-02-23 00:41:30 -08:00
Hanzo Dev 8fe77d4d8a add release binary builds and dl.hanzo.space worker
- publish.yml: push to both ghcr.io/hanzoai/s3 and ghcr.io/hanzoai/storage
- publish.yml: build linux/darwin/windows binaries on tag push
- workers/dl/: Cloudflare Worker to proxy GitHub release assets at dl.hanzo.space
2026-02-23 00:32:52 -08:00
Hanzo Dev 759177dfec rename MINIO_* env vars to S3_* — no backward compat
Complete rename of all environment variable references from MINIO_
prefix to S3_ prefix across the entire codebase:

- internal/config/constants.go: EnvPrefix and all Env* constants
- All Go source files: string literals, error messages, comments
- Prometheus metrics: minio_* → s3_* metric name prefix
- Dockerfiles: ENV declarations
- Build scripts, CI workflows, helm charts, docs
- Grafana dashboards: metric queries updated

Go import paths and package names unchanged.
Build verified: go build ./cmd/... passes clean.
2026-02-23 00:27:16 -08:00