vikunja-api/Makefile

248 lines
8 KiB
Makefile
Raw Normal View History

2018-06-10 11:11:41 +02:00
DIST := dist
2018-07-25 16:26:32 +02:00
IMPORT := code.vikunja.io/api
2018-06-10 11:11:41 +02:00
SED_INPLACE := sed -i
ifeq ($(OS), Windows_NT)
2018-07-25 16:26:32 +02:00
EXECUTABLE := vikunja.exe
2018-06-10 11:11:41 +02:00
else
2018-07-25 16:26:32 +02:00
EXECUTABLE := vikunja
2018-06-10 11:11:41 +02:00
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
SED_INPLACE := sed -i ''
endif
endif
2020-06-28 14:00:10 +02:00
GOFILES := $(shell find . -name "*.go" -type f ! -path "*/bindata.go")
2018-06-10 11:11:41 +02:00
GOFMT ?= gofmt -s
EXTRA_GOFLAGS ?=
GOFLAGS := -v $(EXTRA_GOFLAGS)
2018-06-10 11:11:41 +02:00
2020-06-18 19:26:53 +02:00
LDFLAGS := -X "code.vikunja.io/api/pkg/version.Version=$(shell git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/')" -X "main.Tags=$(TAGS)"
2018-06-10 11:11:41 +02:00
2020-06-28 14:00:10 +02:00
PACKAGES ?= $(filter-out code.vikunja.io/api/pkg/integrations,$(shell go list))
2018-06-10 11:11:41 +02:00
SOURCES ?= $(shell find . -name "*.go" -type f)
TAGS ?=
ifeq ($(OS), Windows_NT)
2018-07-25 16:26:32 +02:00
EXECUTABLE := vikunja.exe
2018-06-10 11:11:41 +02:00
else
2018-07-25 16:26:32 +02:00
EXECUTABLE := vikunja
2018-06-10 11:11:41 +02:00
endif
ifneq ($(DRONE_TAG),)
VERSION ?= $(subst v,,$(DRONE_TAG))
else
ifneq ($(DRONE_BRANCH),)
VERSION ?= $(subst release/v,,$(DRONE_BRANCH))
else
VERSION ?= master
endif
endif
2019-01-21 22:52:26 +01:00
ifeq ($(DRONE_WORKSPACE),'')
BINLOCATION := $(EXECUTABLE)
else
BINLOCATION := $(DIST)/binaries/$(EXECUTABLE)-$(VERSION)-linux-amd64
endif
ifeq ($(VERSION),master)
PKGVERSION := $(shell git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/')
else
PKGVERSION := $(VERSION)
endif
2018-06-10 11:11:41 +02:00
.PHONY: all
all: build
.PHONY: clean
clean:
2018-10-27 11:33:28 +02:00
go clean ./...
2018-06-10 11:11:41 +02:00
rm -rf $(EXECUTABLE) $(DIST) $(BINDATA)
.PHONY: test
test:
# We run everything sequentially and not in parallel to prevent issues with real test databases
VIKUNJA_SERVICE_ROOTPATH=$(shell pwd) go test $(GOFLAGS) -p 1 -cover -coverprofile cover.out $(PACKAGES)
.PHONY: test-coverage
test-coverage: test
2018-07-27 19:20:49 +02:00
go tool cover -html=cover.out -o cover.html
2018-06-10 11:11:41 +02:00
2019-04-21 20:18:17 +02:00
.PHONY: integration-test
integration-test:
# We run everything sequentially and not in parallel to prevent issues with real test databases
VIKUNJA_SERVICE_ROOTPATH=$(shell pwd) go test $(GOFLAGS) -p 1 code.vikunja.io/api/pkg/integrations
2019-04-21 20:18:17 +02:00
2018-06-10 11:11:41 +02:00
.PHONY: lint
lint:
@hash golint > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2018-10-28 17:11:13 +01:00
go install $(GOFLAGS) golang.org/x/lint/golint; \
2018-06-10 11:11:41 +02:00
fi
for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done;
.PHONY: fmt
2019-02-17 20:53:04 +01:00
fmt:
2018-06-10 11:11:41 +02:00
$(GOFMT) -w $(GOFILES)
.PHONY: fmt-check
2019-02-17 20:53:04 +01:00
fmt-check:
2018-06-10 11:11:41 +02:00
# get all go files and run go fmt on them
@diff=$$($(GOFMT) -d $(GOFILES)); \
if [ -n "$$diff" ]; then \
echo "Please run 'make fmt' and commit the result:"; \
echo "$${diff}"; \
exit 1; \
fi;
.PHONY: build
build: generate $(EXECUTABLE)
2018-06-10 11:11:41 +02:00
.PHONY: generate
generate:
go generate code.vikunja.io/api/pkg/static
2018-06-10 11:11:41 +02:00
$(EXECUTABLE): $(SOURCES)
go build $(GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
2018-06-10 11:11:41 +02:00
.PHONY: compress-build
compress-build:
upx -9 $(EXECUTABLE)
2018-06-10 11:11:41 +02:00
.PHONY: release
2018-07-25 17:28:54 +02:00
release: release-dirs release-windows release-linux release-darwin release-copy release-check release-os-package release-zip
2018-06-10 11:11:41 +02:00
.PHONY: release-dirs
release-dirs:
mkdir -p $(DIST)/binaries $(DIST)/release $(DIST)/zip
.PHONY: release-windows
release-windows:
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2019-04-22 14:02:18 +02:00
go install $(GOFLAGS) src.techknowlogick.com/xgo; \
2018-06-10 11:11:41 +02:00
fi
2018-07-25 16:26:32 +02:00
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out vikunja-$(VERSION) .
2019-01-22 13:13:11 +01:00
ifneq ($(DRONE_WORKSPACE),'')
mv /build/* $(DIST)/binaries
endif
2018-06-10 11:11:41 +02:00
.PHONY: release-linux
release-linux:
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2019-04-22 14:02:18 +02:00
go install $(GOFLAGS) src.techknowlogick.com/xgo; \
2018-06-10 11:11:41 +02:00
fi
2018-07-25 16:26:32 +02:00
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out vikunja-$(VERSION) .
2019-01-22 13:13:11 +01:00
ifneq ($(DRONE_WORKSPACE),'')
mv /build/* $(DIST)/binaries
endif
2018-06-10 11:11:41 +02:00
.PHONY: release-darwin
release-darwin:
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2019-04-22 14:02:18 +02:00
go install $(GOFLAGS) src.techknowlogick.com/xgo; \
2018-06-10 11:11:41 +02:00
fi
2018-07-25 16:26:32 +02:00
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out vikunja-$(VERSION) .
2019-01-22 13:13:11 +01:00
ifneq ($(DRONE_WORKSPACE),'')
mv /build/* $(DIST)/binaries
endif
2018-06-10 11:11:41 +02:00
# Compresses all releases made by make release-* but not mips* releases since upx can't handle these.
.PHONY: release-compress
release-compress:
$(foreach file,$(filter-out $(wildcard $(wildcard $(DIST)/binaries/$(EXECUTABLE)-*mips*)),$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*)), upx -9 $(file);)
2018-06-10 11:11:41 +02:00
.PHONY: release-copy
release-copy:
$(foreach file,$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*),cp $(file) $(DIST)/release/$(notdir $(file));)
.PHONY: release-check
release-check:
cd $(DIST)/release; $(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),sha256sum $(notdir $(file)) > $(notdir $(file)).sha256;)
.PHONY: release-os-package
release-os-package:
$(foreach file,$(filter-out %.sha256,$(wildcard $(DIST)/release/$(EXECUTABLE)-*)),mkdir $(file)-full;mv $(file) $(file)-full/; mv $(file).sha256 $(file)-full/; cp config.yml.sample $(file)-full/config.yml; cp LICENSE $(file)-full/; )
2018-06-10 11:11:41 +02:00
.PHONY: release-zip
release-zip:
2018-06-13 13:45:22 +02:00
$(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),cd $(file); zip -r ../../zip/$(shell basename $(file)).zip *; cd ../../../; )
2019-01-21 22:52:26 +01:00
# Builds a deb package using fpm from a previously created binary (using make build)
.PHONY: build-deb
build-deb:
fpm -s dir -t deb --url https://vikunja.io -n vikunja -v $(PKGVERSION) --license GPLv3 --directories /opt/vikunja --after-install ./build/after-install.sh --description 'Vikunja is an open-source todo application, written in Go. It lets you create lists,tasks and share them via teams or directly between users.' -m maintainers@vikunja.io ./$(BINLOCATION)=/opt/vikunja/vikunja ./config.yml.sample=/etc/vikunja/config.yml;
2019-01-21 22:52:26 +01:00
.PHONY: reprepro
reprepro:
reprepro_expect debian includedeb strech ./$(EXECUTABLE)_$(PKGVERSION)_amd64.deb
.PHONY: got-swag
got-swag: do-the-swag
@diff=$$(git diff docs/swagger/swagger.json); \
2018-06-13 13:45:22 +02:00
if [ -n "$$diff" ]; then \
echo "Please run 'make do-the-swag' and commit the result:"; \
2018-06-13 13:45:22 +02:00
echo "$${diff}"; \
exit 1; \
fi;
.PHONY: do-the-swag
do-the-swag:
@hash swag > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
go install $(GOFLAGS) github.com/swaggo/swag/cmd/swag; \
2018-06-13 13:45:22 +02:00
fi
2020-06-28 16:25:46 +02:00
swag init -g pkg/routes/routes.go --parseDependency -o ./pkg/swagger;
# Fix the generated swagger file, currently a workaround until swaggo can properly use go mod
2019-07-16 00:54:38 +02:00
sed -i '/"definitions": {/a "code.vikunja.io.web.HTTPError": {"type": "object","properties": {"code": {"type": "integer"},"message": {"type": "string"}}},' pkg/swagger/docs.go;
sed -i 's/code.vikunja.io\/web.HTTPError/code.vikunja.io.web.HTTPError/g' pkg/swagger/docs.go;
sed -i 's/package\ docs/package\ swagger/g' pkg/swagger/docs.go;
sed -i 's/` + \\"`\\" + `/` + "`" + `/g' pkg/swagger/docs.go;
.PHONY: misspell-check
misspell-check:
@hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2018-10-28 17:11:13 +01:00
go install $(GOFLAGS) github.com/client9/misspell/cmd/misspell; \
fi
for S in $(GOFILES); do misspell -error $$S || exit 1; done;
.PHONY: ineffassign-check
ineffassign-check:
@hash ineffassign > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2018-10-28 17:11:13 +01:00
go install $(GOFLAGS) github.com/gordonklaus/ineffassign; \
fi
for S in $(GOFILES); do ineffassign $$S || exit 1; done;
.PHONY: gocyclo-check
gocyclo-check:
@hash gocyclo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2019-02-18 20:32:41 +01:00
go get -u github.com/fzipp/gocyclo; \
2018-10-28 17:11:13 +01:00
go install $(GOFLAGS) github.com/fzipp/gocyclo; \
fi
for S in $(GOFILES); do gocyclo -over 48 $$S || exit 1; done;
2018-12-28 23:15:05 +01:00
.PHONY: static-check
static-check:
2019-02-18 20:32:41 +01:00
@hash staticcheck > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
go get -u honnef.co/go/tools; \
2019-02-17 20:53:04 +01:00
go install $(GOFLAGS) honnef.co/go/tools/cmd/staticcheck; \
2018-12-28 23:15:05 +01:00
fi
2019-02-17 20:53:04 +01:00
staticcheck $(PACKAGES);
2018-12-28 23:15:05 +01:00
.PHONY: gosec-check
gosec-check:
2020-04-13 22:30:09 +02:00
@hash gosec > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
echo "Please manually install gosec by running"; \
echo "curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | bash -s -- -b $GOPATH/bin v2.2.0"; \
exit 1; \
2018-12-28 23:15:05 +01:00
fi
2020-04-13 22:30:09 +02:00
gosec ./...
2018-12-28 23:15:05 +01:00
.PHONY: goconst-check
goconst-check:
@hash goconst > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
2019-02-18 20:32:41 +01:00
go get -u github.com/jgautheron/goconst/cmd/goconst; \
go install $(GOFLAGS) github.com/jgautheron/goconst/cmd/goconst; \
2020-04-13 22:30:09 +02:00
fi;
2018-12-28 23:15:05 +01:00
for S in $(PACKAGES); do goconst $$S || exit 1; done;