diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 38b2b4c..b055ba5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,8 +21,8 @@ jobs: go-version: 1.16 - name: Build - run: ./go build + run: make build - name: Test - run: ./go test -v ./... + run: make test diff --git a/Makefile b/Makefile index 9d0abea..be9c47b 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,45 @@ -VERSION := `git describe --tags --match v[0-9]* 2> /dev/null` +# Build zk in the current folder. +build: + $(call go,build) + +# Build and install `zk` using go's default bin directory. +install: + $(call go,install) + +# Run unit tests. +test: + $(call go,test,./...) -all: macos linux +# Produce a release bundle for all platforms. +dist: dist-macos dist-linux rm -f zk -macos: - rm -f zk && ./go build && zip -r "zk-${VERSION}-macos-`uname -m`.zip" zk +# Produce a release bundle for macOS. +dist-macos: + rm -f zk && make && zip -r "zk-${VERSION}-macos-`uname -m`.zip" zk -linux: - rm -f zk && docker run --rm -v "${PWD}":/usr/src/zk -w /usr/src/zk mickaelmenu/zk-xcompile:linux-i386 /bin/bash -c './go build' && tar -zcvf "zk-${VERSION}-linux-i386.tar.gz" zk - rm -f zk && docker run --rm -v "${PWD}":/usr/src/zk -w /usr/src/zk mickaelmenu/zk-xcompile:linux-amd64 /bin/bash -c './go build' && tar -zcvf "zk-${VERSION}-linux-amd64.tar.gz" zk - rm -f zk && docker run --rm -v "${PWD}":/usr/src/zk -w /usr/src/zk mickaelmenu/zk-xcompile:linux-arm64 /bin/bash -c './go build' && tar -zcvf "zk-${VERSION}-linux-arm64.tar.gz" zk +# Produce a release bundle for Linux. +dist-linux: + rm -f zk && docker run --rm -v "${PWD}":/usr/src/zk -w /usr/src/zk mickaelmenu/zk-xcompile:linux-i386 /bin/bash -c 'make' && tar -zcvf "zk-${VERSION}-linux-i386.tar.gz" zk + rm -f zk && docker run --rm -v "${PWD}":/usr/src/zk -w /usr/src/zk mickaelmenu/zk-xcompile:linux-amd64 /bin/bash -c 'make' && tar -zcvf "zk-${VERSION}-linux-amd64.tar.gz" zk + rm -f zk && docker run --rm -v "${PWD}":/usr/src/zk -w /usr/src/zk mickaelmenu/zk-xcompile:linux-arm64 /bin/bash -c 'make' && tar -zcvf "zk-${VERSION}-linux-arm64.tar.gz" zk +# Clean build products. clean: rm -rf zk* + + +VERSION := `git describe --tags --match v[0-9]* 2> /dev/null` +BUILD := `git rev-parse --short HEAD` + +ENV_PREFIX := CGO_ENABLED=1 +# Add necessary env variables for Apple Silicon. +ifeq ($(shell uname -sm),Darwin arm64) + ENV_PREFIX := $(ENV) GOARCH=arm64 CGO_CFLAGS="-I/opt/homebrew/opt/icu4c/include" CGO_LDFLAGS="-L/opt/homebrew/opt/icu4c/lib" +endif + +# Wrapper around the go binary, to set all the default parameters. +define go + $(ENV_PREFIX) go $(1) -tags "fts5 icu" -ldflags "-X=main.Version=$(VERSION) -X=main.Build=$(BUILD)" $(2) +endef + diff --git a/README.md b/README.md index 307be7d..2e9e646 100644 --- a/README.md +++ b/README.md @@ -54,25 +54,17 @@ $ chmod a+x go ``` $ brew install icu4c -$ ./go build +$ make $ ./zk -h ``` -##### Apple Silicon - -The build command needs additional environment variables on Apple Silicon: - -``` -$ GOARCH=arm64 CGO_CFLAGS="-I/opt/homebrew/opt/icu4c/include" CGO_LDFLAGS="-L/opt/homebrew/opt/icu4c/lib" ./go build -``` - #### On Linux `libicu-dev` is required to build `zk`, use your favorite package manager to install it. ``` $ apt-install libicu-dev -$ ./go build +$ make $ ./zk -h ``` diff --git a/go b/go deleted file mode 100755 index a82e300..0000000 --- a/go +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -VERSION=`git describe --tags --match v[0-9]* 2> /dev/null` -BUILD=`git rev-parse --short HEAD` - -CGO_ENABLED=1 go $1 -tags "fts5 icu" -ldflags "-X=main.Version=$VERSION -X=main.Build=$BUILD" ${@:2}