-
Notifications
You must be signed in to change notification settings - Fork 405
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #206 from guggero/makefile
ci: add Makefile, use golangci-lint, parallelize CI actions
- Loading branch information
Showing
24 changed files
with
268 additions
and
172 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 |
---|---|---|
@@ -1,31 +1,64 @@ | ||
name: Build and Test | ||
on: [push, pull_request] | ||
|
||
env: | ||
# go needs absolute directories, using the $HOME variable doesn't work here. | ||
GOCACHE: /home/runner/work/go/pkg/build | ||
GOPATH: /home/runner/work/go | ||
GO_VERSION: 1.16.8 | ||
|
||
jobs: | ||
build: | ||
name: Go CI | ||
name: Build | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
go: [1.14, 1.15] | ||
steps: | ||
- name: Set up Go | ||
uses: actions/setup-go@v2 | ||
with: | ||
go-version: ${{ matrix.go }} | ||
go-version: ${{ env.GO_VERSION }} | ||
|
||
- name: Check out source | ||
uses: actions/checkout@v2 | ||
- name: Install Linters | ||
run: "curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.31.0" | ||
|
||
- name: Build | ||
env: | ||
GO111MODULE: "on" | ||
run: go build ./... | ||
run: make build | ||
|
||
test-cover: | ||
name: Unit coverage | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Set up Go | ||
uses: actions/setup-go@v2 | ||
with: | ||
go-version: ${{ env.GO_VERSION }} | ||
|
||
- name: Check out source | ||
uses: actions/checkout@v2 | ||
|
||
- name: Test | ||
env: | ||
GO111MODULE: "on" | ||
run: | | ||
sh ./goclean.sh | ||
run: make unit-cover | ||
|
||
- name: Send btcutil coverage | ||
uses: shogo82148/actions-goveralls@v1 | ||
with: | ||
path-to-profile: profile.cov | ||
path-to-profile: coverage.txt | ||
|
||
- name: Send btcutil coverage for psbt package | ||
uses: shogo82148/actions-goveralls@v1 | ||
with: | ||
path-to-profile: psbt/coverage.txt | ||
|
||
test-race: | ||
name: Unit race | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Set up Go | ||
uses: actions/setup-go@v2 | ||
with: | ||
go-version: ${{ env.GO_VERSION }} | ||
|
||
- name: Check out source | ||
uses: actions/checkout@v2 | ||
|
||
- name: Test | ||
run: make unit-race |
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 |
---|---|---|
|
@@ -26,3 +26,5 @@ _cgo_export.* | |
_testmain.go | ||
|
||
*.exe | ||
coverage.txt | ||
psbt/coverage.txt |
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,54 @@ | ||
run: | ||
# timeout for analysis | ||
deadline: 10m | ||
|
||
linters-settings: | ||
govet: | ||
# Don't report about shadowed variables | ||
check-shadowing: false | ||
gofmt: | ||
# simplify code: gofmt with `-s` option, true by default | ||
simplify: true | ||
|
||
linters: | ||
enable-all: true | ||
disable: | ||
# Global variables are used in many places throughout the code base. | ||
- gochecknoglobals | ||
|
||
# Some lines are over 80 characters on purpose and we don't want to make them | ||
# even longer by marking them as 'nolint'. | ||
- lll | ||
|
||
# We don't care (enough) about misaligned structs to lint that. | ||
- maligned | ||
|
||
# We have long functions, especially in tests. Moving or renaming those would | ||
# trigger funlen problems that we may not want to solve at that time. | ||
- funlen | ||
|
||
# Disable for now as we haven't yet tuned the sensitivity to our codebase | ||
# yet. Enabling by default for example, would also force new contributors to | ||
# potentially extensively refactor code, when they want to smaller change to | ||
# land. | ||
- gocyclo | ||
|
||
# Instances of table driven tests that don't pre-allocate shouldn't trigger | ||
# the linter. | ||
- prealloc | ||
|
||
# Init functions are used by loggers throughout the codebase. | ||
- gochecknoinits | ||
|
||
# Explicit types are okay. | ||
- interfacer | ||
|
||
issues: | ||
exclude-rules: | ||
# Exclude gosec from running for tests so that tests with weak randomness | ||
# (math/rand) will pass the linter. | ||
- path: _test\.go | ||
linters: | ||
- gosec | ||
#- errcheck | ||
- dupl |
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,116 @@ | ||
PKG := github.com/btcsuite/btcutil | ||
|
||
LINT_PKG := github.com/golangci/golangci-lint/cmd/golangci-lint | ||
GOACC_PKG := github.com/ory/go-acc | ||
GOIMPORTS_PKG := golang.org/x/tools/cmd/goimports | ||
|
||
GO_BIN := ${GOPATH}/bin | ||
LINT_BIN := $(GO_BIN)/golangci-lint | ||
GOACC_BIN := $(GO_BIN)/go-acc | ||
|
||
LINT_COMMIT := v1.18.0 | ||
GOACC_COMMIT := 80342ae2e0fcf265e99e76bcc4efd022c7c3811b | ||
|
||
DEPGET := cd /tmp && GO111MODULE=on go get -v | ||
GOBUILD := GO111MODULE=on go build -v | ||
GOINSTALL := GO111MODULE=on go install -v | ||
GOTEST := GO111MODULE=on go test | ||
|
||
GOFILES_NOVENDOR = $(shell find . -type f -name '*.go' -not -path "./vendor/*") | ||
|
||
RM := rm -f | ||
CP := cp | ||
MAKE := make | ||
XARGS := xargs -L 1 | ||
|
||
# Linting uses a lot of memory, so keep it under control by limiting the number | ||
# of workers if requested. | ||
ifneq ($(workers),) | ||
LINT_WORKERS = --concurrency=$(workers) | ||
endif | ||
|
||
LINT = $(LINT_BIN) run -v $(LINT_WORKERS) | ||
|
||
GREEN := "\\033[0;32m" | ||
NC := "\\033[0m" | ||
define print | ||
echo $(GREEN)$1$(NC) | ||
endef | ||
|
||
default: build | ||
|
||
all: build check | ||
|
||
# ============ | ||
# DEPENDENCIES | ||
# ============ | ||
|
||
$(LINT_BIN): | ||
@$(call print, "Fetching linter") | ||
$(DEPGET) $(LINT_PKG)@$(LINT_COMMIT) | ||
|
||
$(GOACC_BIN): | ||
@$(call print, "Fetching go-acc") | ||
$(DEPGET) $(GOACC_PKG)@$(GOACC_COMMIT) | ||
|
||
goimports: | ||
@$(call print, "Installing goimports.") | ||
$(DEPGET) $(GOIMPORTS_PKG) | ||
|
||
# ============ | ||
# INSTALLATION | ||
# ============ | ||
|
||
build: | ||
@$(call print, "Compiling btcutil.") | ||
$(GOBUILD) $(PKG)/... | ||
|
||
# ======= | ||
# TESTING | ||
# ======= | ||
|
||
check: unit | ||
|
||
unit: | ||
@$(call print, "Running unit tests.") | ||
$(GOTEST) ./... -test.timeout=20m | ||
cd psbt; $(GOTEST) ./... -test.timeout=20m | ||
|
||
unit-cover: $(GOACC_BIN) | ||
@$(call print, "Running unit coverage tests.") | ||
$(GOACC_BIN) ./... | ||
cd psbt; $(GOACC_BIN) ./... | ||
|
||
unit-race: | ||
@$(call print, "Running unit race tests.") | ||
env CGO_ENABLED=1 GORACE="history_size=7 halt_on_errors=1" $(GOTEST) -race -test.timeout=20m ./... | ||
cd psbt; env CGO_ENABLED=1 GORACE="history_size=7 halt_on_errors=1" $(GOTEST) -race -test.timeout=20m ./... | ||
|
||
# ========= | ||
# UTILITIES | ||
# ========= | ||
|
||
fmt: goimports | ||
@$(call print, "Fixing imports.") | ||
goimports -w $(GOFILES_NOVENDOR) | ||
@$(call print, "Formatting source.") | ||
gofmt -l -w -s $(GOFILES_NOVENDOR) | ||
|
||
lint: $(LINT_BIN) | ||
@$(call print, "Linting source.") | ||
$(LINT) | ||
|
||
clean: | ||
@$(call print, "Cleaning source.$(NC)") | ||
$(RM) coverage.txt psbt/coverage.txt | ||
|
||
.PHONY: all \ | ||
default \ | ||
build \ | ||
check \ | ||
unit \ | ||
unit-cover \ | ||
unit-race \ | ||
fmt \ | ||
lint \ | ||
clean |
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
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
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
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
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
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
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
Oops, something went wrong.