You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.0 KiB
152 lines
4.0 KiB
DIST := dist |
|
export GO111MODULE=on |
|
export CGO_ENABLED=0 |
|
|
|
GO ?= go |
|
SHASUM ?= shasum -a 256 |
|
|
|
export PATH := $($(GO) env GOPATH)/bin:$(PATH) |
|
|
|
GOFILES := $(shell find . -name "*.go" -type f ! -path "./vendor/*" ! -path "*/bindata.go") |
|
GOFMT ?= gofmt -s |
|
|
|
ifneq ($(DRONE_TAG),) |
|
VERSION ?= $(subst v,,$(DRONE_TAG)) |
|
TEA_VERSION ?= $(VERSION) |
|
else |
|
ifneq ($(DRONE_BRANCH),) |
|
VERSION ?= $(subst release/v,,$(DRONE_BRANCH)) |
|
else |
|
VERSION ?= master |
|
endif |
|
TEA_VERSION ?= $(shell git describe --tags --always | sed 's/-/+/' | sed 's/^v//') |
|
endif |
|
TEA_VERSION_TAG ?= $(shell sed 's/+/_/' <<< $(TEA_VERSION)) |
|
|
|
TAGS ?= |
|
SDK ?= $(shell $(GO) list -f '{{.Version}}' -m code.gitea.io/sdk/gitea) |
|
LDFLAGS := -X "main.Version=$(TEA_VERSION)" -X "main.Tags=$(TAGS)" -X "main.SDK=$(SDK)" -s -w |
|
|
|
# override to allow passing additional goflags via make CLI |
|
override GOFLAGS := $(GOFLAGS) -mod=vendor -tags '$(TAGS)' -ldflags '$(LDFLAGS)' |
|
|
|
PACKAGES ?= $(shell $(GO) list ./... | grep -v /vendor/) |
|
SOURCES ?= $(shell find . -name "*.go" -type f) |
|
|
|
# OS specific vars. |
|
ifeq ($(OS), Windows_NT) |
|
EXECUTABLE := tea.exe |
|
else |
|
EXECUTABLE := tea |
|
ifneq ($(shell uname -s), OpenBSD) |
|
override BUILDMODE := -buildmode=pie |
|
endif |
|
endif |
|
|
|
.PHONY: all |
|
all: build |
|
|
|
.PHONY: clean |
|
clean: |
|
$(GO) clean -mod=vendor -i ./... |
|
rm -rf $(EXECUTABLE) $(DIST) |
|
|
|
.PHONY: fmt |
|
fmt: |
|
$(GOFMT) -w $(GOFILES) |
|
|
|
.PHONY: vet |
|
vet: |
|
# Default vet |
|
$(GO) vet -mod=vendor $(PACKAGES) |
|
# Custom vet |
|
$(GO) build -mod=vendor code.gitea.io/gitea-vet |
|
$(GO) vet -vettool=gitea-vet $(PACKAGES) |
|
|
|
.PHONY: lint |
|
lint: install-lint-tools |
|
revive -config .revive.toml -exclude=./vendor/... ./... || exit 1 |
|
|
|
.PHONY: misspell-check |
|
misspell-check: install-lint-tools |
|
misspell -error -i unknwon,destory $(GOFILES) |
|
|
|
.PHONY: misspell |
|
misspell: install-lint-tools |
|
misspell -w -i unknwon $(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: test |
|
test: |
|
$(GO) test -mod=vendor -tags='sqlite sqlite_unlock_notify' $(PACKAGES) |
|
|
|
.PHONY: unit-test-coverage |
|
unit-test-coverage: |
|
$(GO) test -mod=vendor -tags='sqlite sqlite_unlock_notify' -cover -coverprofile coverage.out $(PACKAGES) && echo "\n==>\033[32m Ok\033[m\n" || exit 1 |
|
|
|
.PHONY: vendor |
|
vendor: |
|
$(GO) mod tidy && $(GO) mod vendor |
|
|
|
.PHONY: check |
|
check: test |
|
|
|
.PHONY: install |
|
install: $(SOURCES) |
|
@echo "installing to $(GOPATH)/bin/$(EXECUTABLE)" |
|
$(GO) install -v $(BUILDMODE) $(GOFLAGS) |
|
|
|
.PHONY: build |
|
build: $(EXECUTABLE) |
|
|
|
$(EXECUTABLE): $(SOURCES) |
|
$(GO) build $(BUILDMODE) $(GOFLAGS) -o $@ |
|
|
|
.PHONY: build-image |
|
build-image: |
|
docker build --build-arg VERSION=$(TEA_VERSION) -t gitea/tea:$(TEA_VERSION_TAG) . |
|
|
|
.PHONY: release |
|
release: release-dirs install-release-tools release-os release-compress release-check |
|
|
|
.PHONY: release-dirs |
|
release-dirs: |
|
mkdir -p $(DIST)/binaries $(DIST)/release |
|
|
|
.PHONY: release-os |
|
release-os: |
|
CGO_ENABLED=0 gox -verbose -cgo=false $(GOFLAGS) -osarch='!darwin/386 !darwin/arm' -os="windows linux darwin" -arch="386 amd64 arm arm64" -output="$(DIST)/release/tea-$(VERSION)-{{.OS}}-{{.Arch}}" |
|
|
|
.PHONY: release-compress |
|
release-compress: install-release-tools |
|
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "compressing $${file}" && gxz -k -9 $${file}; done; |
|
|
|
.PHONY: release-check |
|
release-check: install-release-tools |
|
cd $(DIST)/release/; for file in `find . -type f -name "*"`; do echo "checksumming $${file}" && $(SHASUM) `echo $${file} | sed 's/^..//'` > $${file}.sha256; done; |
|
|
|
### tools |
|
install-release-tools: |
|
@hash gox > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ |
|
$(GO) install github.com/mitchellh/gox@latest; \ |
|
fi |
|
@hash gxz > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ |
|
$(GO) install github.com/ulikunitz/xz/cmd/gxz@latest; \ |
|
fi |
|
|
|
install-lint-tools: |
|
@hash revive > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ |
|
$(GO) install github.com/mgechev/revive@latest; \ |
|
fi |
|
@hash misspell > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ |
|
$(GO) install github.com/client9/misspell/cmd/misspell@latest; \ |
|
fi
|
|
|