k8s(lux-mainnet): declare explore-fe per-brand frontends @ explore v1.0.10
Capture the live lux-mainnet per-brand block-explorer frontends as declared state (mirrors k8s/lux-devnet/explore-fe.yaml). ONE luxfi/explore source white-labeled by hostname (chainRegistry.ts -> branding.logoContent); per-org GHCR image overlay (luxfi/zooai/hanzoai/parsdao). Pins lux/zoo/hanzo to v1.0.10 (luxfi/explore@4369780): real per-brand hostname-driven header logo + single header per breakpoint, killing the stale inline triangle that mislabeled the Lux mark as 'Hanzo icon'. explore.hanzo.network now renders the real Hanzo blocky-H (@hanzo/logo, viewBox 0 0 67 67, 5 paths). pars stays v1.0.4 (parsdao not yet in the kaniko fan-out). dry-run/diff vs live = no image drift; apply only reconciles labels.
This commit is contained in:
@@ -0,0 +1,372 @@
|
||||
# Per-brand block-explorer frontends for MAINNET (Lux / Zoo / Hanzo / Pars).
|
||||
#
|
||||
# ONE Next.js "explore" image family (luxfi/explore, a Blockscout-frontend
|
||||
# fork) white-labeled by hostname: configs/app/chainRegistry.ts resolves the
|
||||
# active chain (and its brand logo/name) from the request Host header, so the
|
||||
# SAME source serves every brand. The header logo is the per-brand inline-SVG
|
||||
# mark from chainRegistry `branding.logoContent` — Hanzo = the real blocky-H
|
||||
# (@hanzo/logo, viewBox "0 0 67 67"), Lux = triangle, Zoo = interlocking
|
||||
# circles, Pars = 8-pointed star. NO hardcoded logo.
|
||||
#
|
||||
# Per-(brand x env) image overlay — each brand publishes to its own GHCR org:
|
||||
# lux -> ghcr.io/luxfi/explore
|
||||
# zoo -> ghcr.io/zooai/explore
|
||||
# hanzo -> ghcr.io/hanzoai/explore
|
||||
# pars -> ghcr.io/parsdao/explore
|
||||
# All built from one source (luxfi/explore@main) by the in-cluster kaniko
|
||||
# job (NO GitHub builders): one --context git://...#main, fan-out
|
||||
# --destination per org. See universe arcd build pattern.
|
||||
#
|
||||
# Mainnet user-facing hosts (ingress explore-{brand} in this ns):
|
||||
# explore.lux.network (+ canonical explore-lux.lux.network)
|
||||
# explore.zoo.network / explore.zoo.ngo (+ explore-zoo.lux.network)
|
||||
# explore.hanzo.network / explore.hanzo.ai (+ explore-hanzo.lux.network)
|
||||
# explore.pars.network (+ explore-pars.lux.network)
|
||||
#
|
||||
# image pull secret ghcr-luxfi already present in lux-mainnet (reads all
|
||||
# four GHCR orgs).
|
||||
#
|
||||
# DECLARED STATE — captured from the live cluster (do-sfo3-lux-k8s/lux-mainnet)
|
||||
# so an operator reconcile / rebuild reproduces exactly what is deployed.
|
||||
# Deploy via platform.hanzo.ai (operator reconcile); do not hand-apply ad-hoc.
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: explore-env-lux
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: lux, network: mainnet }
|
||||
data:
|
||||
NEXT_PUBLIC_ADMIN_SERVICE_API_HOST: "https://api-explore.lux.network"
|
||||
NEXT_PUBLIC_API_HOST: "api-explore.lux.network"
|
||||
NEXT_PUBLIC_APP_HOST: "explore.lux.network"
|
||||
NEXT_PUBLIC_CONTRACT_INFO_API_HOST: "https://api-explore.lux.network"
|
||||
NEXT_PUBLIC_IS_TESTNET: "false"
|
||||
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: "LUX"
|
||||
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: "LUX"
|
||||
NEXT_PUBLIC_NETWORK_ID: "96369"
|
||||
NEXT_PUBLIC_NETWORK_NAME: "Lux"
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: "https://api.lux.network/ext/bc/C/rpc"
|
||||
NEXT_PUBLIC_NETWORK_SHORT_NAME: "Lux"
|
||||
NEXT_PUBLIC_VISUALIZE_API_HOST: "https://api-explore.lux.network"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: explore-env-zoo
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: zoo, network: mainnet }
|
||||
data:
|
||||
NEXT_PUBLIC_ADMIN_SERVICE_API_HOST: "https://api-explore.zoo.network"
|
||||
NEXT_PUBLIC_API_HOST: "api-explore.zoo.network"
|
||||
NEXT_PUBLIC_APP_HOST: "explore.zoo.network"
|
||||
NEXT_PUBLIC_COLOR_THEME_OVERRIDES: '{"light":{"blue.500":"#000000","blue.600":"#000000","blue.700":"#000000","accent":"#000000","primary":"#000000"},"dark":{"blue.500":"#FFFFFF","blue.600":"#FFFFFF","blue.700":"#FFFFFF","accent":"#FFFFFF","primary":"#FFFFFF"}}'
|
||||
NEXT_PUBLIC_CONTRACT_INFO_API_HOST: "https://api-explore.zoo.network"
|
||||
NEXT_PUBLIC_IS_TESTNET: "false"
|
||||
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: "ZOO"
|
||||
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: "ZOO"
|
||||
NEXT_PUBLIC_NETWORK_ID: "200200"
|
||||
NEXT_PUBLIC_NETWORK_NAME: "Zoo"
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: "https://api.zoo.network/ext/bc/zoo/rpc"
|
||||
NEXT_PUBLIC_NETWORK_SHORT_NAME: "Zoo"
|
||||
NEXT_PUBLIC_VISUALIZE_API_HOST: "https://api-explore.zoo.network"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: explore-env-hanzo
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: hanzo, network: mainnet }
|
||||
data:
|
||||
NEXT_PUBLIC_ADMIN_SERVICE_API_HOST: "https://api-explore.hanzo.network"
|
||||
NEXT_PUBLIC_API_HOST: "api-explore.hanzo.network"
|
||||
NEXT_PUBLIC_APP_HOST: "explore.hanzo.network"
|
||||
NEXT_PUBLIC_CONTRACT_INFO_API_HOST: "https://api-explore.hanzo.network"
|
||||
NEXT_PUBLIC_IS_TESTNET: "false"
|
||||
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: "AI"
|
||||
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: "AI"
|
||||
NEXT_PUBLIC_NETWORK_ID: "36963"
|
||||
NEXT_PUBLIC_NETWORK_NAME: "Hanzo"
|
||||
# NOTE: live data backend issue — explorer appends /ext/bc/C/rpc to this
|
||||
# base, yielding a doubled path. Fix the indexer/API + this RPC base in a
|
||||
# separate data-layer task; it does not affect branding/chrome.
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: "https://api.lux.network/ext/bc/hanzo/rpc"
|
||||
NEXT_PUBLIC_NETWORK_SHORT_NAME: "Hanzo"
|
||||
NEXT_PUBLIC_VISUALIZE_API_HOST: "https://api-explore.hanzo.network"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: explore-env-pars
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: pars, network: mainnet }
|
||||
data:
|
||||
NEXT_PUBLIC_ADMIN_SERVICE_API_HOST: "https://api-explore.pars.network"
|
||||
NEXT_PUBLIC_API_HOST: "api-explore.pars.network"
|
||||
NEXT_PUBLIC_APP_HOST: "explore.pars.network"
|
||||
NEXT_PUBLIC_CONTRACT_INFO_API_HOST: "https://api-explore.pars.network"
|
||||
NEXT_PUBLIC_IS_TESTNET: "false"
|
||||
NEXT_PUBLIC_NETWORK_ID: "7070"
|
||||
NEXT_PUBLIC_NETWORK_RPC_URL: "https://api.pars.network/ext/bc/pars/rpc"
|
||||
NEXT_PUBLIC_STATS_API_HOST: "https://api-explore.pars.network"
|
||||
NEXT_PUBLIC_VISUALIZE_API_HOST: "https://api-explore.pars.network"
|
||||
---
|
||||
# Deployments + Services (one per brand). Per-brand image, envFrom configmap
|
||||
# above, svc 80 -> containerPort 3000.
|
||||
#
|
||||
# Image tags: lux/zoo/hanzo pinned to v1.0.10 (luxfi/explore@4369780 —
|
||||
# real per-brand hostname-driven logo, single header per breakpoint, no
|
||||
# triangle fallback). pars at v1.0.4 (parsdao/explore not yet rebuilt at
|
||||
# v1.0.10; bump when the kaniko fan-out adds the parsdao destination).
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: explore-fe-lux
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: lux, network: mainnet }
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels: { app: explore-fe, brand: lux, network: mainnet }
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate: { maxSurge: 1, maxUnavailable: 1 }
|
||||
template:
|
||||
metadata:
|
||||
labels: { app: explore-fe, brand: lux, network: mainnet }
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: ghcr-luxfi
|
||||
containers:
|
||||
- name: explore
|
||||
image: ghcr.io/luxfi/explore:v1.0.10
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- { name: ui, containerPort: 3000 }
|
||||
env:
|
||||
- { name: PORT, value: "3000" }
|
||||
envFrom:
|
||||
- configMapRef: { name: explore-env-lux }
|
||||
resources:
|
||||
requests: { cpu: 100m, memory: 256Mi }
|
||||
limits: { cpu: "1", memory: 2Gi }
|
||||
startupProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 30
|
||||
readinessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 15
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 6
|
||||
livenessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 90
|
||||
periodSeconds: 60
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 5
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: explore-fe-lux
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: lux, network: mainnet }
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector: { app: explore-fe, brand: lux, network: mainnet }
|
||||
ports:
|
||||
- { name: http, port: 80, targetPort: 3000, protocol: TCP }
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: explore-fe-zoo
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: zoo, network: mainnet }
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels: { app: explore-fe, brand: zoo, network: mainnet }
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate: { maxSurge: 1, maxUnavailable: 1 }
|
||||
template:
|
||||
metadata:
|
||||
labels: { app: explore-fe, brand: zoo, network: mainnet }
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: ghcr-luxfi
|
||||
containers:
|
||||
- name: explore
|
||||
image: ghcr.io/zooai/explore:v1.0.10
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- { name: ui, containerPort: 3000 }
|
||||
env:
|
||||
- { name: PORT, value: "3000" }
|
||||
envFrom:
|
||||
- configMapRef: { name: explore-env-zoo }
|
||||
resources:
|
||||
requests: { cpu: 100m, memory: 256Mi }
|
||||
limits: { cpu: "1", memory: 2Gi }
|
||||
startupProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 30
|
||||
readinessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 15
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 6
|
||||
livenessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 90
|
||||
periodSeconds: 60
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 5
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: explore-fe-zoo
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: zoo, network: mainnet }
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector: { app: explore-fe, brand: zoo, network: mainnet }
|
||||
ports:
|
||||
- { name: http, port: 80, targetPort: 3000, protocol: TCP }
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: explore-fe-hanzo
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: hanzo, network: mainnet }
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels: { app: explore-fe, brand: hanzo, network: mainnet }
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate: { maxSurge: 1, maxUnavailable: 1 }
|
||||
template:
|
||||
metadata:
|
||||
labels: { app: explore-fe, brand: hanzo, network: mainnet }
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: ghcr-luxfi
|
||||
containers:
|
||||
- name: explore
|
||||
image: ghcr.io/hanzoai/explore:v1.0.10
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- { name: ui, containerPort: 3000 }
|
||||
env:
|
||||
- { name: PORT, value: "3000" }
|
||||
envFrom:
|
||||
- configMapRef: { name: explore-env-hanzo }
|
||||
resources:
|
||||
requests: { cpu: 100m, memory: 256Mi }
|
||||
limits: { cpu: "1", memory: 2Gi }
|
||||
startupProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 30
|
||||
readinessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 15
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 6
|
||||
livenessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 90
|
||||
periodSeconds: 60
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 5
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: explore-fe-hanzo
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: hanzo, network: mainnet }
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector: { app: explore-fe, brand: hanzo, network: mainnet }
|
||||
ports:
|
||||
- { name: http, port: 80, targetPort: 3000, protocol: TCP }
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: explore-fe-pars
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: pars, network: mainnet }
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels: { app: explore-fe, brand: pars, network: mainnet }
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate: { maxSurge: 1, maxUnavailable: 1 }
|
||||
template:
|
||||
metadata:
|
||||
labels: { app: explore-fe, brand: pars, network: mainnet }
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: ghcr-luxfi
|
||||
containers:
|
||||
- name: explore
|
||||
image: ghcr.io/parsdao/explore:v1.0.4
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- { name: ui, containerPort: 3000 }
|
||||
env:
|
||||
- { name: PORT, value: "3000" }
|
||||
envFrom:
|
||||
- configMapRef: { name: explore-env-pars }
|
||||
resources:
|
||||
requests: { cpu: 100m, memory: 256Mi }
|
||||
limits: { cpu: "1", memory: 2Gi }
|
||||
startupProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 30
|
||||
readinessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 15
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 6
|
||||
livenessProbe:
|
||||
httpGet: { path: /, port: ui }
|
||||
initialDelaySeconds: 90
|
||||
periodSeconds: 60
|
||||
timeoutSeconds: 10
|
||||
failureThreshold: 5
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: explore-fe-pars
|
||||
namespace: lux-mainnet
|
||||
labels: { app: explore-fe, brand: pars, network: mainnet }
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector: { app: explore-fe, brand: pars, network: mainnet }
|
||||
ports:
|
||||
- { name: http, port: 80, targetPort: 3000, protocol: TCP }
|
||||
Reference in New Issue
Block a user