diff --git a/.gitignore b/.gitignore index f67b3c8..df30165 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/ -server \ No newline at end of file +server +sofaraum-server \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4076863 --- /dev/null +++ b/Makefile @@ -0,0 +1,184 @@ +DIST := dist +IMPORT := code.sofaraum.de/server + +SED_INPLACE := sed -i + +ifeq ($(OS), Windows_NT) + EXECUTABLE := sofaraum-server.exe +else + EXECUTABLE := sofaraum-server + 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 "main.Version=$(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//')" -X "main.Tags=$(TAGS)" + +PACKAGES ?= $(filter-out code.sofaraum.de/server/integrations,$(shell go list ./... | grep -v /vendor/)) +SOURCES ?= $(shell find . -name "*.go" -type f) + +TAGS ?= + +TMPDIR := $(shell mktemp -d 2>/dev/null || mktemp -d -t 'kasino-temp') + +ifneq ($(DRONE_TAG),) + VERSION ?= $(subst v,,$(DRONE_TAG)) +else + ifneq ($(DRONE_BRANCH),) + VERSION ?= $(subst release/v,,$(DRONE_BRANCH)) + else + VERSION ?= master + endif +endif + +VERSION := $(shell echo $(VERSION) | sed 's/\//\-/g') + +.PHONY: all +all: build + +.PHONY: clean +clean: + go clean ./... + rm -rf $(EXECUTABLE) $(DIST) $(BINDATA) + +.PHONY: test +test: + go test -cover -coverprofile cover.out $(PACKAGES) + go tool cover -html=cover.out -o cover.html + +required-gofmt-version: + @go version | grep -q '\(1.7\|1.8\|1.9\|1.10\|1.11\)' || { echo "We require go version 1.7, 1.8, 1.9, 1.10 or 1.11 to format code" >&2 && exit 1; } + +.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: required-gofmt-version + $(GOFMT) -w $(GOFILES) + +.PHONY: fmt-check +fmt-check: required-gofmt-version + # 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: install +install: $(wildcard *.go) + go install -v -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' + +.PHONY: build +build: $(EXECUTABLE) + +$(EXECUTABLE): $(SOURCES) + go build $(GOFLAGS) $(EXTRA_GOFLAGS) -tags '$(TAGS)' -ldflags '-s -w $(LDFLAGS)' -o $@ + +.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) github.com/karalabe/xgo; \ + fi + xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'windows/*' -out sofaraum-server-$(VERSION) . +ifeq ($(CI),drone) + mv /build/* $(DIST)/binaries +endif + +.PHONY: release-linux +release-linux: + @hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ + go install $(GOFLAGS) github.com/karalabe/xgo; \ + fi + xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out sofaraum-server-$(VERSION) . +ifeq ($(CI),drone) + mv /build/* $(DIST)/binaries +endif + +.PHONY: release-darwin +release-darwin: + @hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ + go install $(GOFLAGS) github.com/karalabe/xgo; \ + fi + xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '$(LDFLAGS)' -targets 'darwin/*' -out sofaraum-server-$(VERSION) . +ifeq ($(CI),drone) + mv /build/* $(DIST)/binaries +endif + +.PHONY: release-copy +release-copy: + $(foreach file,$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*),cp $(file) $(DIST)/release/$(notdir $(file));) + mkdir $(DIST)/release/public + cp public/ $(DIST)/release/ -R + mkdir $(DIST)/release/templates + cp templates/ $(DIST)/templates/ -R + +.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 $(DIST)/release/public $(file)-full/ -R; cp $(DIST)/release/templates $(file)-full/ -R; cp LICENSE $(file)-full/; ) + rm $(DIST)/release/public -rf + +.PHONY: release-zip +release-zip: + $(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),cd $(file); zip -r ../../zip/$(shell basename $(file)).zip *; cd ../../../; ) + +.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; + +.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 install $(GOFLAGS) github.com/fzipp/gocyclo; \ + fi + for S in $(GOFILES); do gocyclo -over 14 $$S || exit 1; done; diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..1d5b6fe --- /dev/null +++ b/go.mod @@ -0,0 +1 @@ +module git.kolaente.de/sofaraum/server diff --git a/main.go b/main.go new file mode 100644 index 0000000..ba5d6a9 --- /dev/null +++ b/main.go @@ -0,0 +1,27 @@ +// Sofaraum client is the client software which collects statistics about +// wifi devices nearby and then sends them to the Sofaraum Server. +// +// Sofaraum server is the server which collects the statistics +// for the sofaraum-heatmap application. +// Copyright 2018 K.Langenberg and contributors. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package main + +import "fmt" + +func main() { + fmt.Println("schinken") +}