|
| 1 | +.PHONY: all build clean link mock unit-tests docs |
| 2 | + |
| 3 | +BINARY_NAME=model-cli |
| 4 | + |
| 5 | +PLUGIN_DIR=$(HOME)/.docker/cli-plugins |
| 6 | +PLUGIN_NAME=docker-model |
| 7 | + |
| 8 | +VERSION ?= |
| 9 | + |
| 10 | +MACOS_MIN_VERSION := 14.0 |
| 11 | +MACOS_MIN_VERSION_LDFLAG := -mmacosx-version-min=$(MACOS_MIN_VERSION) |
| 12 | + |
| 13 | +all: build |
| 14 | + |
| 15 | +build: |
| 16 | + @echo "Building $(BINARY_NAME)..." |
| 17 | + go build -ldflags="-s -w" -o $(BINARY_NAME) . |
| 18 | + |
| 19 | +link: |
| 20 | + @if [ ! -f $(BINARY_NAME) ]; then \ |
| 21 | + echo "Binary not found, building first..."; \ |
| 22 | + $(MAKE) build; \ |
| 23 | + else \ |
| 24 | + echo "Using existing binary $(BINARY_NAME)"; \ |
| 25 | + fi |
| 26 | + @echo "Linking $(BINARY_NAME) to Docker CLI plugins directory..." |
| 27 | + @mkdir -p $(PLUGIN_DIR) |
| 28 | + @ln -sf $(shell pwd)/$(BINARY_NAME) $(PLUGIN_DIR)/$(PLUGIN_NAME) |
| 29 | + @echo "Link created: $(PLUGIN_DIR)/$(PLUGIN_NAME)" |
| 30 | + |
| 31 | +install: build link |
| 32 | + |
| 33 | +release: |
| 34 | + @if [ -z "$(VERSION)" ]; then \ |
| 35 | + echo "Error: VERSION parameter is required. Use: make release VERSION=x.y.z"; \ |
| 36 | + exit 1; \ |
| 37 | + fi |
| 38 | + @echo "Building release version '$(VERSION)'..." |
| 39 | + GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 CGO_CFLAGS="$(MACOS_MIN_VERSION_LDFLAG)" CGO_LDFLAGS="$(MACOS_MIN_VERSION_LDFLAG)" go build -trimpath -ldflags="-s -w -X github.com/docker/model-cli/desktop.Version=$(VERSION)" -o dist/darwin-arm64/$(PLUGIN_NAME) . |
| 40 | + GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w -X github.com/docker/model-cli/desktop.Version=$(VERSION)" -o dist/windows-amd64/$(PLUGIN_NAME).exe . |
| 41 | + GOOS=windows GOARCH=arm64 go build -trimpath -ldflags="-s -w -X github.com/docker/model-cli/desktop.Version=$(VERSION)" -o dist/windows-arm64/$(PLUGIN_NAME).exe . |
| 42 | + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w -X github.com/docker/model-cli/desktop.Version=$(VERSION)" -o dist/linux-amd64/$(PLUGIN_NAME) . |
| 43 | + CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags="-s -w -X github.com/docker/model-cli/desktop.Version=$(VERSION)" -o dist/linux-arm64/$(PLUGIN_NAME) . |
| 44 | + @echo "Release build complete: $(PLUGIN_NAME) version '$(VERSION)'" |
| 45 | + |
| 46 | +ce-release: |
| 47 | + @if [ -z "$(VERSION)" ]; then \ |
| 48 | + echo "Error: VERSION parameter is required. Use: make release VERSION=x.y.z"; \ |
| 49 | + exit 1; \ |
| 50 | + fi |
| 51 | + @if [ "$(uname -s)" != "Linux" ]; then \ |
| 52 | + echo "Warning: This release target is designed for Linux"; \ |
| 53 | + fi |
| 54 | + @echo "Building local release version '$(VERSION)'..." |
| 55 | + CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w -X github.com/docker/model-cli/desktop.Version=$(VERSION)" -o dist/$(PLUGIN_NAME) . |
| 56 | + @echo "Local release build complete: $(PLUGIN_NAME) version '$(VERSION)'" |
| 57 | + |
| 58 | +mock: |
| 59 | + @echo "Generating mocks..." |
| 60 | + @mkdir -p mocks |
| 61 | + @go generate ./... |
| 62 | + @echo "Mocks generated!" |
| 63 | + |
| 64 | +unit-tests: |
| 65 | + @echo "Running unit tests..." |
| 66 | + @go test -race -v ./... |
| 67 | + @echo "Unit tests completed!" |
| 68 | + |
| 69 | +clean: |
| 70 | + @echo "Cleaning up..." |
| 71 | + @rm -f $(BINARY_NAME) |
| 72 | + @echo "Cleaned!" |
| 73 | + |
| 74 | +docs: |
| 75 | + $(eval $@_TMP_OUT := $(shell mktemp -d -t model-cli-output.XXXXXXXXXX)) |
| 76 | + docker buildx bake --allow=fs.read=$(shell cd ../.. && pwd) --set "*.output=type=local,dest=$($@_TMP_OUT)" update-docs |
| 77 | + rm -rf ./docs/reference/* |
| 78 | + cp -R "$($@_TMP_OUT)"/* ./docs/reference/ |
| 79 | + rm -rf "$($@_TMP_OUT)"/* |
0 commit comments