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
i f e q ( $( OS ) , W i n d o w s _ N T )
2018-07-25 16:26:32 +02:00
EXECUTABLE := vikunja.exe
2018-06-10 11:11:41 +02:00
e l s e
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
e n d i f
GOFILES := $( shell find . -name "*.go" -type f ! -path "./vendor/*" ! -path "*/bindata.go" )
GOFMT ?= gofmt -s
2018-10-28 17:11:13 +01:00
GOFLAGS := -v -mod= vendor
2018-06-10 11:11:41 +02:00
EXTRA_GOFLAGS ?=
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
2019-04-21 20:18:17 +02:00
PACKAGES ?= $( filter-out code.vikunja.io/api/pkg/integrations,$( shell go list -mod= vendor ./... | grep -v /vendor/) )
2018-06-10 11:11:41 +02:00
SOURCES ?= $( shell find . -name "*.go" -type f)
TAGS ?=
i f e q ( $( OS ) , W i n d o w s _ N T )
2018-07-25 16:26:32 +02:00
EXECUTABLE := vikunja.exe
2018-06-10 11:11:41 +02:00
e l s e
2018-07-25 16:26:32 +02:00
EXECUTABLE := vikunja
2018-06-10 11:11:41 +02:00
e n d i f
i f n e q ( $( DRONE_TAG ) , )
VERSION ?= $( subst v,,$( DRONE_TAG) )
e l s e
ifneq ( $( DRONE_BRANCH) ,)
VERSION ?= $( subst release/v,,$( DRONE_BRANCH) )
else
VERSION ?= master
endif
e n d i f
2019-01-21 22:52:26 +01:00
i f e q ( $( DRONE_WORKSPACE ) , '' )
BINLOCATION := $( EXECUTABLE)
e l s e
BINLOCATION := $( DIST) /binaries/$( EXECUTABLE) -$( VERSION) -linux-amd64
e n d i f
i f e q ( $( VERSION ) , m a s t e r )
PKGVERSION := $( shell git describe --tags --always --abbrev= 10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/' )
e l s e
PKGVERSION := $( VERSION)
e n d i f
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 :
2020-02-16 22:42:04 +01:00
# 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)
2020-01-19 18:26:26 +01:00
.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 :
2020-02-16 22:42:04 +01:00
# 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
2020-02-15 11:35:24 +01:00
build : generate $( EXECUTABLE )
2018-06-10 11:11:41 +02:00
2019-07-11 21:10:42 +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) $( EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
2019-06-23 00:07:58 +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
i f n e q ( $( DRONE_WORKSPACE ) , '' )
mv /build/* $( DIST) /binaries
e n d i f
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
i f n e q ( $( DRONE_WORKSPACE ) , '' )
mv /build/* $( DIST) /binaries
e n d i f
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
i f n e q ( $( DRONE_WORKSPACE ) , '' )
mv /build/* $( DIST) /binaries
e n d i f
2018-06-10 11:11:41 +02:00
2019-06-23 00:07:58 +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 :
2019-07-11 21:10:42 +02:00
$( 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 :
2019-07-11 21:10:42 +02:00
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
2018-11-12 16:46:35 +01:00
.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 \
2018-11-12 16:46:35 +01:00
echo "Please run 'make do-the-swag' and commit the result:" ; \
2018-06-13 13:45:22 +02:00
echo " $$ {diff} " ; \
exit 1; \
fi ;
2018-11-12 16:46:35 +01:00
.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
2019-07-16 00:54:38 +02:00
swag init -g pkg/routes/routes.go -o ./pkg/swagger;
2018-12-21 22:30:43 +01:00
# 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;
2018-09-23 21:15:14 +02:00
.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; \
2018-09-23 21:15:14 +02:00
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; \
2018-09-23 21:15:14 +02:00
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; \
2018-09-23 21:15:14 +02:00
fi
2020-05-19 17:41:37 +02:00
for S in $( GOFILES) ; do gocyclo -over 29 $$ 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 ;