Skip to content

Commit

Permalink
Added basic makefiles for go package
Browse files Browse the repository at this point in the history
  • Loading branch information
mrz1836 committed Sep 30, 2020
1 parent 1db326e commit 38e9a07
Show file tree
Hide file tree
Showing 4 changed files with 182 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@

# Dependency directories (remove the comment below to include it)
# vendor/

# JetBeans
.idea
71 changes: 71 additions & 0 deletions .make/Makefile.common
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
## Default repository domain name
ifndef GIT_DOMAIN
override GIT_DOMAIN=github.com
endif

## Set if defined (alias variable for ease of use)
ifdef branch
override REPO_BRANCH=$(branch)
export REPO_BRANCH
endif

## Do we have git available?
HAS_GIT := $(shell command -v git 2> /dev/null)

ifdef HAS_GIT
## Do we have a repo?
HAS_REPO := $(shell git rev-parse --is-inside-work-tree 2> /dev/null)
ifdef HAS_REPO
## Automatically detect the repo owner and repo name (for local use with Git)
REPO_NAME=$(shell basename "$(shell git rev-parse --show-toplevel 2> /dev/null)")
REPO_OWNER=$(shell git config --get remote.origin.url | sed 's/git@$(GIT_DOMAIN)://g' | sed 's/\/$(REPO_NAME).git//g')
VERSION_SHORT=$(shell git describe --tags --always --abbrev=0)
export REPO_NAME, REPO_OWNER, VERSION_SHORT
endif
endif

## Set the distribution folder
ifndef DISTRIBUTIONS_DIR
override DISTRIBUTIONS_DIR=./dist
endif
export DISTRIBUTIONS_DIR

help: ## Show this help message
@egrep -h '^(.+)\:\ ##\ (.+)' ${MAKEFILE_LIST} | column -t -c 2 -s ':#'

release:: ## Full production release (creates release in Github)
@test $(github_token)
@export GITHUB_TOKEN=$(github_token) && goreleaser --rm-dist

release-test: ## Full production test release (everything except deploy)
@goreleaser --skip-publish --rm-dist

release-snap: ## Test the full release (build binaries)
@goreleaser --snapshot --skip-publish --rm-dist

replace-version: ## Replaces the version in HTML/JS (pre-deploy)
@test $(version)
@test "$(path)"
@find $(path) -name "*.html" -type f -exec sed -i '' -e "s/{{version}}/$(version)/g" {} \;
@find $(path) -name "*.js" -type f -exec sed -i '' -e "s/{{version}}/$(version)/g" {} \;

tag: ## Generate a new tag and push (tag version=0.0.0)
@test $(version)
@git tag -a v$(version) -m "Pending full release..."
@git push origin v$(version)
@git fetch --tags -f

tag-remove: ## Remove a tag if found (tag-remove version=0.0.0)
@test $(version)
@git tag -d v$(version)
@git push --delete origin v$(version)
@git fetch --tags

tag-update: ## Update an existing tag to current commit (tag-update version=0.0.0)
@test $(version)
@git push --force origin HEAD:refs/tags/v$(version)
@git fetch --tags -f

update-releaser: ## Update the goreleaser application
@brew update
@brew upgrade goreleaser
80 changes: 80 additions & 0 deletions .make/Makefile.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
## Default to the repo name if empty
ifndef BINARY_NAME
override BINARY_NAME=app
endif

## Define the binary name
ifdef CUSTOM_BINARY_NAME
override BINARY_NAME=$(CUSTOM_BINARY_NAME)
endif

## Set the binary release names
DARWIN=$(BINARY_NAME)-darwin
LINUX=$(BINARY_NAME)-linux
WINDOWS=$(BINARY_NAME)-windows.exe

.PHONY: test lint install

bench: ## Run all benchmarks in the Go application
@go test -bench=. -benchmem

build-go: ## Build the Go application (locally)
@go build -o bin/$(BINARY_NAME)

clean-mods: ## Remove all the Go mod cache
@go clean -modcache

coverage: ## Shows the test coverage
@go test -coverprofile=coverage.out ./... && go tool cover -func=coverage.out

godocs: ## Sync the latest tag with GoDocs
@test $(GIT_DOMAIN)
@test $(REPO_OWNER)
@test $(REPO_NAME)
@test $(VERSION_SHORT)
@curl https://proxy.golang.org/$(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)/@v/$(VERSION_SHORT).info

install: ## Install the application
@go build -o $$GOPATH/bin/$(BINARY_NAME)

install-go: ## Install the application (Using Native Go)
@go install $(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)

lint: ## Run the Go lint application
@if [ "$(shell command -v golint)" = "" ]; then go get -u golang.org/x/lint/golint; fi
@golint

test: ## Runs vet, lint and ALL tests
@$(MAKE) vet
@$(MAKE) lint
@go test ./... -v

test-short: ## Runs vet, lint and tests (excludes integration tests)
@$(MAKE) vet
@$(MAKE) lint
@go test ./... -v -test.short

test-travis: ## Runs all tests via Travis (also exports coverage)
@$(MAKE) vet
@$(MAKE) lint
@go test ./... -race -coverprofile=coverage.txt -covermode=atomic

test-travis-short: ## Runs unit tests via Travis (also exports coverage)
@$(MAKE) vet
@$(MAKE) lint
@go test ./... -test.short -race -coverprofile=coverage.txt -covermode=atomic

uninstall: ## Uninstall the application (and remove files)
@test $(BINARY_NAME)
@test $(GIT_DOMAIN)
@test $(REPO_OWNER)
@test $(REPO_NAME)
@go clean -i $(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)
@rm -rf $$GOPATH/src/$(GIT_DOMAIN)/$(REPO_OWNER)/$(REPO_NAME)
@rm -rf $$GOPATH/bin/$(BINARY_NAME)

update: ## Update all project dependencies
@go get -u ./... && go mod tidy

vet: ## Run the Go vet application
@go vet -v ./...
28 changes: 28 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Common makefile commands & variables between projects
include .make/Makefile.common

# Common Golang makefile commands & variables between projects
include .make/Makefile.go

## Not defined? Use default repo name which is the application
ifeq ($(REPO_NAME),)
REPO_NAME="go-bitcoin"
endif

## Not defined? Use default repo owner
ifeq ($(REPO_OWNER),)
REPO_OWNER="rohenaz"
endif

.PHONY: clean

all: ## Runs multiple commands
@$(MAKE) test

clean: ## Remove previous builds and any test cache data
@go clean -cache -testcache -i -r
@test $(DISTRIBUTIONS_DIR)
@if [ -d $(DISTRIBUTIONS_DIR) ]; then rm -r $(DISTRIBUTIONS_DIR); fi

release:: ## Runs common.release then runs godocs
@$(MAKE) godocs

0 comments on commit 38e9a07

Please sign in to comment.