Files
zeekayandHanzo Dev 9285148fdd fix(k8s): the two apps investors look at had no owning manifest
app.lux.finance and app.lux.market are served by Deployments in namespaces
app-lux-finance / app-lux-market on lux-k8s that exist ONLY as hand-applied
objects — kubectl.kubernetes.io/last-applied-configuration, no file anywhere
in this repo. That is why both kept serving 2026-06-25 images long after the
fabricated figures in them were fixed in source:

  ghcr.io/luxfi/finance:1.0.3-amd64  ->  "$125M+ Total Value Locked", a
                                         literal; a page-load trace makes 25
                                         requests, none of them JSON-RPC
  ghcr.io/luxfi/market:1.0.31-amd64  ->  /genesis tier table claiming 40B LUX
                                         "permanently locked" behind
                                         0x004287c4..76c6, eth_getCode "0x"

Specs transcribed from the live objects unchanged — same replicas, ports,
env, resources, /health probes, ghcr-pull secret, ingressClassName and TLS
secret names — so applying this is a no-op except for the image tag, which is
now the point: it moves to finance 1.0.4 / market 1.1.8, the first tags built
from the live-read source.

Both files record the sibling deployments that also claim these apps'
hostnames (k8s/lux-k8s/finance, k8s/lux-k8s/market, k8s/lux-mainnet/
lux-market.yaml). Collapsing three deployments of one app into one is a
separate change and is not attempted here.

Not applied: the luxfi ARC pool has not scheduled a runner in 14h
("max node group size reached", 0/10 nodes match the runner node selector),
so neither image exists yet. Apply once the tags are in GHCR.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-28 00:46:48 -07:00

104 lines
3.0 KiB
YAML

# app.lux.market — the NFT marketplace SPA (luxfi/market).
#
# This is the deployment that actually serves app.lux.market on lux-k8s. Like
# app-lux-finance it existed only as a hand-applied object with no owning repo,
# which is how it kept serving ghcr.io/luxfi/market 1.0.31-amd64 (2026-06-25) —
# the build whose /genesis page prints a hard-coded tier table claiming
# 40,000,000,000 LUX "permanently locked" behind 0x004287c4..76c6, an address
# with no code — for a month after that page was rewritten to read
# totalMinted()/totalLuxLocked() live.
#
# NOTE two sibling deployments also claim market hosts: k8s/lux-k8s/market/
# (ns hanzo, lux-market, ghcr.io/luxfi/lux-market:v2.0.0) and
# k8s/lux-mainnet/lux-market.yaml (ghcr.io/luxfi/market:latest). Three
# deployments of one app; collapsing them is a separate change.
apiVersion: v1
kind: Namespace
metadata:
name: app-lux-market
labels:
app.kubernetes.io/part-of: lux
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-lux-market
namespace: app-lux-market
labels:
app: app-lux-market
app.kubernetes.io/managed-by: lux-universe
app.kubernetes.io/part-of: lux-market
spec:
replicas: 2
selector:
matchLabels:
app: app-lux-market
template:
metadata:
labels:
app: app-lux-market
spec:
containers:
- name: app
# v1.1.8 is the first tag whose build can even run: every tag from
# v1.0.32 on failed at 0s because a public repo cannot call a private
# reusable workflow. Bump this only to a tag that exists in
# ghcr.io/luxfi/market.
image: ghcr.io/luxfi/market:1.1.8
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: http
env:
- name: PORT
value: "3000"
- name: ROOT
value: /public
resources:
requests: { cpu: 50m, memory: 32Mi }
limits: { memory: 128Mi }
readinessProbe:
httpGet: { path: /health, port: 3000 }
initialDelaySeconds: 3
periodSeconds: 10
livenessProbe:
httpGet: { path: /health, port: 3000 }
initialDelaySeconds: 10
periodSeconds: 30
imagePullSecrets:
- name: ghcr-pull
---
apiVersion: v1
kind: Service
metadata:
name: app-lux-market
namespace: app-lux-market
spec:
selector:
app: app-lux-market
ports:
- name: http
port: 80
targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-lux-market
namespace: app-lux-market
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: ingress
tls:
- hosts: [app.lux.market]
secretName: app-lux-market-tls
rules:
- host: app.lux.market
http:
paths:
- path: /
pathType: Prefix
backend:
service: { name: app-lux-market, port: { number: 80 } }