the explorer frontends declare the environment they run with
CI/CD / render (push) Failing after 0s

Each of these mounts a configmap named explore-env-<chain> that was declared
nowhere: the deployments referenced it, nothing created it, and every
frontend sat in CreateContainerConfigError. The same shape as the chain
nodes, whose genesis and startup config never migrated either.

The values are the RUNTIME set only. luxfi/explore's .env.example.lux mixes
build-time and runtime variables in one file — NEXT_PUBLIC_BRAND is read by
`pnpm build`, and the branding, marketplace and homepage URLs were dropped
from the image — so feeding that file to a container fails the validator on
congruity, then on deprecation, then on unknown names.

Co-authored-by: Hanzo AI <[email protected]>
This commit is contained in:
2026-09-08 21:49:45 -07:00
co-authored by Hanzo AI
parent 187b257c08
commit e68b17ff9b
5 changed files with 110 additions and 80 deletions
+22 -12
View File
@@ -1,11 +1,10 @@
# CD applies this file within ~90s, so THIS is the source now, not the cluster.
# Pins move in the release (luxfi/explore .hanzo/workflows/release.yml: one
# build, byte-identical copies per org, all five brands moved together), never
# by hand — an automated pin BELOW what is running is a rollback that applies
# itself, and every one of these files trailed the cluster before this bump.
# The RUNTIME environment, and only that. luxfi/explore's .env.example.lux
# mixes build-time and runtime variables in one file -- NEXT_PUBLIC_BRAND is
# read by `pnpm build`, and the branding, marketplace and homepage URLs were
# dropped from the image -- so feeding that file to the container fails the
# validator outright. These are the variables v2.8.1-lux accepts.
cd:
automated: false
replicas: 1
selectorLabels:
app: explore-fe
@@ -63,12 +62,6 @@ startupProbe:
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
# The live container port is named `ui` and all three probes address it by that
# name. Renaming it to `http` leaves every probe pointing at a port that does
# not exist, so the pod never goes Ready — 13 explorer front-ends at once.
# One values entry names the container port AND the Service port, so the
# Service port is renamed http -> ui with it; every Ingress backend addresses
# that Service by NUMBER (80), so nothing resolves it by name.
ports:
- containerPort: 3000
name: ui
@@ -82,3 +75,20 @@ topologySpread:
enabled: false
lifecycle: null
terminationGracePeriodSeconds: 30
configMaps:
- name: explore-env-hanzo
data:
NEXT_PUBLIC_NETWORK_NAME: Hanzo Network
NEXT_PUBLIC_NETWORK_SHORT_NAME: HANZO
NEXT_PUBLIC_NETWORK_ID: '36963'
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: HANZO
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: HANZO
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: '18'
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.lux.network/v1/chain/c/rpc
NEXT_PUBLIC_API_HOST: api-explore.lux.network
NEXT_PUBLIC_API_PROTOCOL: https
NEXT_PUBLIC_API_BASE_PATH: /
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: wss
NEXT_PUBLIC_APP_HOST: explore.lux.network
NEXT_PUBLIC_APP_PROTOCOL: https
NEXT_PUBLIC_IS_TESTNET: 'false'
+22 -22
View File
@@ -1,11 +1,10 @@
# CD applies this file within ~90s, so THIS is the source now, not the cluster.
# Pins move in the release (luxfi/explore .hanzo/workflows/release.yml: one
# build, byte-identical copies per org, all five brands moved together), never
# by hand — an automated pin BELOW what is running is a rollback that applies
# itself, and every one of these files trailed the cluster before this bump.
# The RUNTIME environment, and only that. luxfi/explore's .env.example.lux
# mixes build-time and runtime variables in one file -- NEXT_PUBLIC_BRAND is
# read by `pnpm build`, and the branding, marketplace and homepage URLs were
# dropped from the image -- so feeding that file to the container fails the
# validator outright. These are the variables v2.8.1-lux accepts.
cd:
automated: false
replicas: 1
selectorLabels:
app: explore-fe
@@ -14,16 +13,6 @@ selectorLabels:
containerName: explore
image:
repository: ghcr.io/luxfi/explore
# v2.8.1-lux. This is the deployment that SERVES explore.lux.network — the
# ingress points at explorer:80, and the Go explorer proxies the brand host
# here. The `explore` sidecar inside the explorer pod is NOT the one on the
# page; bumping it changed nothing visible, which is how this was found.
#
# Moved by hand this once because the release fanout did not move it: the
# v2.8.1-lux fanout job reported success (it copies the image per org) and left
# every pin at v1.1.30. The hazard this file warns about is a pin BELOW what is
# running, which applies itself as a rollback; this is the opposite, forward to
# an image proven pullable in-cluster.
tag: v2.8.1-lux
digest: sha256:c4a75d036d7d7f93b870f7c1d3b9876b3b1c3e34063c11b90f68189554706193
pullPolicy: IfNotPresent
@@ -77,12 +66,6 @@ startupProbe:
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
# The live container port is named `ui` and all three probes address it by that
# name. Renaming it to `http` leaves every probe pointing at a port that does
# not exist, so the pod never goes Ready — 13 explorer front-ends at once.
# One values entry names the container port AND the Service port, so the
# Service port is renamed http -> ui with it; every Ingress backend addresses
# that Service by NUMBER (80), so nothing resolves it by name.
ports:
- containerPort: 3000
name: ui
@@ -96,3 +79,20 @@ topologySpread:
enabled: false
lifecycle: null
terminationGracePeriodSeconds: 30
configMaps:
- name: explore-env-lux
data:
NEXT_PUBLIC_NETWORK_NAME: Lux Network
NEXT_PUBLIC_NETWORK_SHORT_NAME: LUX
NEXT_PUBLIC_NETWORK_ID: '96369'
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: LUX
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: LUX
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: '18'
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.lux.network/v1/chain/c/rpc
NEXT_PUBLIC_API_HOST: api-explore.lux.network
NEXT_PUBLIC_API_PROTOCOL: https
NEXT_PUBLIC_API_BASE_PATH: /
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: wss
NEXT_PUBLIC_APP_HOST: explore.lux.network
NEXT_PUBLIC_APP_PROTOCOL: https
NEXT_PUBLIC_IS_TESTNET: 'false'
+22 -12
View File
@@ -1,11 +1,10 @@
# CD applies this file within ~90s, so THIS is the source now, not the cluster.
# Pins move in the release (luxfi/explore .hanzo/workflows/release.yml: one
# build, byte-identical copies per org, all five brands moved together), never
# by hand — an automated pin BELOW what is running is a rollback that applies
# itself, and every one of these files trailed the cluster before this bump.
# The RUNTIME environment, and only that. luxfi/explore's .env.example.lux
# mixes build-time and runtime variables in one file -- NEXT_PUBLIC_BRAND is
# read by `pnpm build`, and the branding, marketplace and homepage URLs were
# dropped from the image -- so feeding that file to the container fails the
# validator outright. These are the variables v2.8.1-lux accepts.
cd:
automated: false
replicas: 1
selectorLabels:
app: explore-fe
@@ -63,12 +62,6 @@ startupProbe:
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
# The live container port is named `ui` and all three probes address it by that
# name. Renaming it to `http` leaves every probe pointing at a port that does
# not exist, so the pod never goes Ready — 13 explorer front-ends at once.
# One values entry names the container port AND the Service port, so the
# Service port is renamed http -> ui with it; every Ingress backend addresses
# that Service by NUMBER (80), so nothing resolves it by name.
ports:
- containerPort: 3000
name: ui
@@ -82,3 +75,20 @@ topologySpread:
enabled: false
lifecycle: null
terminationGracePeriodSeconds: 30
configMaps:
- name: explore-env-pars
data:
NEXT_PUBLIC_NETWORK_NAME: Pars Network
NEXT_PUBLIC_NETWORK_SHORT_NAME: PARS
NEXT_PUBLIC_NETWORK_ID: '36970'
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: PARS
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: PARS
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: '18'
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.lux.network/v1/chain/c/rpc
NEXT_PUBLIC_API_HOST: api-explore.lux.network
NEXT_PUBLIC_API_PROTOCOL: https
NEXT_PUBLIC_API_BASE_PATH: /
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: wss
NEXT_PUBLIC_APP_HOST: explore.lux.network
NEXT_PUBLIC_APP_PROTOCOL: https
NEXT_PUBLIC_IS_TESTNET: 'false'
+22 -12
View File
@@ -1,11 +1,10 @@
# CD applies this file within ~90s, so THIS is the source now, not the cluster.
# Pins move in the release (luxfi/explore .hanzo/workflows/release.yml: one
# build, byte-identical copies per org, all five brands moved together), never
# by hand — an automated pin BELOW what is running is a rollback that applies
# itself, and every one of these files trailed the cluster before this bump.
# The RUNTIME environment, and only that. luxfi/explore's .env.example.lux
# mixes build-time and runtime variables in one file -- NEXT_PUBLIC_BRAND is
# read by `pnpm build`, and the branding, marketplace and homepage URLs were
# dropped from the image -- so feeding that file to the container fails the
# validator outright. These are the variables v2.8.1-lux accepts.
cd:
automated: false
replicas: 1
selectorLabels:
app: explore-fe
@@ -67,12 +66,6 @@ startupProbe:
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
# The live container port is named `ui` and all three probes address it by that
# name. Renaming it to `http` leaves every probe pointing at a port that does
# not exist, so the pod never goes Ready — 13 explorer front-ends at once.
# One values entry names the container port AND the Service port, so the
# Service port is renamed http -> ui with it; every Ingress backend addresses
# that Service by NUMBER (80), so nothing resolves it by name.
ports:
- containerPort: 3000
name: ui
@@ -86,3 +79,20 @@ topologySpread:
enabled: false
lifecycle: null
terminationGracePeriodSeconds: 30
configMaps:
- name: explore-env-spc
data:
NEXT_PUBLIC_NETWORK_NAME: SPC Network
NEXT_PUBLIC_NETWORK_SHORT_NAME: SPC
NEXT_PUBLIC_NETWORK_ID: '36911'
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: SPC
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: SPC
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: '18'
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.lux.network/v1/chain/c/rpc
NEXT_PUBLIC_API_HOST: api-explore.lux.network
NEXT_PUBLIC_API_PROTOCOL: https
NEXT_PUBLIC_API_BASE_PATH: /
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: wss
NEXT_PUBLIC_APP_HOST: explore.lux.network
NEXT_PUBLIC_APP_PROTOCOL: https
NEXT_PUBLIC_IS_TESTNET: 'false'
+22 -22
View File
@@ -1,11 +1,10 @@
# CD applies this file within ~90s, so THIS is the source now, not the cluster.
# Pins move in the release (luxfi/explore .hanzo/workflows/release.yml: one
# build, byte-identical copies per org, all five brands moved together), never
# by hand — an automated pin BELOW what is running is a rollback that applies
# itself, and every one of these files trailed the cluster before this bump.
# The RUNTIME environment, and only that. luxfi/explore's .env.example.lux
# mixes build-time and runtime variables in one file -- NEXT_PUBLIC_BRAND is
# read by `pnpm build`, and the branding, marketplace and homepage URLs were
# dropped from the image -- so feeding that file to the container fails the
# validator outright. These are the variables v2.8.1-lux accepts.
cd:
automated: false
replicas: 1
selectorLabels:
app: explore-fe
@@ -14,16 +13,6 @@ selectorLabels:
containerName: explore
image:
repository: ghcr.io/zooai/explore
# v2.8.1-lux, the same image explore-fe-lux runs and the same one this file's
# header describes: the release builds once and copies byte-identical per org.
# Byte-identical is not a figure of speech here — ghcr.io/zooai/explore and
# ghcr.io/luxfi/explore both resolve v2.8.1-lux to
# sha256:c4a75d03…, one manifest under two names, which is why the org tag
# carries the `-lux` suffix that named the build.
#
# Zoo trailed on v1.1.30 for the same reason lux did: the fanout job reported
# success and moved no pin. Seven releases of fixes were sitting in a registry
# nothing pulled from.
tag: v2.8.1-lux
digest: sha256:c4a75d036d7d7f93b870f7c1d3b9876b3b1c3e34063c11b90f68189554706193
pullPolicy: IfNotPresent
@@ -73,12 +62,6 @@ startupProbe:
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 10
# The live container port is named `ui` and all three probes address it by that
# name. Renaming it to `http` leaves every probe pointing at a port that does
# not exist, so the pod never goes Ready — 13 explorer front-ends at once.
# One values entry names the container port AND the Service port, so the
# Service port is renamed http -> ui with it; every Ingress backend addresses
# that Service by NUMBER (80), so nothing resolves it by name.
ports:
- containerPort: 3000
name: ui
@@ -92,3 +75,20 @@ topologySpread:
enabled: false
lifecycle: null
terminationGracePeriodSeconds: 30
configMaps:
- name: explore-env-zoo
data:
NEXT_PUBLIC_NETWORK_NAME: Zoo Network
NEXT_PUBLIC_NETWORK_SHORT_NAME: ZOO
NEXT_PUBLIC_NETWORK_ID: '200200'
NEXT_PUBLIC_NETWORK_CURRENCY_NAME: ZOO
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL: ZOO
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS: '18'
NEXT_PUBLIC_NETWORK_RPC_URL: https://api.lux.network/v1/chain/c/rpc
NEXT_PUBLIC_API_HOST: api-explore.lux.network
NEXT_PUBLIC_API_PROTOCOL: https
NEXT_PUBLIC_API_BASE_PATH: /
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL: wss
NEXT_PUBLIC_APP_HOST: explore.lux.network
NEXT_PUBLIC_APP_PROTOCOL: https
NEXT_PUBLIC_IS_TESTNET: 'false'