diff --git a/BUILD.bit b/BUILD.bit new file mode 100644 index 0000000..9b88534 --- /dev/null +++ b/BUILD.bit @@ -0,0 +1,64 @@ +# Enable verbose mode +param verbose : bool = false + +# Build client and server binaries +cachew = go.exe { + package = "./cmd/cachew" + output = "dist/cachew" +} + +cachewd = go.exe { + package = "./cmd/cachewd" + output = "dist/cachewd" +} + +# Cross-compile Linux binaries for Docker +cachew-linux = go.exe { + package = "./cmd/cachew" + output = "dist/cachew-linux-arm64" + cgo = false + goos = "linux" + goarch = "amd64" +} + +cachewd-linux = go.exe { + package = "./cmd/cachewd" + output = "dist/cachewd-linux-arm64" + cgo = false + goos = "linux" + goarch = "arm64" +} + +# Tests +test = go.test { + package = "./..." + flags = ["-timeout", "30s", "-race"] + verbose = verbose +} + +# Lint +lint = go.lint {} + +# Docker image +image = docker.image { + tag = "cachew:latest" + context = "." + dockerfile = "docker/Dockerfile" + depends_on = [cachew-linux, cachewd-linux] +} + +container = docker.container { + image = image.ref + name = "cachew" + ports = ["8080:8080"] + healthcheck = "curl -sf http://localhost:8080/_readiness" +} + +# Build binaries +target build = [cachew, cachewd] + +# Run tests and linting +target test = [test, lint] + +# Build and run Docker container +target docker = [container] diff --git a/internal/s3client/s3clienttest/s3clienttest.go b/internal/s3client/s3clienttest/s3clienttest.go index 866696b..71ecb69 100644 --- a/internal/s3client/s3clienttest/s3clienttest.go +++ b/internal/s3client/s3clienttest/s3clienttest.go @@ -128,10 +128,16 @@ func startContainer(t *testing.T) { "-e", "MINIO_ROOT_PASSWORD="+Password, "minio/minio", "server", "/data", ) - if output, err := cmd.CombinedOutput(); err != nil { - if !strings.Contains(string(output), "already in use") { - t.Fatalf("failed to start minio container: %v\n%s", err, output) - } + output, err := cmd.CombinedOutput() + if err == nil { + return + } + if !strings.Contains(string(output), "already in use") { + t.Fatalf("failed to start minio container: %v\n%s", err, output) + } + // Container exists but may be stopped — try restarting it. + if restartOut, restartErr := exec.CommandContext(t.Context(), "docker", "start", containerName).CombinedOutput(); restartErr != nil { + t.Fatalf("failed to restart existing minio container: %v\n%s", restartErr, restartOut) } }