mirror of
https://github.com/luxfi/cli.git
synced 2026-10-30 17:01:20 +00:00
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.
115 lines
3.2 KiB
Go
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,
|
|
})
|
|
}
|