-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 5a938c4
Showing
15 changed files
with
1,514 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
name: release | ||
|
||
on: | ||
push: | ||
tags: | ||
- 'v*' | ||
|
||
jobs: | ||
goreleaser: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v1 | ||
- name: Set up Go | ||
uses: actions/setup-go@v1 | ||
with: | ||
go-version: 1.13.x | ||
- name: Import GPG key | ||
id: import_gpg | ||
uses: crazy-max/ghaction-import-gpg@v2 | ||
env: | ||
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} | ||
PASSPHRASE: ${{ secrets.PASSPHRASE }} | ||
- uses: actions/cache@v1 | ||
with: | ||
path: ~/go/pkg/mod | ||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | ||
restore-keys: | | ||
${{ runner.os }}-go | ||
- name: Run GoReleaser | ||
uses: goreleaser/goreleaser-action@v1 | ||
with: | ||
version: latest | ||
args: release --rm-dist | ||
key: ${{ secrets.YOUR_PRIVATE_KEY }} | ||
env: | ||
GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
name: Build Snapshots | ||
|
||
on: | ||
push: | ||
branches: | ||
- '**' | ||
|
||
jobs: | ||
goreleaser: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v1 | ||
- name: Set up Go | ||
uses: actions/setup-go@v1 | ||
with: | ||
go-version: 1.13.x | ||
- name: Import GPG key | ||
id: import_gpg | ||
uses: crazy-max/ghaction-import-gpg@v2 | ||
env: | ||
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} | ||
PASSPHRASE: ${{ secrets.PASSPHRASE }} | ||
- uses: actions/cache@v1 | ||
with: | ||
path: ~/go/pkg/mod | ||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | ||
restore-keys: | | ||
${{ runner.os }}-go | ||
- name: Run GoReleaser | ||
uses: goreleaser/goreleaser-action@v2 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} | ||
with: | ||
version: latest | ||
args: release --snapshot --rm-dist |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
name: test | ||
|
||
on: | ||
push: | ||
branches: | ||
- '**' | ||
pull_request: | ||
branches: | ||
- master | ||
|
||
jobs: | ||
test: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v1 | ||
- name: Set up Go | ||
uses: actions/setup-go@v1 | ||
with: | ||
go-version: 1.13.x | ||
- run: make test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Binaries for programs and plugins | ||
*.exe | ||
*.dll | ||
*.so | ||
*.dylib | ||
|
||
# Test binary, build with `go test -c` | ||
*.test | ||
|
||
# Output of the go coverage tool, specifically when used with LiteIDE | ||
*.out | ||
|
||
# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 | ||
.glide/ | ||
|
||
# Compiled binaries | ||
/bin/ | ||
/pkg/ | ||
vault-plugin-auth-github-actions | ||
|
||
# Local development tmp | ||
/tmp/ | ||
|
||
# GoLandIDE files | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
builds: | ||
- binary: "{{ .ProjectName }}_v{{ .Version }}" | ||
env: | ||
- CGO_ENABLED=0 | ||
goos: | ||
- freebsd | ||
- windows | ||
- linux | ||
- darwin | ||
goarch: | ||
- amd64 | ||
- 386 | ||
- arm | ||
- arm64 | ||
goarm: | ||
- 7 | ||
ignore: | ||
- goos: darwin | ||
goarch: '386' | ||
- goos: freebsd | ||
goarch: 'arm64' | ||
archives: | ||
- format: zip | ||
name_template: '{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}' | ||
|
||
checksum: | ||
name_template: '{{ .ProjectName }}_{{ .Version }}_SHA256SUMS' | ||
algorithm: sha256 | ||
signs: | ||
- artifacts: checksum | ||
args: | ||
- "--local-user" | ||
- "A29F60D591A974E20B5E90695C886ACC44EB17C0" | ||
- "--output" | ||
- "${signature}" | ||
- "--detach-sign" | ||
- "${artifact}" | ||
snapshot: | ||
name_template: "{{ .Version }}-next" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
# Metadata about this makefile and position | ||
MKFILE_PATH := $(lastword $(MAKEFILE_LIST)) | ||
CURRENT_DIR := $(patsubst %/,%,$(dir $(realpath $(MKFILE_PATH)))) | ||
|
||
# Ensure GOPATH | ||
GOPATH ?= $(HOME)/go | ||
|
||
# List all our actual files, excluding vendor | ||
GOFILES ?= $(shell go list $(TEST) | grep -v /vendor/) | ||
|
||
# Tags specific for building | ||
GOTAGS ?= | ||
|
||
# Number of procs to use | ||
GOMAXPROCS ?= 4 | ||
|
||
# Get the project metadata | ||
GOVERSION := 1.15.1 | ||
PROJECT := $(CURRENT_DIR:$(GOPATH)/src/%=%) | ||
OWNER := $(notdir $(patsubst %/,%,$(dir $(PROJECT)))) | ||
NAME := $(notdir $(PROJECT)) | ||
GIT_COMMIT ?= $(shell git rev-parse --short HEAD) | ||
VERSION := $(shell awk -F\" '/Version/ { print $$2; exit }' "${CURRENT_DIR}/version/version.go") | ||
|
||
# Current system information | ||
GOOS ?= $(shell go env GOOS) | ||
GOARCH ?= $(shell go env GOARCH) | ||
|
||
# Default os-arch combination to build | ||
XC_OS ?= darwin freebsd linux netbsd openbsd solaris windows | ||
XC_ARCH ?= 386 amd64 arm | ||
XC_EXCLUDE ?= darwin/arm darwin/386 solaris/386 solaris/arm windows/arm | ||
|
||
# GPG Signing key (blank by default, means no GPG signing) | ||
GPG_KEY ?= | ||
|
||
# List of ldflags | ||
LD_FLAGS ?= \ | ||
-s \ | ||
-w \ | ||
-X ${PROJECT}/version.Name=${NAME} \ | ||
-X ${PROJECT}/version.GitCommit=${GIT_COMMIT} | ||
|
||
# List of tests to run | ||
TEST ?= ./... | ||
|
||
# Create a cross-compile target for every os-arch pairing. This will generate | ||
# a make target for each os/arch like "make linux/amd64" as well as generate a | ||
# meta target (build) for compiling everything. | ||
define make-xc-target | ||
$1/$2: | ||
ifneq (,$(findstring ${1}/${2},$(XC_EXCLUDE))) | ||
@printf "%s%20s %s\n" "-->" "${1}/${2}:" "${PROJECT} (excluded)" | ||
else | ||
@printf "%s%20s %s\n" "-->" "${1}/${2}:" "${PROJECT}" | ||
@docker run \ | ||
--interactive \ | ||
--rm \ | ||
--dns="8.8.8.8" \ | ||
--volume="${CURRENT_DIR}:/go/src/${PROJECT}" \ | ||
--workdir="/go/src/${PROJECT}" \ | ||
"golang:${GOVERSION}" \ | ||
env \ | ||
CGO_ENABLED="0" \ | ||
GOOS="${1}" \ | ||
GOARCH="${2}" \ | ||
go build \ | ||
-a \ | ||
-o="pkg/${1}_${2}/${NAME}${3}" \ | ||
-ldflags "${LD_FLAGS}" \ | ||
-tags "${GOTAGS}" | ||
endif | ||
.PHONY: $1/$2 | ||
|
||
$1:: $1/$2 | ||
.PHONY: $1 | ||
|
||
build:: $1/$2 | ||
.PHONY: build | ||
endef | ||
$(foreach goarch,$(XC_ARCH),$(foreach goos,$(XC_OS),$(eval $(call make-xc-target,$(goos),$(goarch),$(if $(findstring windows,$(goos)),.exe,))))) | ||
|
||
# dev builds and installs the project locally. | ||
dev: | ||
@echo "==> Installing ${NAME} for ${GOOS}/${GOARCH}" | ||
@rm -f "${GOPATH}/pkg/${GOOS}_${GOARCH}/${PROJECT}/version.a" # ldflags change and go doesn't detect | ||
@env \ | ||
CGO_ENABLED="0" \ | ||
go install \ | ||
-ldflags "${LD_FLAGS}" \ | ||
-tags "${GOTAGS}" | ||
.PHONY: dev | ||
|
||
# dist builds the binaries and then signs and packages them for distribution | ||
dist: | ||
ifndef GPG_KEY | ||
@echo "==> ERROR: No GPG key specified! Without a GPG key, this release cannot" | ||
@echo " be signed. Set the environment variable GPG_KEY to the ID of" | ||
@echo " the GPG key to continue." | ||
@exit 127 | ||
else | ||
@$(MAKE) -f "${MKFILE_PATH}" _cleanup | ||
@$(MAKE) -f "${MKFILE_PATH}" -j4 build | ||
@$(MAKE) -f "${MKFILE_PATH}" _compress _checksum _sign | ||
endif | ||
.PHONY: dist | ||
|
||
# test runs the test suite. | ||
test: | ||
@echo "==> Testing ${NAME}" | ||
@go test -timeout=30s -parallel=20 -tags="${GOTAGS}" ${GOFILES} ${TESTARGS} | ||
.PHONY: test | ||
|
||
# test-race runs the test suite. | ||
test-race: | ||
@echo "==> Testing ${NAME} (race)" | ||
@go test -timeout=60s -race -tags="${GOTAGS}" ${GOFILES} ${TESTARGS} | ||
.PHONY: test-race | ||
|
||
# _cleanup removes any previous binaries | ||
_cleanup: | ||
@rm -rf "${CURRENT_DIR}/pkg/" | ||
@rm -rf "${CURRENT_DIR}/bin/" | ||
|
||
# _compress compresses all the binaries in pkg/* as tarball and zip. | ||
_compress: | ||
@mkdir -p "${CURRENT_DIR}/pkg/dist" | ||
@for platform in $$(find ./pkg -mindepth 1 -maxdepth 1 -type d); do \ | ||
osarch=$$(basename "$$platform"); \ | ||
if [ "$$osarch" = "dist" ]; then \ | ||
continue; \ | ||
fi; \ | ||
\ | ||
ext=""; \ | ||
if test -z "$${osarch##*windows*}"; then \ | ||
ext=".exe"; \ | ||
fi; \ | ||
cd "$$platform"; \ | ||
tar -czf "${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_$${osarch}.tgz" "${NAME}$${ext}"; \ | ||
zip -q "${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_$${osarch}.zip" "${NAME}$${ext}"; \ | ||
cd - &>/dev/null; \ | ||
done | ||
.PHONY: _compress | ||
|
||
# _checksum produces the checksums for the binaries in pkg/dist | ||
_checksum: | ||
@cd "${CURRENT_DIR}/pkg/dist" && \ | ||
shasum --algorithm 256 * > ${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_SHA256SUMS && \ | ||
cd - &>/dev/null | ||
.PHONY: _checksum | ||
|
||
# _sign signs the binaries using the given GPG_KEY. This should not be called | ||
# as a separate function. | ||
_sign: | ||
@echo "==> Signing ${PROJECT} at v${VERSION}" | ||
@gpg \ | ||
--default-key "${GPG_KEY}" \ | ||
--detach-sig "${CURRENT_DIR}/pkg/dist/${NAME}_${VERSION}_SHA256SUMS" | ||
@git commit \ | ||
--allow-empty \ | ||
--gpg-sign="${GPG_KEY}" \ | ||
--message "Release v${VERSION}" \ | ||
--quiet \ | ||
--signoff | ||
@git tag \ | ||
--annotate \ | ||
--create-reflog \ | ||
--local-user "${GPG_KEY}" \ | ||
--message "Version ${VERSION}" \ | ||
--sign \ | ||
"v${VERSION}" master | ||
@echo "--> Do not forget to run:" | ||
@echo "" | ||
@echo " git push && git push --tags" | ||
@echo "" | ||
@echo "And then upload the binaries in dist/!" | ||
.PHONY: _sign |
Oops, something went wrong.