@@ -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 } {
@@ -105,12 +118,42 @@ func run(m *testing.M) int {
105118 _ = server .Wait ()
106119 }()
107120
121+ return waitAndRunTests (m )
122+ }
123+
124+ // runDocker builds the Docker image and CLI from source, then lets the CLI
125+ // auto-start the model-runner container on the default Moby port (12434).
126+ func runDocker (m * testing.M , root string ) int {
127+ fmt .Fprintln (os .Stderr , "e2e: building Docker image and CLI..." )
128+ if err := makeTarget (root , "docker-build" ); err != nil {
129+ fmt .Fprintf (os .Stderr , "e2e: make docker-build failed: %v\n " , err )
130+ return 1
131+ }
132+ if err := makeTarget (root , "build-cli" ); err != nil {
133+ fmt .Fprintf (os .Stderr , "e2e: make build-cli failed: %v\n " , err )
134+ return 1
135+ }
136+
137+ fmt .Fprintln (os .Stderr , "e2e: installing runner..." )
138+ cmd := exec .Command (cliBin , "install-runner" )
139+ cmd .Env = os .Environ ()
140+ cmd .Stdout = os .Stderr
141+ cmd .Stderr = os .Stderr
142+ if err := cmd .Run (); err != nil {
143+ fmt .Fprintf (os .Stderr , "e2e: install-runner failed: %v\n " , err )
144+ return 1
145+ }
146+
147+ serverURL = "http://localhost:12434"
148+ return waitAndRunTests (m )
149+ }
150+
151+ func waitAndRunTests (m * testing.M ) int {
108152 if err := waitForServer (serverURL + "/models" , serverStartTimeout ); err != nil {
109153 fmt .Fprintf (os .Stderr , "e2e: %v\n " , err )
110154 return 1
111155 }
112156 fmt .Fprintf (os .Stderr , "e2e: server ready at %s\n " , serverURL )
113-
114157 return m .Run ()
115158}
116159
0 commit comments