Преглед изворни кода

Cleanup Makefiles

* add `make help` target
* remove unused variables
* add .exe to the binary name when on windows
* add ldflags to go build to strip the binary (smaller binary size)
* `make protos` must be executed manually when proto files change
Djordje Lukic пре 5 година
родитељ
комит
ba8c824436
4 измењених фајлова са 32 додато и 22 уклоњено
  1. 2 2
      Dockerfile
  2. 9 10
      Makefile
  3. 5 3
      README.md
  4. 16 7
      builder.Makefile

+ 2 - 2
Dockerfile

@@ -21,13 +21,13 @@ ADD . ${PWD}
 FROM fs AS make-protos
 RUN make -f builder.Makefile protos
 
-FROM make-protos AS make-cli
+FROM fs AS make-cli
 RUN --mount=type=cache,target=/root/.cache/go-build \
     GOOS=${TARGET_OS} \
     GOARCH=${TARGET_ARCH} \
     make -f  builder.Makefile cli
 
-FROM make-protos AS make-cross
+FROM fs AS make-cross
 RUN --mount=type=cache,target=/root/.cache/go-build \
     make -f builder.Makefile cross
 

+ 9 - 10
Makefile

@@ -23,39 +23,38 @@
 # ARISING FROM, OUT OF OR IN CONNECTION WITH
 # THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-GIT_COMMIT=$(shell git rev-parse --short HEAD)
 GOOS ?= $(shell go env GOOS)
 GOARCH ?= $(shell go env GOARCH)
 
-PROTOS=$(shell find . -name \*.proto)
-
 export DOCKER_BUILDKIT=1
 
 all: cli
 
-protos:
+protos: ## Generate go code from .proto files
 	@docker build . \
 	--target protos
 
-cli:
+cli: ## Compile the cli
 	@docker build . \
 	--output type=local,dest=./bin \
 	--build-arg TARGET_OS=${GOOS} \
 	--build-arg TARGET_ARCH=${GOARCH} \
 	--target cli
 
-cross:
+cross: ## Compile the CLI for linux, darwin and windows
 	@docker build . \
 	--output type=local,dest=./bin \
 	--target cross
 
-test:
+test: ## Run unit tests
 	@docker build . \
 	--target test
 
-cache-clear:
+cache-clear: # Clear the builder cache
 	@docker builder prune --force --filter type=exec.cachemount --filter=unused-for=24h
 
-FORCE:
+help: ## Show help
+	@echo Please specify a build target. The choices are:
+	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
 
-.PHONY: all protos cli cross
+.PHONY: all protos cli cross test cache-clear help

+ 5 - 3
README.md

@@ -4,10 +4,12 @@
 
 ## Dev Setup
 
-To setup a development machine to update the API protobufs, first run the  `./setup-dev.sh` script to install the correct version of protobufs on your system and get the protobuild binary.
+Make sure you have Docker installed and running.
 
-## Building the API Project
+## Building the project
 
 ```bash
-> make
+$ make
 ```
+
+If you make changes to the `.proto` files, make sure to `make protos` to generate go code.

+ 16 - 7
builder.Makefile

@@ -23,13 +23,22 @@
 # ARISING FROM, OUT OF OR IN CONNECTION WITH
 # THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-GIT_COMMIT=$(shell git rev-parse --short HEAD)
 GOOS ?= $(shell go env GOOS)
 GOARCH ?= $(shell go env GOARCH)
 
 PROTOS=$(shell find . -name \*.proto)
 
-export DOCKER_BUILDKIT=1
+EXTENSION :=
+ifeq ($(GOOS),windows)
+  EXTENSION := .exe
+endif
+
+STATIC_FLAGS= CGO_ENABLED=0
+LDFLAGS := "-s -w"
+GO_BUILD = $(STATIC_FLAGS) go build -trimpath -ldflags=$(LDFLAGS)
+
+BINARY=bin/docker
+BINARY_WITH_EXTENSION=$(BINARY)$(EXTENSION)
 
 all: cli
 
@@ -38,16 +47,16 @@ protos:
 	@goimports -w -local github.com/docker/api .
 
 cli:
-	GOOS=${GOOS} GOARCH=${GOARCH} go build -v -o bin/docker ./cli
+	GOOS=${GOOS} GOARCH=${GOARCH} $(GO_BUILD) -o $(BINARY_WITH_EXTENSION) ./cli
 
 cross:
-	@GOOS=linux   GOARCH=amd64 go build -v -o bin/docker-linux-amd64 ./cli
-	@GOOS=darwin  GOARCH=amd64 go build -v -o bin/docker-darwin-amd64 ./cli
-	@GOOS=windows GOARCH=amd64 go build -v -o bin/docker-windows-amd64.exe ./cli
+	@GOOS=linux   GOARCH=amd64 $(GO_BUILD) -o $(BINARY)-linux-amd64 ./cli
+	@GOOS=darwin  GOARCH=amd64 $(GO_BUILD) -o $(BINARY)-darwin-amd64 ./cli
+	@GOOS=windows GOARCH=amd64 $(GO_BUILD) -o $(BINARY)-windows-amd64.exe ./cli
 
 test:
 	@gotestsum ./...
 
 FORCE:
 
-.PHONY: all protos cli cross
+.PHONY: all protos cli cross test