Files
zeekayandGitHub 2d67d98b01 env: drop LUX_ prefix from env vars (noise) (#38)
Renames LUX_-prefixed env vars to canonical, non-noisy forms:

- LUX_MNEMONIC      -> MNEMONIC      (deploy script + LLM doc)
- LUX_PRIVATE_KEY   -> PRIVATE_KEY   (deploy script + LLM doc)
- LUX_INSECURE_TLS  -> INSECURE_TLS
- LUX_NODE_ENDPOINT -> NODE_ENDPOINT
- LUX_NETWORK_TYPE  -> NETWORK_TYPE  (backend gRPC server selector)
- LUX_RPC_URL       -> RPC_URL
- LUX_NODE_ROOT     -> NODE_ROOT
- LUX_CHART_PATH    -> CHART_PATH
- LUX_CHAINS_FILE   -> CHAINS_FILE
- LUX_KMS_ROOT_KEY  -> KMS_ROOT_KEY
- LUX_WC_PROJECT_ID -> WC_PROJECT_ID (WalletConnect)
- LUX_BLS_KEY       -> BLS_KEY       (was already supported via getEnv())
- LUX_KEY_INDEX     -> KEY_INDEX     (was already supported via getEnv())

pkg/key/backend_env.go: removed the LUX_-prefix-stripping getEnv()
helper (now reads env vars by exact name) and dropped the broken
"MNEMONIC / MNEMONIC" / "PRIVATE_KEY / PRIVATE_KEY" doc comments
which were a previous incomplete rename.

NOT renamed (defined in upstream luxfi/constants — separate concern):
- LUX_NODE_PATH      (constants.EnvNodePath)
- LUX_NETRUNNER_PATH (constants.EnvNetrunnerPath)
- LUX_EVM_PATH       (constants.EnvEVMPath)
- LUX_PLUGINS_DIR    (constants.EnvPluginsDir)

Doc comments referencing those env vars (cmd/root.go,
cmd/networkcmd/start.go, cmd/nodecmd/link.go) describe the
constants-defined names accurately and are left alone.

NOT renamed (script-local variables, not env vars):
- LUX_ZONE in scripts/update-cloudflare-dns.sh (Cloudflare DNS zone ID)
- LUX_BIN_DIR in scripts/install.sh (~/.lux/bin path constant)

BREAKING: external callers/operators must update env var names. Per
CLAUDE.md no-backwards-compatibility rule, the old forms are removed.
2026-05-15 16:35:26 -07:00

115 lines
3.2 KiB
Go

// Copyright (C) 2022-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package networkcmd
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"github.com/luxfi/cli/pkg/ux"
)
// K8sNetworkConfig holds configuration for K8s network deployment via Helm.
type K8sNetworkConfig struct {
NetworkName string
Namespace string
Image string
}
// StartK8sNetwork deploys a Lux network to Kubernetes using the canonical Helm chart.
// This delegates to `helm upgrade --install` to ensure a single source of truth.
func StartK8sNetwork(cfg K8sNetworkConfig) error {
// Resolve chart path
chartPath := os.Getenv("CHART_PATH")
if chartPath == "" {
home, _ := os.UserHomeDir()
chartPath = filepath.Join(home, "work", "lux", "devops", "charts", "lux")
}
// Validate chart exists
if _, err := os.Stat(filepath.Join(chartPath, "Chart.yaml")); err != nil {
return fmt.Errorf("Helm chart not found at %s (set $CHART_PATH)", chartPath)
}
// Validate values file
valuesFile := filepath.Join(chartPath, fmt.Sprintf("values-%s.yaml", cfg.NetworkName))
if _, err := os.Stat(valuesFile); err != nil {
return fmt.Errorf("values file not found: %s", valuesFile)
}
// Check helm binary
helmBin, err := exec.LookPath("helm")
if err != nil {
return fmt.Errorf("helm not found in PATH — install from https://helm.sh/docs/intro/install/")
}
releaseName := "luxd-" + cfg.NetworkName
args := []string{
"upgrade", "--install", releaseName, chartPath,
"--namespace", cfg.Namespace,
"--create-namespace",
"-f", valuesFile,
}
// K8s context override
if k8sCluster != "" {
args = append(args, "--kube-context", k8sCluster)
} else if ctx := os.Getenv("KUBECONTEXT"); ctx != "" {
args = append(args, "--kube-context", ctx)
}
// Image override
if cfg.Image != "" && cfg.Image != "ghcr.io/luxfi/node:latest" {
args = append(args, "--set", "image.tag="+cfg.Image)
}
ux.Logger.PrintToUser("Deploying %s via Helm:", cfg.NetworkName)
ux.Logger.PrintToUser(" Release: %s", releaseName)
ux.Logger.PrintToUser(" Namespace: %s", cfg.Namespace)
ux.Logger.PrintToUser(" Chart: %s", chartPath)
ux.Logger.PrintToUser(" Values: %s", valuesFile)
ux.Logger.PrintToUser("")
helmCmd := exec.Command(helmBin, args...)
helmCmd.Stdout = os.Stdout
helmCmd.Stderr = os.Stderr
helmCmd.Env = os.Environ()
if err := helmCmd.Run(); err != nil {
return fmt.Errorf("helm upgrade --install failed: %w", err)
}
ux.Logger.PrintToUser("\n%s deployed. Check status with: lux node status --%s", cfg.NetworkName, cfg.NetworkName)
return nil
}
// StartK8sMainnet deploys mainnet to Kubernetes via Helm.
func StartK8sMainnet() error {
return StartK8sNetwork(K8sNetworkConfig{
NetworkName: "mainnet",
Namespace: "lux-mainnet",
Image: k8sImage,
})
}
// StartK8sTestnet deploys testnet to Kubernetes via Helm.
func StartK8sTestnet() error {
return StartK8sNetwork(K8sNetworkConfig{
NetworkName: "testnet",
Namespace: "lux-testnet",
Image: k8sImage,
})
}
// StartK8sDevnet deploys devnet to Kubernetes via Helm.
func StartK8sDevnet() error {
return StartK8sNetwork(K8sNetworkConfig{
NetworkName: "devnet",
Namespace: "lux-devnet",
Image: k8sImage,
})
}