feat(engine): podman native — auto-detect runtime (docker→podman), compose mengikuti engine, doctor engine-agnostic
CI / test (push) Successful in 25s

This commit is contained in:
oxpoe committed 2026-10-16 02:08:37 +07:00
1 parent 1b9a406aa7
commit 0551fb1387
12 files changed
+292 -60

No files matched your search

+20 -17
View File
@@ -25,24 +25,30 @@ func Doctor(w io.Writer) int {
fail := 0
// Docker — dependency inti.
switch cl, err := docker.New(); {
// Konfigurasi dimuat lebih dulu — host & compose dipakai di bawah.
cfg, cfgErr := config.Load()
// Engine Docker/Podman — dependency inti (auto-detect bila host kosong).
engineName := ""
switch cl, engine, err := docker.Detect(cfg.Docker.Host); {
case err != nil:
fmt.Fprintf(w, "docker : %s %v\n", i18n.T("error.fail"), err)
fmt.Fprintf(w, "engine : %s %v\n", i18n.T("error.fail"), err)
fail++
default:
defer cl.Close()
if err := cl.Ping(ctx); err != nil {
fmt.Fprintf(w, "docker : %s %s\n", i18n.T("error.fail"),
i18n.Tf("doctor.dockerDaemonUnreachable", err))
fail++
} else if info, err := cl.Info(ctx); err != nil {
fmt.Fprintf(w, "docker : %s %v\n", i18n.T("error.warn"), err)
engineName = engine.Name
host := engine.Host
if host == "" {
host = i18n.T("doctor.hostDefault")
}
if info, err := cl.Info(ctx); err != nil {
fmt.Fprintf(w, "engine : %s %s %v\n", i18n.T("error.warn"), engine.Name, err)
} else {
fmt.Fprintf(w, "docker : %s %s\n", i18n.T("error.ok"),
i18n.Tf("doctor.dockerOk", info.ServerVersion, info.APIVersion,
fmt.Fprintf(w, "engine : %s %s\n", i18n.T("error.ok"),
i18n.Tf("doctor.engineOk", engine.Name, info.ServerVersion, info.APIVersion,
info.Running, info.Containers, info.Images))
}
fmt.Fprintf(w, "socket : %s\n", host)
}
// Audio — opsional; engine init async, tunggu maks 2 dtk.
@@ -52,15 +58,12 @@ func Doctor(w io.Writer) int {
fmt.Fprintf(w, "go : %s (%s/%s)\n", runtime.Version(), runtime.GOOS, runtime.GOARCH)
// Konfigurasi (dipakai compose, stack, dan output config di bawah).
cfg, cfgErr := config.Load()
// Compose — dipakai operasi stack (up/down/pull).
compose := docker.NewCompose(cfg.Docker.ComposeCommand)
// Compose — dipakai operasi stack (up/down/pull); "auto" mengikuti engine.
compose := docker.NewCompose(cfg.Docker.ComposeCommand, engineName)
if ver, err := compose.Version(ctx); err != nil {
fmt.Fprintf(w, "compose : %s %v\n", i18n.T("error.warn"), err)
} else {
fmt.Fprintf(w, "compose : %s %s\n", i18n.T("error.ok"), i18n.Tf("doctor.composeOk", ver, cfg.Docker.ComposeCommand))
fmt.Fprintf(w, "compose : %s %s\n", i18n.T("error.ok"), i18n.Tf("doctor.composeOk", ver, compose.Command()))
}
cfgPath := config.Path()