08205008e7
Fix query param name Add option to include null results when filtering Always set db time to gmt Fix null filter Fix timezone setting for todoist parsing Fix timezone setting for wunderlist parsing Fix import Fix caldav reminder parsing Use timezone from config Add error and test for invalid filter values Fix integration tests Remove task collection date hack Fix task filter Fix lint Fix tests and fixtures for date timezone stuff Properly set timezone Change fixtures time zone to gmt Set db timezone Set created and updated timestamps for all fixtures Fix lint Fix test fixtures Fix misspell Fix test fixtures Partially fix tests Remove timeutil package Remove adding _unix suffix hack Remove _unix suffix Move all timeutil.TimeStamp to time.Time Remove all Unix suffixes in field names Add better error messages when running migrations Make sure to not migrate 0 unix timestamps to 1970 iso dates Add migration script for sqlite Add converting sqlite values Convert 0 unix timestamps to null in postgres Convert 0 to null in timestamps Automatically rename _unix suffix Add all tables and columns for migration Fix sql migration query for mysql Fail with an error if trying to use an unsupported dbms Co-authored-by: kolaente <k@knt.li> Reviewed-on: https://kolaente.dev/vikunja/api/pulls/594
247 lines
8.1 KiB
Makefile
247 lines
8.1 KiB
Makefile
DIST := dist
|
|
IMPORT := code.vikunja.io/api
|
|
|
|
SED_INPLACE := sed -i
|
|
|
|
ifeq ($(OS), Windows_NT)
|
|
EXECUTABLE := vikunja.exe
|
|
else
|
|
EXECUTABLE := vikunja
|
|
UNAME_S := $(shell uname -s)
|
|
ifeq ($(UNAME_S),Darwin)
|
|
SED_INPLACE := sed -i ''
|
|
endif
|
|
endif
|
|
|
|
GOFILES := $(shell find . -name "*.go" -type f ! -path "./vendor/*" ! -path "*/bindata.go")
|
|
GOFMT ?= gofmt -s
|
|
|
|
GOFLAGS := -v -mod=vendor
|
|
EXTRA_GOFLAGS ?=
|
|
|
|
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)"
|
|
|
|
PACKAGES ?= $(filter-out code.vikunja.io/api/pkg/integrations,$(shell go list -mod=vendor ./... | grep -v /vendor/))
|
|
SOURCES ?= $(shell find . -name "*.go" -type f)
|
|
|
|
TAGS ?=
|
|
|
|
ifeq ($(OS), Windows_NT)
|
|
EXECUTABLE := vikunja.exe
|
|
else
|
|
EXECUTABLE := vikunja
|
|
endif
|
|
|
|
ifneq ($(DRONE_TAG),)
|
|
VERSION ?= $(subst v,,$(DRONE_TAG))
|
|
else
|
|
ifneq ($(DRONE_BRANCH),)
|
|
VERSION ?= $(subst release/v,,$(DRONE_BRANCH))
|
|
else
|
|
VERSION ?= master
|
|
endif
|
|
endif
|
|
|
|
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
|
|
|
|
.PHONY: all
|
|
all: build
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
go clean ./...
|
|
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
|
|
go tool cover -html=cover.out -o cover.html
|
|
|
|
.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
|
|
|
|
.PHONY: lint
|
|
lint:
|
|
@hash golint > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
|
go install $(GOFLAGS) golang.org/x/lint/golint; \
|
|
fi
|
|
for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done;
|
|
|
|
.PHONY: fmt
|
|
fmt:
|
|
$(GOFMT) -w $(GOFILES)
|
|
|
|
.PHONY: fmt-check
|
|
fmt-check:
|
|
# 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)
|
|
|
|
.PHONY: generate
|
|
generate:
|
|
go generate code.vikunja.io/api/pkg/static
|
|
|
|
$(EXECUTABLE): $(SOURCES)
|
|
go build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
|
|
|
|
.PHONY: compress-build
|
|
compress-build:
|
|
upx -9 $(EXECUTABLE)
|
|
|
|
.PHONY: release
|
|
release: release-dirs release-windows release-linux release-darwin release-copy release-check release-os-package release-zip
|
|
|
|
.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 \
|
|
go install $(GOFLAGS) src.techknowlogick.com/xgo; \
|
|
fi
|
|
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out vikunja-$(VERSION) .
|
|
ifneq ($(DRONE_WORKSPACE),'')
|
|
mv /build/* $(DIST)/binaries
|
|
endif
|
|
|
|
.PHONY: release-linux
|
|
release-linux:
|
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
|
go install $(GOFLAGS) src.techknowlogick.com/xgo; \
|
|
fi
|
|
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out vikunja-$(VERSION) .
|
|
ifneq ($(DRONE_WORKSPACE),'')
|
|
mv /build/* $(DIST)/binaries
|
|
endif
|
|
|
|
.PHONY: release-darwin
|
|
release-darwin:
|
|
@hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
|
go install $(GOFLAGS) src.techknowlogick.com/xgo; \
|
|
fi
|
|
xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out vikunja-$(VERSION) .
|
|
ifneq ($(DRONE_WORKSPACE),'')
|
|
mv /build/* $(DIST)/binaries
|
|
endif
|
|
|
|
# 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);)
|
|
|
|
.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/; )
|
|
|
|
.PHONY: release-zip
|
|
release-zip:
|
|
$(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),cd $(file); zip -r ../../zip/$(shell basename $(file)).zip *; cd ../../../; )
|
|
|
|
# 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;
|
|
|
|
.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); \
|
|
if [ -n "$$diff" ]; then \
|
|
echo "Please run 'make do-the-swag' and commit the result:"; \
|
|
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; \
|
|
fi
|
|
swag init -g pkg/routes/routes.go -o ./pkg/swagger;
|
|
# Fix the generated swagger file, currently a workaround until swaggo can properly use go mod
|
|
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 \
|
|
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 \
|
|
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 \
|
|
go get -u github.com/fzipp/gocyclo; \
|
|
go install $(GOFLAGS) github.com/fzipp/gocyclo; \
|
|
fi
|
|
for S in $(GOFILES); do gocyclo -over 33 $$S || exit 1; done;
|
|
|
|
.PHONY: static-check
|
|
static-check:
|
|
@hash staticcheck > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
|
go get -u honnef.co/go/tools; \
|
|
go install $(GOFLAGS) honnef.co/go/tools/cmd/staticcheck; \
|
|
fi
|
|
staticcheck $(PACKAGES);
|
|
|
|
.PHONY: gosec-check
|
|
gosec-check:
|
|
@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; \
|
|
fi
|
|
gosec ./...
|
|
|
|
.PHONY: goconst-check
|
|
goconst-check:
|
|
@hash goconst > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
|
|
go get -u github.com/jgautheron/goconst/cmd/goconst; \
|
|
go install $(GOFLAGS) github.com/jgautheron/goconst/cmd/goconst; \
|
|
fi;
|
|
for S in $(PACKAGES); do goconst $$S || exit 1; done;
|