58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package devcontainer
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"zlh-agent/internal/state"
|
|
|
|
devgo "zlh-agent/internal/provision/devcontainer/go"
|
|
"zlh-agent/internal/provision/devcontainer/java"
|
|
"zlh-agent/internal/provision/devcontainer/node"
|
|
"zlh-agent/internal/provision/devcontainer/python"
|
|
)
|
|
|
|
/*
|
|
Provision — entrypoint for dev container provisioning.
|
|
|
|
IMPORTANT:
|
|
- This function ONLY performs installation.
|
|
- Verification happens in ensureProvisioned().
|
|
- state.Config is treated as immutable desired state.
|
|
- Routing is based strictly on cfg.Runtime.
|
|
*/
|
|
func Provision(cfg state.Config) error {
|
|
|
|
runtime := strings.ToLower(cfg.Runtime)
|
|
|
|
switch runtime {
|
|
|
|
case "node":
|
|
if err := node.Install(cfg); err != nil {
|
|
return fmt.Errorf("node devcontainer install failed: %w", err)
|
|
}
|
|
|
|
case "python":
|
|
if err := python.Install(cfg); err != nil {
|
|
return fmt.Errorf("python devcontainer install failed: %w", err)
|
|
}
|
|
|
|
case "go":
|
|
if err := devgo.Install(cfg); err != nil {
|
|
return fmt.Errorf("go devcontainer install failed: %w", err)
|
|
}
|
|
|
|
case "java":
|
|
if err := java.Install(cfg); err != nil {
|
|
return fmt.Errorf("java devcontainer install failed: %w", err)
|
|
}
|
|
|
|
default:
|
|
return fmt.Errorf("unsupported dev container runtime: %s", runtime)
|
|
}
|
|
|
|
// DO NOT VERIFY HERE.
|
|
// Verification happens in ensureProvisioned().
|
|
return nil
|
|
}
|