Commit Graph
50 Commits
Author SHA1 Message Date
zeekay 40e03ce48f feat: reset module path to hanzoai/ingress v1 (was v3) 2026-04-12 13:00:48 -07:00
zeekay 7369aa7ad8 docs: fix cross-brand references in README 2026-04-12 12:42:09 -07:00
zeekay c5c66ee2f0 ci: add workflow_dispatch trigger 2026-04-09 23:32:49 -07:00
zeekay 029616c995 feat: add /healthz endpoint (platform health check standard)
Alias for existing /ping — routes to same ping@internal service.
2026-04-09 18:04:14 -07:00
zeekay fa20453da2 rename admin API prefix from /api/ to /v1/ingress/
Follow /<version>/<service>/<path> convention for infrastructure
service endpoints. /healthz and /ping stay as-is.
2026-04-09 17:53:43 -07:00
zeekay b627d7f7d4 chore: update stdlib dependencies 2026-04-01 15:07:22 -07:00
zeekay 1057cae800 chore: rename docker-compose.yml to compose.yml, update ingressclass 2026-03-03 14:00:00 -08:00
zeekay 58f2436498 security: run as non-root user in runtime container
Add unprivileged ingress user (uid 1000) to Dockerfile runtime stage
and set USER directive. Change EXPOSE from 80 to 8080/8443 for safe
defaults in non-K8s usage. K8s deployments override via entrypoint
args and use NET_BIND_SERVICE capability for ports 80/443.

Update K8s deployment securityContext in both hanzo/ and lux/ manifests
to enforce runAsUser=1000, runAsNonRoot=true, and block privilege
escalation.
2026-03-25 01:27:29 -07:00
zeekay c9bf08d523 chore: bump Go 1.26.1 2026-03-22 14:12:30 -07:00
zeekay 8e7b23e822 security: add global security headers middleware
- HSTS (2yr, preload), X-Frame-Options DENY, X-Content-Type-Options nosniff,
  XSS filter, Referrer-Policy, Permissions-Policy, strip Server header
- Applied globally via entrypoint default middleware on websecure
- Fixes: missing HSTS on all 5 services, no CSP frame protection on IAM,
  server version leak on platform.hanzo.ai
2026-03-21 10:46:45 -07:00
zeekay cdad82bed1 docs: regenerate config reference for ingress-parser module 2026-03-19 16:44:13 -07:00
zeekay 68a9e372a8 rebrand: fork paerser → ingress-parser, eliminate all traefik strings
- Fork github.com/traefik/paerser to github.com/hanzoai/ingress-parser
  with rebranded prefixes (TRAEFIK_ → INGRESS_, traefik. → ingress.)
- Update all 71 Go files importing paerser to use ingress-parser
- CLI flags: traefik.configfile → ingress.configfile
- Env prefix: TRAEFIK_* → INGRESS_*
- Deprecation loader: traefik. label prefix → ingress.
- Recompute digest auth test hashes for realm "ingress"
- Rename traefiker test realm → ingresser
- Fix remaining comment URLs to hanzoai/ingress

7 remaining "traefik" refs are Go import paths for external
packages (traefik/yaegi, traefik/grpc-web) — these are the
packages' module identity, cannot be renamed without forking
the entire Go interpreter and gRPC-Web proxy.
2026-03-19 03:31:43 -07:00
zeekay 1fd65f96c9 fix: consulcatalog canary hashes + docker format string
- Update consulcatalog canary service hash expectations
- Fix docker provider Msgf format: %q on struct → %s on .Addr
2026-03-19 02:41:17 -07:00
zeekay 2612fa43eb rebrand: full Go source rename traefik → ingress/hanzo
376 files. All tests pass. Breaking wire changes:
- X-Traefik-Fast-Proxy → X-Ingress-Fast-Proxy
- X-Traefik-Router → X-Ingress-Router
- Metric prefix traefik.* → ingress.*
- ACME user agent containous-traefik → hanzoai-ingress
- Plugin manifest .traefik.yml → .ingress.yml
- Recovery middleware traefik-internal-recovery → ingress-internal-recovery

Copyright: Traefik Labs → Hanzo AI Inc (all headers)
Test domains: *.traefik.wtf → *.ingress.test
Doc URLs: doc.traefik.io → hanzo.ai/docs/ingress
Internal vars: traefikService* → ingressService*, etc.
Docker refs: traefik:latest → ghcr.io/hanzoai/ingress:latest
100+ YAML/JSON test fixtures updated

Remaining 30 refs are paerser library constraints
(traefik.configfile flag, TRAEFIK_* env prefix) and
digest auth hash-bound realm values. Cannot change
without forking github.com/traefik/paerser.
2026-03-19 02:04:13 -07:00
zeekay 6592681f02 rebrand: eliminate all upstream Traefik branding from webui
Logo & Icons:
- Replace all favicons (16/32/48/96/128/192/256/384/512) with Hanzo H mark
- Replace safari-pinned-tab.svg with Hanzo logo
- Replace favicon.ico (generated from 16+32px PNGs)
- Replace Apple touch icons (120/144/152/167/180)
- Replace sidebar logo SVG with Hanzo geometric H mark

Branding:
- Page titles: "Traefik Proxy" → "Hanzo Ingress"
- All doc/github URLs → github.com/hanzoai/ingress
- Copyright: "Traefik Labs" → "Hanzo AI Inc"
- theme-color: #ddee6d (Traefik lime) → #1a1a2e (neutral dark)
- manifest.json: name/short_name → "Hanzo Ingress"

Removed:
- Hub demo page (src/pages/hub-demo/) — upstream marketing
- Hub upgrade button (use-hub-upgrade-button hook)
- Plugins nav link (plugins.traefik.io)
- Sponsor link (github.com/sponsors/traefik)

Renamed:
- TraefikResourceStatsCard → ResourceStatsCard
- Mock data: traefik entrypoints/services → ingress

Tests:
- PageTitle.spec.tsx: updated expectations
- Navigation.spec.tsx: removed Plugins assertion
- react-router pinned to 6.22.1 (was broken v7 mismatch)

Build passes clean. Zero "traefik" strings remain in source
(excluding @traefiklabs/faency package imports).
2026-03-19 00:50:47 -07:00
zeekay 5be2351164 fix: switch test-unit.yaml webui tests from yarn to pnpm 2026-03-19 00:14:02 -07:00
zeekay 1bb1fff83e docs: regenerate reference docs for staticFiles middleware
go generate updates configuration-options.md, file.toml, and file.yaml
with the new staticFiles middleware fields. Required for goreleaser
(git must be clean at release time).
2026-03-19 00:11:47 -07:00
zeekay 9878bdf9c7 chore: switch webui from yarn to pnpm, fix CI
- Remove .yarnrc.yml, add pnpm-lock.yaml
- Dockerfile: yarn → pnpm install --frozen-lockfile
- buildx.Dockerfile: yarn → pnpm
- template-webui.yaml: yarn → pnpm, drop safe-chain, fix node setup
- Makefile: yarn → pnpm commands
- package.json: rename to hanzo-ingress-dashboard, add react-router
  (pnpm strict hoisting requires explicit dep)
- webui/readme.md: yarn → pnpm instructions

Fixes Release and experimental CI workflows that failed due to
missing yarn.lock.
2026-03-19 00:04:14 -07:00
zeekay 34440ff863 feat: add native staticFiles middleware + fix rebrand test breakage
Native staticFiles middleware (compiled-in, not plugin):
- pkg/config/dynamic/middlewares.go: StaticFiles config type
- pkg/middlewares/staticfiles/: full implementation (SPA, dir listing,
  cache-control, custom 404, index files)
- pkg/server/middleware/middlewares.go: wired into builder chain
- pkg/config/dynamic/zz_generated.deepcopy.go: DeepCopy methods

Fix all pre-existing test failures from traefik→ingress rebrand:
- builtins: entrypoint name traefik→ingress in JSON fixtures
- cookie: hash expectations updated for _INGRESS_BACKEND_ salt
- nomad: canary service hash expectations updated
- k8s ingress: remove duplicate map keys, fix ingressClass annotation
- k8s gateway: annotation prefix traefik.io→hanzo.ai, add missing
  IngressService fixture
- k8s ingress-nginx: add CurvePreferences to TLS test fixtures
- auth: fix realm defaults and response body assertions

68 packages tested, 0 failures.
2026-03-18 23:47:06 -07:00
zeekay 5cb7cf3f15 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:58 -07:00
zeekay af32e89347 feat: enforce PQ TLS defaults (TLS 1.3 + X25519MLKEM768)
Default TLS options now require TLS 1.3 minimum and explicitly set
X25519MLKEM768 as the preferred key exchange curve, with X25519,
P-256, and P-384 as fallbacks. This ensures post-quantum hybrid
key exchange is always negotiated when clients support it.
2026-03-11 22:04:25 -07:00
zeekay 7f264a0abf docs: add LLM.md project guide 2026-03-11 10:29:35 -07:00
zeekay 7dfe62849f chore: migrate from yarn to pnpm 2026-03-03 06:45:05 -08:00
zeekay f47ba375f1 perf: Go 1.26, BuildKit cache mounts
- Bump Go to 1.26.0 in go.mod, Dockerfile, .go-version
- Add BuildKit cache mounts for /go/pkg/mod and /root/.cache/go-build
- Update Dockerfile syntax directive to docker/dockerfile:1
- Expand .dockerignore for smaller build context
- Switch deploy workflow to reusable docker-build.yml (native multi-arch, no QEMU)
- Add CLAUDE.md, AGENTS.md, GEMINI.md, QWEN.md to .gitignore
2026-03-02 11:54:26 -08:00
zeekay 91180d60b1 unify IngressClass to 'ingress' for white-label portability
Rename IngressClass from 'hanzo' to 'ingress' across both hanzo-k8s
and lux-k8s manifests. Generic class name enables any org to fork
the stack without brand-specific K8s resource names.
2026-03-01 20:52:52 -08:00
zeekay ecb75bbd92 feat(k8s): add lux gateway IngressRoute config 2026-03-01 19:40:49 -08:00
zeekay 6923f7c279 feat(k8s): add Lux cluster Traefik deployment manifests
K8s manifests for deploying Traefik ingress controller on lux-k8s:
deployment, ingressclass, middlewares, RBAC, service.
2026-03-01 19:37:45 -08:00
zeekay 3225c6c055 Deploy to hanzo namespace DaemonSet, not traefik
Traefik namespace eliminated — single hanzo-ingress DaemonSet in
hanzo namespace is the sole ingress controller. Uses SHA tags
instead of :latest for reproducible deploys.
2026-02-27 11:34:41 -08:00
zeekay 2fdd4a8118 Fix deploy: target traefik deployment in traefik namespace 2026-02-27 09:51:48 -08:00
zeekay 4fb5e9fe61 Fix GHCR auth: use GH_PAT for package write permissions 2026-02-27 09:31:05 -08:00
zeekay 3bf0a93bc2 Use GitHub org secrets directly, drop KMS dependency for CI
KMS database was reset — machine identities gone. Use org-level
GitHub secrets (DOCKERHUB_*, DIGITALOCEAN_ACCESS_TOKEN) directly
instead of fetching through KMS at build time. Simpler and more
reliable.
2026-02-27 09:10:39 -08:00
zeekay 26347ae26c Fix KMS retry: wrap curl+jq in functions for proper retry
The pipe `retry curl ... | jq` breaks because jq exits after
first parse error, causing broken pipe on subsequent retries.
Fix by wrapping curl+jq as functions so retry covers the full
operation as a unit.
2026-02-26 22:17:12 -08:00
zeekay a3013ddd22 Add KMS retry logic to handle transient 500/503
KMS has been intermittently returning 500/503 errors during CI.
Added exponential backoff retry (5 attempts) to all curl calls.
2026-02-26 22:11:22 -08:00
zeekay 9ec7cc2031 Add standardized deploy workflow with KMS, dual registry, semver
- Build and push to GHCR + Docker Hub in parallel
- Fetch secrets from Hanzo KMS (no repo secrets needed)
- Semver + latest + sha tagging via metadata-action
- Deploy to hanzo-k8s with rolling update
2026-02-26 20:43:12 -08:00
zeekay ee53f0bd67 refactor: migrate CRD API groups to hanzo.ai and labels to ingress.*
- CRD API group: traefik.io -> hanzo.ai (GroupName, apiVersion, RBAC)
- Docker/provider label prefix: traefik.* -> ingress.* (all providers)
- CRD kind: TraefikService -> IngressService
- Directory renames: traefikio/ -> hanzoai/ (types, generated code, listers, informers, clientset)
- Config root name: traefik -> ingress (KV stores, file paths, env prefix)
- Metrics prefix: traefik_ -> ingress_
- Kubernetes annotations: traefik.ingress.kubernetes.io/ -> ingress.kubernetes.io/
- Gateway annotations: traefik.io/ -> hanzo.ai/
- Internal provider package: provider/traefik -> provider/builtins
- Type renames: TraefikLog -> IngressLog, TraefikCmdConfiguration -> IngressCmdConfiguration
- Generated client methods: TraefikV1alpha1() -> HanzoV1alpha1(), Traefik() -> Hanzo()
- Sample configs: traefik.sample.{toml,yml} -> ingress.sample.{toml,yml}
- Config paths: /etc/traefik/ -> /etc/ingress/, ~/.config/traefik -> ~/.config/ingress
- Default cert CN: TRAEFIK DEFAULT CERT -> INGRESS DEFAULT CERT
2026-02-26 10:33:54 -08:00
zeekay a10105c019 refactor: migrate module path to github.com/hanzoai/ingress/v3
Replace all internal import paths from github.com/traefik/traefik/v3
to github.com/hanzoai/ingress/v3 across 462 files. Also migrates the
dynamic/ext sub-module and updates OpenTelemetry scope names, ldflags,
goreleaser config, Dockerfile, and golangci config.

External dependencies (traefik/paerser, traefik/grpc-web, traefik/yaegi,
traefik/oxy) are preserved as-is. Comment URLs to upstream issues are
retained for historical context.
2026-02-26 10:15:19 -08:00
zeekay 31441c90ce chore: complete brand cleanup — remove upstream references
Comprehensive audit and cleanup of all upstream (Traefik/Containous)
references in public-facing files across the repository.

Changes:
- .github/FUNDING.yml: traefik -> hanzoai
- .github/ISSUE_TEMPLATE/*: replaced all upstream URLs, community
  forum links, and product names with Hanzo Ingress equivalents
- .github/PULL_REQUEST_TEMPLATE.md: updated doc URLs
- .github/workflows/release.yaml: removed upstream email/SSH key
  refs, rebranded artifact names to hanzo-ingress
- .github/workflows/test-integration.yaml: artifact name traefik
  -> hanzo-ingress to match new BIN_NAME
- .github/workflows/sync-docker-images.yaml: cleaned comment
- .github/workflows/documentation.yaml: cleaned comment
- .goreleaser.yml.tmpl: project_name and binary -> hanzo-ingress
- CODE_OF_CONDUCT.md: [email protected] -> [email protected]
- CONTRIBUTING.md: upstream doc URLs -> GitHub repo links
- SECURITY.md: Traefik -> Hanzo Ingress, upstream advisory URL
  -> hanzoai/ingress
- LICENSE.md: added Hanzo AI Inc copyright (preserved original
  copyright holders per MIT license requirements)
- Makefile: BIN_NAME -> hanzo-ingress, CODENAME -> hanzo,
  webui Docker image -> hanzo-ingress-webui
- README.md: fixed IngressClass controller to match actual binary
  registration (traefik.io/ingress-controller)
- webui/readme.md: Traefik Web UI -> Hanzo Ingress Web UI
- docs/readme.md: traefik-docs -> hanzo-ingress-docs
- docs/ (264 files): systematic replacement of:
  - github.com/traefik/traefik -> github.com/hanzoai/ingress
  - community.traefik.io -> github.com/hanzoai/ingress/discussions
  - doc.traefik.io -> github.com/hanzoai/ingress/blob/main/docs/
  - traefik.io commercial/blog URLs -> hanzo.ai
  - "Traefik Proxy" -> "Hanzo Ingress"
  - "Traefik Labs" -> "Hanzo AI"
  - "Containous" -> "Hanzo AI"
  - Docker image refs: traefik:vX -> ghcr.io/hanzoai/ingress:vX

Preserved (intentionally not changed):
- Go import paths (github.com/traefik/traefik/v3) in ldflags
- ./cmd/traefik Go package path
- traefik.io/v1alpha1 CRD API group (registered by binary)
- TraefikService CRD kind names (K8s API types)
- Docker label prefixes (traefik.http.*, traefik.tcp.*, etc.)
- Config default values (rootKey: "traefik", entryPoint: "traefik")
- CHANGELOG.md (historical record)
- update.traefik.io (hardcoded endpoint in Go binary)
- Test fixture data (cert passwords, service labels)
2026-02-26 09:59:06 -08:00
zeekay 09fc0f06cb ci: update workflow branch triggers from master to main
Default branch was renamed from master to main. Update all 7 CI
workflow files so push triggers fire on the correct branch.

External URLs in documentation.yaml (traefik/structor, seo-doc,
mixtus) are left as-is since they reference upstream repos.
2026-02-25 20:35:59 -08:00
zeekay 9707f1a12c docs: enhance README with badges, quick start, middleware table, architecture
Add CI/Go/license/GHCR badges, container image reference table,
full quick start (Docker/K8s/binary/compose), expanded architecture
diagram, complete middleware reference (26 built-in middlewares),
production deployment details with routed domains, and links to
docs.hanzo.ai and related projects.

310 -> 417 lines. Zero upstream references.
2026-02-25 11:02:54 -08:00
zeekay de778e679a fix: use GH_PAT for GHCR push (GITHUB_TOKEN 403 on forked repo)
GITHUB_TOKEN cannot push to GHCR packages on repos forked from
traefik/traefik due to org-level package restrictions. Use the
org-wide GH_PAT secret which has write:packages scope.
2026-02-25 07:52:54 -08:00
zeekay c5c8ac361b fix: add missing ReadTimeout/WriteTimeout to ingress-nginx test expectation
TestLoadIngresses/Auth_TLS_pass_certificate_to_upstream expected
ForwardingTimeouts with only DialTimeout, but buildServersTransport
always populates ReadTimeout and WriteTimeout from provider defaults
(60s each). Add them to match actual output.
2026-02-25 07:34:08 -08:00
zeekay da27438cc3 fix: resolve GHCR 403 on experimental image push
- Add explicit permissions (packages: write) for GHCR push from forked repo
- Disable provenance/SBOM attestations that trigger 403 Forbidden on GHCR
  for repos forked from traefik/traefik
- Add missing needs: build-webui dependency to prevent artifact race
2026-02-25 07:25:55 -08:00
zeekay c38924ecb4 fix: tidy go.mod — remove unused go-github/v28, mark go-version indirect 2026-02-25 07:22:01 -08:00
zeekay 1120a11f5b fix: disable documentation workflow (requires traefik-specific tooling)
The documentation workflow depends on traefik/structor, traefik/mixtus,
traefik/seo-doc, and a GH_TOKEN_REPO secret that are not available in
hanzoai/ingress. Disable with `if: false` until a Hanzo docs pipeline
is set up.
2026-02-25 00:17:46 -08:00
zeekay 90811c3d7b fix: restore upstream Makefile targets, update experimental to push to GHCR
The rebrand replaced the Makefile with a minimal version missing all
targets that CI workflows depend on (generate, binary, validate-files,
binary-linux-amd64, test-integration, multi-arch-image-*, generate-crd).

Restores the full upstream Makefile with:
- All CI-required targets intact
- Docker image targets pointing to ghcr.io/hanzoai/ingress
- Help text updated for hanzo-ingress

Also:
- experimental.yaml: switch from Docker Hub to GHCR (github.actor + GITHUB_TOKEN)
- sync-docker-images.yaml: disable daily cron (was syncing upstream traefik images)
2026-02-25 00:10:32 -08:00
zeekay af0d5a4c5b chore: trigger CI after enabling fork workflows 2026-02-25 00:07:07 -08:00
zeekay 694037f310 fix: unblock CI workflows — replace traefik repo guards, add push triggers
All 13 workflows were active but zero runs ever executed due to:
1. Repository guards (`github.repository == 'traefik/traefik'`) on 5 workflows
   silently skipped all jobs in hanzoai/ingress
2. Core CI (build, test-unit, test-integration, validate) only triggered on
   pull_request — never on push to master
3. Scheduled workflows (codeql, sync-docker-images) disabled by GitHub on forks

Changes:
- Replace `traefik/traefik` repo guards with `hanzoai/ingress` in
  experimental, documentation, release, sync-docker-images
- Add `push: branches: [master]` triggers to build, test-unit,
  test-integration, validate so CI runs on every push
- Add workflow_dispatch to codeql for manual triggering
- Fix release workflow to publish to hanzoai/ingress instead of traefik/traefik
2026-02-25 00:06:13 -08:00
zeekay 27256d6345 docs: comprehensive README rewrite — zero upstream references 2026-02-24 23:02:53 -08:00
zeekay 59fa0caa98 feat: multi-stage Dockerfile for ghcr.io/hanzoai/ingress 2026-02-24 22:15:08 -08:00
zeekay df6028a2ed feat: rebrand as Hanzo Ingress + add K8s manifests
- Rebrand Traefik CLI/version as Hanzo Ingress
- Disable upstream version check
- Add K8s deployment, service, RBAC, IngressClass manifests
- Add Makefile (build, docker, clean targets)
- Update Dockerfile with OCI labels
2026-02-24 22:14:20 -08:00