Files
explore/Dockerfile.branded
zeekay 5e7f6359aa feat(brand): per-(brand x env) image overlay — ghcr.io/{brand-org}/explore-{env}
The branded build now fans out into 8 (4 brands × mainnet+testnet)
production images:

  ghcr.io/luxfi/explore-{mainnet,testnet}:v1.0.0
  ghcr.io/zooai/explore-{mainnet,testnet}:v1.0.0
  ghcr.io/hanzoai/explore-{mainnet,testnet}:v1.0.0
  ghcr.io/parsdao/explore-{mainnet,testnet}:v1.0.0

Each image is a thin ENV overlay of ghcr.io/luxfi/explore (the Next.js
runtime) — brand identity is baked at build time via NEXT_PUBLIC_*
build-args. The brand's GHCR namespace owns the image per the workspace
container-registry rules (no cross-org mixing).

deploy/scripts/branded_build.sh is the source of truth for tuple -> env
mapping; the actual image fan-out is performed via crane mutate -e which
produces an instant ENV-only layer (no Kaniko, no tar of build context —
same hash blob mounts across namespaces).

The corresponding K8s manifests (per-brand Deployment + Service per
namespace, IngressRoute patches routing catch-all to FE) live in the
cluster directly.
2026-06-10 13:24:39 -07:00

64 lines
2.3 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Per-brand × per-env Blockscout overlay image.
#
# All NEXT_PUBLIC_* env vars are passed in as build-args; the image is a
# thin overlay of `ghcr.io/luxfi/explore:latest` that bakes those args
# into ENV so Blockscout's entrypoint emits the correct envs.js at boot.
#
# The Kaniko build pod assembles one image per (brand, env) tuple by
# passing the right --build-arg set. Authoritative tuples live in
# deploy/scripts/branded_build.sh.
FROM ghcr.io/luxfi/explore:latest
ARG BRAND
ARG NETWORK_NAME
ARG NETWORK_SHORT_NAME
ARG NETWORK_ID
ARG NETWORK_CURRENCY_NAME
ARG NETWORK_CURRENCY_SYMBOL
ARG NETWORK_RPC_URL
ARG API_HOST
ARG APP_HOST
ARG IS_TESTNET=false
ARG NETWORK_ORG_NAME
ARG NETWORK_WEBSITE_URL
ARG NETWORK_DESCRIPTION
ARG NETWORK_GITHUB_URL
ARG NETWORK_TWITTER_URL
ARG NETWORK_DISCORD_URL
ARG OIDC_SERVER_URL
ARG OIDC_CLIENT_ID
ENV NEXT_PUBLIC_BRAND=$BRAND \
NEXT_PUBLIC_NETWORK_NAME=$NETWORK_NAME \
NEXT_PUBLIC_NETWORK_SHORT_NAME=$NETWORK_SHORT_NAME \
NEXT_PUBLIC_NETWORK_ID=$NETWORK_ID \
NEXT_PUBLIC_NETWORK_CURRENCY_NAME=$NETWORK_CURRENCY_NAME \
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL=$NETWORK_CURRENCY_SYMBOL \
NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS=18 \
NEXT_PUBLIC_NETWORK_RPC_URL=$NETWORK_RPC_URL \
NEXT_PUBLIC_API_HOST=$API_HOST \
NEXT_PUBLIC_API_PROTOCOL=https \
NEXT_PUBLIC_API_BASE_PATH=/ \
NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL=wss \
NEXT_PUBLIC_APP_HOST=$APP_HOST \
NEXT_PUBLIC_APP_PROTOCOL=https \
NEXT_PUBLIC_IS_TESTNET=$IS_TESTNET \
NEXT_PUBLIC_NETWORK_LOGO=/logo.svg \
NEXT_PUBLIC_NETWORK_ICON=/icon.svg \
NEXT_PUBLIC_HOMEPAGE_CHARTS='["daily_txs","coin_price","market_cap"]' \
NEXT_PUBLIC_IS_ACCOUNT_SUPPORTED=true \
NEXT_PUBLIC_COLOR_THEME_DEFAULT=dark \
NEXT_PUBLIC_NETWORK_ORG_NAME=$NETWORK_ORG_NAME \
NEXT_PUBLIC_NETWORK_WEBSITE_URL=$NETWORK_WEBSITE_URL \
NEXT_PUBLIC_NETWORK_DESCRIPTION=$NETWORK_DESCRIPTION \
NEXT_PUBLIC_NETWORK_GITHUB_URL=$NETWORK_GITHUB_URL \
NEXT_PUBLIC_NETWORK_TWITTER_URL=$NETWORK_TWITTER_URL \
NEXT_PUBLIC_NETWORK_DISCORD_URL=$NETWORK_DISCORD_URL \
NEXT_PUBLIC_ACCOUNT_AUTH_PROVIDER=oidc \
NEXT_PUBLIC_OIDC_SERVER_URL=$OIDC_SERVER_URL \
NEXT_PUBLIC_OIDC_CLIENT_ID=$OIDC_CLIENT_ID \
NEXT_TELEMETRY_DISABLED=1 \
ENVS_PRESET=none \
SKIP_ENVS_VALIDATION=true