50 lines
1.0 KiB
Go
50 lines
1.0 KiB
Go
package node
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"zlh-agent/internal/provision"
|
|
"zlh-agent/internal/provision/devcontainer"
|
|
"zlh-agent/internal/state"
|
|
)
|
|
|
|
/*
|
|
Install installs the Node.js dev container runtime.
|
|
|
|
Execution model:
|
|
- Uses local, versioned install scripts from the agent repo
|
|
- Scripts are responsible for fetching artifacts
|
|
- Artifact server is NOT an execution source
|
|
|
|
IMPORTANT:
|
|
- This function ONLY installs
|
|
- No verification here
|
|
*/
|
|
func Install(cfg state.Config) error {
|
|
|
|
// Idempotency guard
|
|
if devcontainer.IsProvisioned() {
|
|
return nil
|
|
}
|
|
|
|
// Local script path (inside agent repo / container)
|
|
scriptPath := filepath.Join(
|
|
provision.ScriptsRoot,
|
|
"devcontainer",
|
|
"node",
|
|
"install.sh",
|
|
)
|
|
|
|
if err := provision.RunScript(scriptPath); err != nil {
|
|
return fmt.Errorf("node devcontainer install failed: %w", err)
|
|
}
|
|
|
|
// Mark devcontainer ready
|
|
if err := devcontainer.WriteReadyMarker("node"); err != nil {
|
|
return fmt.Errorf("failed to write devcontainer ready marker: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|