@@ -20,6 +20,7 @@ import (
2020 "os"
2121 "os/exec"
2222 "path/filepath"
23+ "runtime"
2324 "strconv"
2425 "strings"
2526 "testing"
@@ -53,15 +54,27 @@ func run(m *testing.M) int {
5354 fmt .Fprintf (os .Stderr , "e2e: %v\n " , err )
5455 return 1
5556 }
57+ cliBin = filepath .Join (root , "cmd" , "cli" , "model-cli" )
58+
59+ if runtime .GOOS == "darwin" {
60+ return runNative (m , root )
61+ }
62+ return runDocker (m , root )
63+ }
5664
57- fmt .Fprintln (os .Stderr , "e2e: building server and CLI..." )
65+ // runNative builds the server from source and runs it as a local process.
66+ func runNative (m * testing.M , root string ) int {
67+ fmt .Fprintln (os .Stderr , "e2e: building llama.cpp, server, and CLI..." )
68+ if err := makeTarget (root , "build-llamacpp" ); err != nil {
69+ fmt .Fprintf (os .Stderr , "e2e: make build-llamacpp failed: %v\n " , err )
70+ return 1
71+ }
5872 if err := makeTarget (root , "build" ); err != nil {
5973 fmt .Fprintf (os .Stderr , "e2e: make build failed: %v\n " , err )
6074 return 1
6175 }
6276
6377 serverBin := filepath .Join (root , "model-runner" )
64- cliBin = filepath .Join (root , "cmd" , "cli" , "model-cli" )
6578 llamaBin := filepath .Join (root , "llamacpp" , "install" , "bin" )
6679
6780 for _ , path := range []string {serverBin , cliBin , llamaBin } {
@@ -110,7 +123,38 @@ func run(m *testing.M) int {
110123 return 1
111124 }
112125 fmt .Fprintf (os .Stderr , "e2e: server ready at %s\n " , serverURL )
126+ return m .Run ()
127+ }
128+
129+ // runDocker builds the Docker image and CLI from source, then lets the CLI
130+ // auto-start the model-runner container on the default Moby port (12434).
131+ func runDocker (m * testing.M , root string ) int {
132+ fmt .Fprintln (os .Stderr , "e2e: building Docker image and CLI..." )
133+ if err := makeTarget (root , "docker-build" ); err != nil {
134+ fmt .Fprintf (os .Stderr , "e2e: make docker-build failed: %v\n " , err )
135+ return 1
136+ }
137+ if err := makeTarget (root , "build-cli" ); err != nil {
138+ fmt .Fprintf (os .Stderr , "e2e: make build-cli failed: %v\n " , err )
139+ return 1
140+ }
141+
142+ fmt .Fprintln (os .Stderr , "e2e: installing runner..." )
143+ cmd := exec .Command (cliBin , "install-runner" )
144+ cmd .Env = os .Environ ()
145+ cmd .Stdout = os .Stderr
146+ cmd .Stderr = os .Stderr
147+ if err := cmd .Run (); err != nil {
148+ fmt .Fprintf (os .Stderr , "e2e: install-runner failed: %v\n " , err )
149+ return 1
150+ }
113151
152+ serverURL = "http://localhost:12434"
153+ if err := waitForServer (serverURL + "/models" , serverStartTimeout ); err != nil {
154+ fmt .Fprintf (os .Stderr , "e2e: %v\n " , err )
155+ return 1
156+ }
157+ fmt .Fprintf (os .Stderr , "e2e: server ready at %s\n " , serverURL )
114158 return m .Run ()
115159}
116160
0 commit comments