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 ?=
2019-01-03 23:51:16 +01:00
LDFLAGS := -X " main.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
2018-12-18 17:01:46 +01:00
PACKAGES ?= $( filter-out code.vikunja.io/api/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-10-28 17:11:13 +01:00
VERSION := $( shell echo $( VERSION) | sed 's/\//\-/g' )
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 :
2018-12-18 17:01:46 +01:00
VIKUNJA_SERVICE_ROOTPATH = $( shell pwd ) go test $( GOFLAGS) -cover -coverprofile cover.out $( PACKAGES)
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
.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 : $( EXECUTABLE )
$(EXECUTABLE) : $( SOURCES )
go build $( GOFLAGS) $( EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@
.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 \
2018-10-28 17:11:13 +01:00
go install $( GOFLAGS) github.com/karalabe/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 \
2018-10-28 17:11:13 +01:00
go install $( GOFLAGS) github.com/karalabe/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 \
2018-10-28 17:11:13 +01:00
go install $( GOFLAGS) github.com/karalabe/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
.PHONY : release -copy
release-copy :
$( foreach file,$( wildcard $( DIST) /binaries/$( EXECUTABLE) -*) ,cp $( file) $( DIST) /release/$( notdir $( file) ) ; )
2019-01-14 17:40:42 +01:00
mkdir $( DIST) /release/templates -p
2018-10-27 11:33:28 +02:00
cp templates/ $( DIST) /templates/ -R
2018-06-10 11:11:41 +02:00
.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 :
2018-12-13 16:09:00 +01: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 $( DIST) /release/templates $( file) -full/ -R; 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 ./templates= /opt/vikunja ./config.yml.sample= /etc/vikunja/config.yml;
.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-02-17 20:53:04 +01:00
swag init -g pkg/routes/routes.go -s ./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
sed -i '/"definitions": {/a "code.vikunja.io.web.HTTPError": {"type": "object","properties": {"code": {"type": "integer"},"message": {"type": "string"}}},' docs/docs.go;
sed -i 's/code.vikunja.io\/web.HTTPError/code.vikunja.io.web.HTTPError/g' docs/docs.go;
2019-02-17 20:53:04 +01:00
sed -i 's/package\ docs/package\ swagger/g' docs/docs.go;
sed -i 's/` + \\"`\\" + `/` + "`" + `/g' docs/docs.go;
mv ./docs/docs.go ./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
2019-02-18 20:32:41 +01:00
for S in $( GOFILES) ; do gocyclo -over 16 $$ 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 :
@hash ./bin/gosec > /dev/null 2>& 1; if [ $$ ? -ne 0 ] ; then \
curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s 1.2.0; \
fi
for S in $( PACKAGES) ; do ./bin/gosec $$ S || exit 1; done ;
.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; \
2018-12-28 23:15:05 +01:00
fi
for S in $( PACKAGES) ; do goconst $$ S || exit 1; done ;