Files
homarr/tools/homarr-dev/internal/task/build_probe_test.go
T
+12 fcd7c979df feat!: release v2 (#6545)
Co-authored-by: Artur <145776561+arturict@users.noreply.github.com>
Co-authored-by: arturict <arturict@users.noreply.github.com>
Co-authored-by: Thomas <thomas@ajnart.fr>
Co-authored-by: Afonso Jorge Ramos <afonsojorgeramos@gmail.com>
Co-authored-by: Danura30082 <danura30082+github@gmail.com>
Co-authored-by: Kushie <122986913+kushiemoon-dev@users.noreply.github.com>
Co-authored-by: ajnart <thomas@ajnart.fr>
Co-authored-by: ajnart <thomas@ajnart.dev>
Co-authored-by: chenjun <chenjun@foxmail.com>
Co-authored-by: Wikibear <wikibear@users.noreply.github.com>
Co-authored-by: Bergasha <bergasha@gmail.com>
Co-authored-by: leafyelin <43306196+leafyelin@users.noreply.github.com>
Co-authored-by: Lucas Araujo <lucas.lra@gmail.com>
Co-authored-by: GreenMonito <86085570+GreenMonito@users.noreply.github.com>
Co-authored-by: Nerdy-Technician <roffo@nerdy-technician.social>
Co-authored-by: Jun <34545896+jcstrong@users.noreply.github.com>
Co-authored-by: Edmond Abraham <54119952+gitedmond@users.noreply.github.com>
Co-authored-by: thrawnx <tight.bulb9384@fastmail.com>
Co-authored-by: Chris <58918656+nordada@users.noreply.github.com>
Co-authored-by: yi111 <153097222+Yi-111-a@users.noreply.github.com>
Co-authored-by: Yanis <naamaneyanis@gmail.com>
Co-authored-by: Wikibear <me@sej.de>
Co-authored-by: alessiottavo <93441886+alessiottavo@users.noreply.github.com>
2026-10-02 21:00:14 +02:00

60 lines
1.8 KiB
Go

package task
import (
"context"
"os"
"path/filepath"
"testing"
"github.com/homarr-labs/homarr/tools/homarr-dev/internal/docker"
)
// Exercises the real BuildKit streaming and parsing path against a small
// Dockerfile, so the step tracker is validated on genuine output.
func TestBuildImageStreamsRealSteps(t *testing.T) {
if testing.Short() || os.Getenv("HOMARR_INTEGRATION_TEST") != "1" {
t.Skip("skipping docker build probe test; set HOMARR_INTEGRATION_TEST=1 to run")
}
dir := t.TempDir()
dockerfile := `FROM alpine:3.20 AS base
RUN echo "hello from step two" && sleep 1
FROM base AS final
RUN echo "third step" > /out.txt
RUN cat /out.txt
`
if err := os.WriteFile(filepath.Join(dir, "Dockerfile"), []byte(dockerfile), 0o644); err != nil {
t.Fatal(err)
}
manager := NewManager()
task := manager.Build("build homarr:cli-probe", "homarr:cli-probe", docker.BuildOptions{
Context: dir, Tag: "cli-probe", Source: dir, Revision: "probe",
})
t.Cleanup(func() { _ = docker.RemoveImage(context.Background(), "homarr:cli-probe") })
for range 600 {
<-manager.Changed()
if snapshot, _ := manager.Snapshot(task.ID()); snapshot.State.Done() {
t.Logf("state=%s percent=%.2f detail=%q err=%v", snapshot.State, snapshot.Percent, snapshot.Detail, snapshot.Err)
for _, step := range snapshot.Steps {
t.Logf(" #%-3s done=%-5v %-46s %s", step.ID, step.Done, truncate(step.Label, 46), step.Note)
}
if snapshot.State != StateSucceeded {
t.Fatalf("build did not succeed: %v", snapshot.Err)
}
if len(snapshot.Steps) < 4 {
t.Fatalf("expected several build steps, got %d", len(snapshot.Steps))
}
return
}
}
t.Fatal("build did not finish")
}
func truncate(value string, width int) string {
if len(value) <= width {
return value
}
return value[:width]
}