zlh-agent/internal/provision/devcontainer/node/install.go
2026-03-15 11:06:08 +00:00

46 lines
1001 B
Go

package node
import (
"fmt"
"os"
"path/filepath"
"strings"
"zlh-agent/internal/provision/executil"
"zlh-agent/internal/provision/markers"
"zlh-agent/internal/state"
)
func Install(cfg state.Config) error {
marker := runtimeMarker(cfg.Version)
if runtimeInstalled(cfg.Version) {
if !markers.IsPresent(marker) {
return markers.Write(marker)
}
return nil
}
if markers.IsPresent(marker) {
return nil
}
if err := executil.RunEmbeddedScript(
"devcontainer/node/install.sh",
"RUNTIME=node",
"ARCHIVE_EXT=tar.xz",
"RUNTIME_VERSION="+cfg.Version,
); err != nil {
return fmt.Errorf("node devcontainer install failed: %w", err)
}
return markers.Write(marker)
}
func runtimeInstalled(version string) bool {
info, err := os.Stat(filepath.Join("/opt/zlh/runtimes/node", strings.TrimSpace(version)))
return err == nil && info.IsDir()
}
func runtimeMarker(version string) string {
return "devcontainer-node-" + strings.ReplaceAll(strings.TrimSpace(version), "/", "_")
}