The release workflow has never published. Every run since v1.1.19 built
cleanly and then died on its own smoke gate:
image stamps <unset> but is published as v1.1.23
The gate was right. GIT_TAG and GIT_COMMIT_SHA were declared as ARG/ENV
only in the `builder` stage, and ENV does not cross a stage boundary, so
they reached the compiled bundle and never the runtime image. The footer
resolves at container start, not at build time — make_envs_script.sh
iterates the live process environment into window.__envs and
configs/app/ui.ts reads frontendVersion from there — so with nothing set
in the final stage, every image ever published reported no version.
`crane config ghcr.io/luxfi/explore:v1.1.23` confirms it: no
NEXT_PUBLIC_GIT_TAG in the config at all, and the deployed ConfigMaps do
not supply one either.
Declare both in the runner stage, after the copies so a new commit
invalidates only the ENV layer.
Co-authored-by: Hanzo Dev <[email protected]>
pnpm resolves `pnpm.patchedDependencies` during install, so the patch files have
to be in the context before `pnpm install --frozen-lockfile` runs. The deps
stage copies package.json and the lockfile but nothing else, so adding the
@luxfi/ui patch broke the image build while leaving local installs working —
they read patches/ straight from the repo.
Co-authored-by: Hanzo Dev <[email protected]>
Build the same source four ways from one repo:
- ghcr.io/luxfi/explore (lux brand, default)
- ghcr.io/luxfi/explore-hanzo (hanzo brand)
- ghcr.io/luxfi/explore-zoo (zoo brand)
- ghcr.io/luxfi/explore-pars (pars brand)
Each is built for linux/amd64 + linux/arm64 in parallel on hanzo ARC
runners (no QEMU), then merged into a multi-arch manifest.
Brand selection at build time via NEXT_PUBLIC_BRAND, with all
brand-specific assets (logo, favicon, theme, IAM URL) loaded from
NEXT_PUBLIC_* env vars — no hardcoded brand strings in source.
External operators set NEXT_PUBLIC_BRAND=other and supply their own
NEXT_PUBLIC_* env vars (see .env.example.external). The repo carries
no third-party trademarks.
Files:
- lib/white-label.ts brand detection + helpers
- .env.example.{lux,hanzo,zoo,pars,external} deploy templates
- .github/workflows/build-lux.yml 4-brand × 2-arch matrix
- Dockerfile accept NEXT_PUBLIC_BRAND
- configs/app/chainRegistry.ts add SPC + Pars devnet,
chainId fields, white-label
chain builder
- Switch from registry cache to type=gha (no network overhead for DinD runners)
- Add concurrency group to cancel in-progress builds on same branch
- Merge build+deploy into single job (saves job startup overhead)
- Combine 7 tool installs into single RUN layer
- Add BuildKit cache mounts for pnpm store and Next.js .next/cache
- Combine sequential RUN commands in all 3 Dockerfile stages
- Disable Next.js telemetry during build and runtime
- Expand .dockerignore to exclude tests, docs, .github
Deploy tools install in separate directories without the app .npmrc,
causing strict pnpm resolution to break yup's tiny-case import in
envs-validator. Global /root/.npmrc with shamefully-hoist fixes this.
@libp2p/webrtc imports @ipshipyard/node-datachannel/polyfill which
requires native C++ compilation. Stub provides ESM+CJS exports for
both main and polyfill subpaths with no-op WebRTC classes. Also
ignores pnpm-lock.yaml in cspell and copies stubs dir in Dockerfiles.
- Replace yarn v1 with pnpm 10.11.0 across all build configs
- Move misplaced deps to devDependencies (cspell, esbuild, @openzeppelin/contracts, @next/bundle-analyzer, @types/papaparse, @types/react-scroll)
- Remove stale @types/[email protected] override — use correct React 19 types (fixes 22 type errors)
- Convert yarn resolutions to pnpm.overrides
- Update Dockerfile, Dockerfile.lux, CI workflows, and all shell scripts
- Add .npmrc with shamefully-hoist for Next.js compatibility
- Add outputFileTracingRoot to next.config.js
* basic login button implementation
* refactoring and add dynamic auth button to the other pages
* connect wallet without authenticating an user
* login and logout user in blockscout account
* refactoring and RPC overrides
* authenticate user with connected wallet
* add ENS to profile button
* override evm chains and fix contract write with waas wallet
* disconnect wallet and fix docker build
* add dynamic imports to components that use web3 wallet packages
* refactor user profile directory
* clean up
* tweaks
* update pw ci script
* fix "connect wallet" button behavior
* handle linking email to profile with dynamic provider
* fix test
* async loading web3 hooks and remove dynamic loading from components that use them
* fix pw tests
* add account navigation in horizontal layout when auth provider is dynamic
* fix address verification modal
* review fixes
* spelling fixes
* first part of transition
* second part of transition
* remove jest
* bump up node version and playwright version
* update all screenshots because of the new playwright version
* fix tests
* one more screenshot update
* add file generator and template for common content
* add chain specific data
* add chain specific data for stability, shibarium, scroll and zilliqa
* fix ts
* add instructions about contract sources
* context for storing subchain config and tx view for subchain
* address page and block page for subchain
* address aggregated page: local txs tab
* connect MultichainSelect to context
* home page placeholder
* refactor subchain select state
* envs for demo
* fix ts
* clear value for l2 review
* subchain widgets on home page
* csp policies
* sockets, duck and goose
* fix socket on subchain address page
* link builder for subchain views
* update home widget
* fix time increment
* enable tx interpretator and metadata service
* generate multichain config based on every chain app config
* Fix the multichain config to work in Docker
* multichain socket test
* rename subchain-id to subchain-slug path param
* refactoring
* update chain icons on entities
* home page: latest local txs
* latest cross-chain txs
* minor improvements
* renaming, pt. 1
* rename chain routes
* enable blockchain interaction
* add loading state to icon shield
* fix build
* fix tests
* update types package
* first version of the pack
* single entry point
* add custom components to the package
* move form components to toolkit
* add more utils and hooks to the package
* minor fixes
* add CI workflow
* update readme and package.json
* fix ts
* fix build of env-validator
* fix docker build
* fix icons size
* test fixes
* more test fixes
* make script to generate OG image at container start
* add prod service URL
* remove og_image.png
* update path to file
* [skip ci] remove app url from payload
* migrate from zod to yul schema
* describe full schema
* adjust docker integration
* make script for downloading app assets
* change links to downloaded assets in the config code
* docker integration
* validate external json configs
* better schemas and ts integration
* update docs and dev script
* gh workflow
* try to fail gh workflow
* install global deps and adjust script for gh workflow
* refinements
* make workflow to pass
* 🙈
* fix tests
* metadata helpers and values for txs pages
* update titles to the rest of the pages
* refactor getServerSideProps
* dynamically update metadata for token and dapp page
* test
* 404 error page
* make new config
* make use of new config, delete old one
* feature reporter: dev implementation
* feature reporter: docker integration
* resctructure ENVS.md
* sentry feature
* refinements
* add spaces between sections
* tweaks
* switch to camelCase
* clean up
* remove NEXT_PUBLIC_NETWORK_TOKEN_ADDRESS
* v
* auto-generate .env.production file
* env placeholders congruity check
* refactor yarn dev and docker tasks
* [skip ci] pass git tag and commit sha to dev app
* [skip ci] clean up
* group account envs in docs
* remove NEXT_PUBLIC_LOGOUT_RETURN_URL env
* simple ENVs checker
* add types for all envs
* group values in config
* global envs types
* text tweaks
* fixes
* [skip ci] fix docker build