diff --git a/.gitignore b/.gitignore index ef266e3..d645be9 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ vendor/ ccbuilds/ .bin/ coverage.txt +dist/ diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..9d6a010 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,65 @@ +--- + +project_name: mtg + +before: + hooks: + - go mod tidy + - go generate ./... + +builds: + - binary: '{{ .ProjectName }}' + goos: + - darwin + - freebsd + - linux + - netbsd + - openbsd + goarch: + - 386 + - amd64 + - arm + - arm64 + goarm: + - 6 + - 7 + env: + - CGO_ENABLED=0 + flags: + - -trimpath + - -mod=readonly + ldflags: -s -w -X main.version={{ .Version }} + ignore: + - goos: darwin + goarch: 386 + - goos: freebsd + goarch: arm64 + - goos: netbsd + goarch: arm64 + - goos: openbsd + goarch: arm64 + +archives: + - name_template: '{{ .ProjectName }}-{{ .Version }}-{{ .Os }}-{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}' + format: tar.gz + wrap_in_directory: true + format_overrides: + - goos: windows + format: zip + files: + - LICENSE + - README.md + - SECURITY.md + +gomod: + proxy: true + +snapshot: + name_template: '{{ .Version }}' + +checksum: + name_template: '{{ .ProjectName }}-{{ .Version }}-checksums.txt' + +source: + enabled: true + name_template: '{{ .ProjectName }}-sources' diff --git a/Makefile b/Makefile index 71f290a..edba1fe 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,6 @@ ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) IMAGE_NAME := mtg APP_NAME := $(IMAGE_NAME) -CC_BINARIES := $(shell bash -c "echo -n $(APP_NAME)-{linux,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}") - GOLANGCI_LINT_VERSION := v1.39.0 VERSION_GO := $(shell go version) @@ -33,23 +31,12 @@ static: -a \ -o "$(APP_NAME)" -$(APP_NAME)-%: GOOS=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f1 -d-) -$(APP_NAME)-%: GOARCH=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f2 -d-) -$(APP_NAME)-%: ccbuilds - @env "GOOS=$(GOOS)" "GOARCH=$(GOARCH)" \ - go build \ - $(COMMON_BUILD_FLAGS) \ - -tags netgo \ - -a \ - -o "./ccbuilds/$(APP_NAME)-$(GOOS)-$(GOARCH)" - -.PHONY: ccbuilds -ccbuilds: - @rm -rf ./ccbuilds && mkdir -p ./ccbuilds - vendor: go.mod go.sum @$(MOD_ON) go mod vendor +.bin: + @mkdir -p "$(GOBIN)" || true + .PHONY: fmt fmt: @$(GOTOOL) gofumpt -w -s -extra "$(ROOT_DIR)" @@ -62,9 +49,6 @@ test: citest: @go test -coverprofile=coverage.txt -covermode=atomic -parallel 2 -race -v ./... -.PHONY: crosscompile -crosscompile: $(CC_BINARIES) - .PHONY: clean clean: @git clean -xfd && \ @@ -75,6 +59,12 @@ clean: lint: @$(GOTOOL) golangci-lint run +.PHONY: release +release: + @$(GOTOOL) goreleaser release --snapshot --rm-dist && \ + find "$(ROOT_DIR)/dist" -type d | grep -vP "dist$$" | xargs -r rm -rf && \ + rm -f "$(ROOT_DIR)/dist/config.yaml" + .PHONY: docker docker: @docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)" @@ -84,23 +74,24 @@ doc: @$(GOTOOL) godoc -http 0.0.0.0:10000 .PHONY: install-tools -install-tools: install-tools-lint install-tools-godoc install-tools-gofumpt +install-tools: install-tools-lint install-tools-godoc install-tools-gofumpt install-tools-goreleaser .PHONY: install-tools-lint -install-tools-lint: - @mkdir -p "$(GOBIN)" || true && \ - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \ +install-tools-lint: .bin + @curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \ | bash -s -- -b "$(GOBIN)" "$(GOLANGCI_LINT_VERSION)" .PHONY: install-tools-godoc -install-tools-godoc: - @mkdir -p "$(GOBIN)" || true && \ - $(GOTOOL) go get -u golang.org/x/tools/cmd/godoc +install-tools-godoc: .bin + @$(GOTOOL) go get -u golang.org/x/tools/cmd/godoc .PHONY: install-tools-gofumpt -install-tools-gofumpt: - @mkdir -p "$(GOBIN)" || true && \ - $(GOTOOL) go get -u mvdan.cc/gofumpt +install-tools-gofumpt: .bin + @$(GOTOOL) go get -u mvdan.cc/gofumpt + +.PHONY: goreleaser +install-tools-goreleaser: .bin + @$(GOTOOL) go get -u github.com/goreleaser/goreleaser .PHONY: update-deps update-deps: