diff --git a/.drone.yml b/.drone.yml index ba328de..05f3131 100644 --- a/.drone.yml +++ b/.drone.yml @@ -6,7 +6,7 @@ steps: - name: build-linux-amd64 image: docker.io/volkerraschek/build-image:latest commands: - - make --jobs=$(nproc) bin/linux/amd64/flucky + - make when: event: - push diff --git a/.gitignore b/.gitignore index 3038634..277e1db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,6 @@ # absolute files +bin .env -flucky -flucky.rpm -flucky.tar.bz2 -flucky.tar.gz -flucky.tar.xz - -# relative files -**/bindata*.go # directories .vscode/ diff --git a/Makefile b/Makefile index ebb3990..4f78f7a 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,9 @@ -# VERSION -# If no version is specified as a parameter of make, the last git hash -# value is taken. VERSION?=$(shell git describe --abbrev=0)+$(shell date +'%Y%m%d%H%I%S') -# CONTAINER_RUNTIME -# The CONTAINER_RUNTIME variable will be used to specified the path to a -# container runtime. This is needed to start and run a container images. -CONTAINER_RUNTIME?=$(shell which docker) -CONTAINER_IMAGE_VERSION?=latest +EXECUTABLE:=flucky -# EXECUTABLE -EXECUTABLE=flucky +DESTDIR?= +PREFIX?=/usr/local # BINARIES # ============================================================================== @@ -55,6 +48,28 @@ bin/tmp/${EXECUTABLE}: GOPRIVATE=$(shell go env GOPRIVATE) \ go build -ldflags "-X main.version=${VERSION:v%=%}" -o ${@} +# COMPLETIONS +# ============================================================================== +bin/tmp/${EXECUTABLE}.sh: bin/tmp/${EXECUTABLE} + bin/tmp/${EXECUTABLE} completion bash > ${@} + +bin/tmp/${EXECUTABLE}.fish: bin/tmp/${EXECUTABLE} + bin/tmp/${EXECUTABLE} completion fish > ${@} + +bin/tmp/${EXECUTABLE}.zsh: bin/tmp/${EXECUTABLE} + bin/tmp/${EXECUTABLE} completion zsh > ${@} + +# INSTALL +# ============================================================================== +PHONY+=install +install: bin/tmp/${EXECUTABLE} bin/tmp/${EXECUTABLE}.sh bin/tmp/${EXECUTABLE}.fish bin/tmp/${EXECUTABLE}.zsh + install --directory ${DESTDIR}${PREFIX}/bin + install --mode 755 bin/tmp/${EXECUTABLE} ${DESTDIR}${PREFIX}/bin/${EXECUTABLE} + install --directory ${DESTDIR}/etc/bash_completion.d/ + install --mode 755 bin/tmp/${EXECUTABLE}.sh ${DESTDIR}/etc/bash_completion.d/${EXECUTABLE}.sh + install --directory ${DESTDIR}/usr/share/fish/vendor_functions.d/ + install --mode 755 bin/tmp/${EXECUTABLE}.fish ${DESTDIR}/usr/share/fish/vendor_functions.d/${EXECUTABLE}.fish + # CLEAN # ============================================================================== PHONY+=clean @@ -67,86 +82,10 @@ PHONY+=test/unit test/unit: go test -v -race -coverprofile=coverage.txt -covermode=atomic -timeout 600s -count=1 ./pkg/... +PHONY+=test/coverage test/coverage: test/unit go tool cover -html=coverage.txt -# CONTAINER IMAGE STEPS -# ============================================================================== -PHONY+=container-image/build/amd64 -container-image/build/amd64: - ${CONTAINER_RUNTIME} build \ - --build-arg BASE_IMAGE=docker.io/library/alpine:3.11.2 \ - --build-arg BUILD_IMAGE=docker.io/volkerraschek/build-image:latest \ - --build-arg EXECUTABLE=${EXECUTABLE} \ - --build-arg EXECUTABLE_TARGET=bin/linux/amd64/${EXECUTABLE} \ - --build-arg GOPROXY=$(shell go env GOPROXY) \ - --build-arg GOPRIVATE=$(shell go env GOPRIVATE) \ - --build-arg VERSION=${VERSION} \ - --file Dockerfile \ - --no-cache \ - --tag docker.io/volkerraschek/flucky:${CONTAINER_IMAGE_VERSION} \ - --tag volkerraschek/flucky:${CONTAINER_IMAGE_VERSION} \ - . - -PHONY+=container-image/push/amd64 -container-image/push/amd64: container-image/build/amd64 - ${CONTAINER_RUNTIME} login docker.io \ - --username ${CONTAINER_IMAGE_REGISTRY_USER} \ - --password ${CONTAINER_IMAGE_REGISTRY_PASSWORD} - ${CONTAINER_RUNTIME} push docker.io/volkerraschek/flucky:${CONTAINER_IMAGE_VERSION} - -# CONTAINER STEPS - BINARY -# ============================================================================== -# current os -PHONY+=container-run/${EXECUTABLE} -container-run/${EXECUTABLE}: - $(MAKE) container-run COMMAND=${@:container-run/%=%} - -# build all binaries for any operating system -PHONY+=container-run/all -container-run/all: - $(MAKE) container-run COMMAND=${@:container-run/%=%} - -PHONY+=${EXECUTABLE_TARGETS:%=container-run/%} -${EXECUTABLE_TARGETS:%=container-run/%}: - $(MAKE) container-run COMMAND=${@:container-run/%=%} - -# CONTAINER STEPS - CLEAN -# ============================================================================== -PHONY+=container-run/clean -container-run/clean: - $(MAKE) container-run COMMAND=${@:container-run/%=%} - -# CONTAINER STEPS - TEST -# ============================================================================== -PHONY+=container-run/test/unit -container-run/test/unit: - $(MAKE) container-run COMMAND=${@:container-run/%=%} - -# GENERAL CONTAINER COMMAND -# ============================================================================== -PHONY+=container-run -container-run: - ${CONTAINER_RUNTIME} run \ - --env GOPROXY=$(shell go env GOPROXY) \ - --env GOPRIVATE=$(shell go env GOPRIVATE) \ - --rm \ - --volume ${PWD}:/workspace \ - --volume /var/run/docker.sock:/var/run/docker.sock \ - docker.io/volkerraschek/build-image:latest \ - make ${COMMAND} \ - VERSION=${VERSION:v%=%} - -# REMOTE -# ============================================================================== -PHONY+=${FLUCKY_REMOTE:%=remote/%} -remote/${FLUCKY_REMOTE}: bin/linux/arm/7/${EXECUTABLE} - scp bin/linux/arm/7/${EXECUTABLE} root@${FLUCKY_REMOTE}:/usr/local/bin/${EXECUTABLE} - # ssh root@${FLUCKY_REMOTE} 'mkdir --parent /etc/bash_completion.d || true' - # ssh root@${FLUCKY_REMOTE} 'flucky completion bash > /etc/bash_completion.d/flucky.sh && chmod +x /etc/bash_completion.d/flucky.sh' - # ssh root@${FLUCKY_REMOTE} 'flucky completion zsh > /etc/bash_completion.d/flucky.zsh && chmod +x /etc/bash_completion.d/flucky.zsh' - ssh root@${FLUCKY_REMOTE} 'chmod +x /usr/local/bin/${EXECUTABLE}' - # PHONY # ============================================================================== # Declare the contents of the PHONY variable as phony. We keep that information