Skip to content

Commit

Permalink
Cleanup & Maintenance
Browse files Browse the repository at this point in the history
- refactor makefile, clean up unused targets
  remove the use of .gopath, restructure and add
  target description
- update .gitignore file
- add test-image target to buildtest workflow

Signed-off-by: adrianc <[email protected]>
  • Loading branch information
adrianchiris committed May 29, 2024
1 parent 270d18b commit 7d32de9
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 58 deletions.
15 changes: 14 additions & 1 deletion .github/workflows/buildtest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,22 @@ jobs:
go-version: 1.20.x
- name: check out code into the Go module directory
uses: actions/checkout@v3
- name: run unit-test
- name: run unit-test image test
run: make test

image-test:
name: image test
runs-on: ubuntu-22.04
steps:
- name: check out the repo
uses: actions/checkout@v3

- name: set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: build and test ib-sriov-cni image
run: make test-image

coverage:
runs-on: ubuntu-22.04
needs: build
Expand Down
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# Files
.gopath
.cover
*.cover

# Folders
build/
bin/
vendor/
97 changes: 42 additions & 55 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
# Package related
BINARY_NAME=ib-sriov
PACKAGE=ib-sriov-cni
ORG_PATH=github.com/k8snetworkplumbingwg
REPO_PATH=$(ORG_PATH)/$(PACKAGE)
GOPATH=$(CURDIR)/.gopath
GOBIN =$(CURDIR)/bin
BINDIR=$(CURDIR)/bin
BUILDDIR=$(CURDIR)/build
BASE=$(GOPATH)/src/$(REPO_PATH)
BASE=$(CURDIR)
GOFILES=$(shell find . -name *.go | grep -vE "(_test.go)")
PKGS=$(or $(PKG),$(shell cd $(BASE) && env GOPATH=$(GOPATH) $(GO) list ./...))
TESTPKGS = $(shell env GOPATH=$(GOPATH) $(GO) list -f '{{ if or .TestGoFiles .XTestGoFiles }}{{ .ImportPath }}{{ end }}' $(PKGS))

export GOPATH
export GOBIN
PKGS=$(or $(PKG),$(shell $(GO) list ./...))
TESTPKGS = $(shell $(GO) list -f '{{ if or .TestGoFiles .XTestGoFiles }}{{ .ImportPath }}{{ end }}' $(PKGS))

# Version
VERSION?=master
Expand All @@ -40,26 +33,16 @@ IMAGE_BUILD_OPTS += $(DOCKERARGS)

# Go tools
GO = go
GOLANGCI_LINT = $(GOBIN)/golangci-lint
# golangci-lint version should be updated periodically
# we keep it fixed to avoid it from unexpectedly failing on the project
# in case of a version bump
GOLANGCI_LINT_VER = v1.51.2
TIMEOUT = 15
Q = $(if $(filter 1,$V),,@)

.PHONY: all
all: lint build test-coverage

$(BASE): ; $(info setting GOPATH...)
@mkdir -p $(dir $@)
@ln -sf $(CURDIR) $@

$(GOBIN):
$(BINDIR):
@mkdir -p $@

$(BUILDDIR): | $(BASE) ; $(info Creating build directory...)
@cd $(BASE) && mkdir -p $@
$(BUILDDIR): ; $(info Creating build directory...)
@mkdir -p $@

build: $(BUILDDIR)/$(BINARY_NAME) ; $(info Building $(BINARY_NAME)...) ## Build executable file
$(info Done!)
Expand All @@ -68,80 +51,84 @@ $(BUILDDIR)/$(BINARY_NAME): $(GOFILES) | $(BUILDDIR)
@cd $(BASE)/cmd/$(PACKAGE) && CGO_ENABLED=0 $(GO) build -o $(BUILDDIR)/$(BINARY_NAME) -tags no_openssl -ldflags $(LDFLAGS) -v

# Tools
$(GOLANGCI_LINT): ; $(info installing golangci-lint...)
$Q go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VER)

GOLANGCI_LINT = $(BINDIR)/golangci-lint
# golangci-lint version should be updated periodically
# we keep it fixed to avoid it from unexpectedly failing on the project
# in case of a version bump
GOLANGCI_LINT_VER = v1.51.2
TIMEOUT = 15
$(GOLANGCI_LINT): | $(BINDIR) ; $(info installing golangci-lint...)
$Q GOBIN=$(BINDIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VER)

GOVERALLS = $(BINDIR)/goveralls
$(GOVERALLS): | $(BINDIR) ; $(info installing goveralls...)
$(call go-install-tool,$(GOVERALLS),github.com/mattn/goveralls@latest)

HADOLINT_TOOL = $(BINDIR)/hadolint
$(HADOLINT_TOOL): | $(BINDIR) ; $(info installing hadolint...)
$(call wget-install-tool,$(HADOLINT_TOOL),"https://github.com/hadolint/hadolint/releases/download/v2.12.1-beta/hadolint-Linux-x86_64")

SHELLCHECK_TOOL = $(BINDIR)/shellcheck
$(SHELLCHECK_TOOL): | $(BASE) ; $(info installing shellcheck...)
$(call install-shellcheck,$(BINDIR),"https://github.com/koalaman/shellcheck/releases/download/v0.9.0/shellcheck-v0.9.0.linux.x86_64.tar.xz")

# Tests

.PHONY: lint
lint: | $(GOLANGCI_LINT) ; $(info running golangci-lint...) @ ## Run golangci-lint
lint: | $(GOLANGCI_LINT) ; $(info running golangci-lint...) ## Run golangci-lint
$Q $(GOLANGCI_LINT) run --timeout=5m

TEST_TARGETS := test-default test-bench test-short test-verbose test-race
.PHONY: $(TEST_TARGETS) test-xml check test tests
.PHONY: $(TEST_TARGETS) test tests
test-bench: ARGS=-run=__absolutelynothing__ -bench=. ## Run benchmarks
test-short: ARGS=-short ## Run only short tests
test-verbose: ARGS=-v ## Run tests in verbose mode with coverage reporting
test-race: ARGS=-race ## Run tests with race detector
$(TEST_TARGETS): NAME=$(MAKECMDGOALS:test-%=%)
$(TEST_TARGETS): test
check test tests: lint | $(BASE) ; $(info running $(NAME:%=% )tests...) @ ## Run tests
$Q cd $(BASE) && $(GO) test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS)

test-xml: lint | $(BASE) $(GO2XUNIT) ; $(info running $(NAME:%=% )tests...) @ ## Run tests with xUnit output
$Q cd $(BASE) && 2>&1 $(GO) test -timeout 20s -v $(TESTPKGS) | tee test/tests.output
$(GO2XUNIT) -fail -input test/tests.output -output test/tests.xml

GOVERALLS = $(BINDIR)/goveralls
$(GOVERALLS): | $(BASE) ; $(info installing goveralls...)
$(call go-install-tool,$(GOVERALLS),github.com/mattn/goveralls@latest)

HADOLINT_TOOL = $(BINDIR)/hadolint
$(HADOLINT_TOOL): | $(BASE) ; $(info installing hadolint...)
$(call wget-install-tool,$(HADOLINT_TOOL),"https://github.com/hadolint/hadolint/releases/download/v2.12.1-beta/hadolint-Linux-x86_64")

SHELLCHECK_TOOL = $(BINDIR)/shellcheck
$(SHELLCHECK_TOOL): | $(BASE) ; $(info installing shellcheck...)
$(call install-shellcheck,$(BINDIR),"https://github.com/koalaman/shellcheck/releases/download/v0.9.0/shellcheck-v0.9.0.linux.x86_64.tar.xz")
test: ; $(info running $(NAME:%=% )tests...) @ ## Run tests
$Q $(GO) test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS)

COVERAGE_MODE = count
COVER_PROFILE = ib-sriov-cni.cover
test-coverage-tools: | $(GOVERALLS)
test-coverage: test-coverage-tools | $(BASE) ; $(info running coverage tests...) @ ## Run coverage tests
test-coverage: | $(GOVERALLS) ; $(info running coverage tests...) ## Run coverage tests
$Q $(GO) test -covermode=$(COVERAGE_MODE) -coverprofile=$(COVER_PROFILE) ./...

.PHONY: upload-coverage
upload-coverage: test-coverage-tools | $(BASE) ; $(info uploading coverage results...) @ ## Upload coverage report
upload-coverage: | $(GOVERALLS) ; $(info uploading coverage results...) ## Upload coverage report
$(GOVERALLS) -coverprofile=$(COVER_PROFILE) -service=github

.PHONY: hadolint
hadolint: $(BASE) $(HADOLINT_TOOL); $(info running hadolint...) @ ## Run hadolint
hadolint: $(HADOLINT_TOOL); $(info running hadolint...) ## Run hadolint
$Q $(HADOLINT_TOOL) Dockerfile

.PHONY: shellcheck
shellcheck: $(BASE) $(SHELLCHECK_TOOL); $(info running shellcheck...) @ ## Run shellcheck
shellcheck: $(SHELLCHECK_TOOL); $(info running shellcheck...) ## Run shellcheck
$Q $(SHELLCHECK_TOOL) images/entrypoint.sh

# Container image
.PHONY: image
image: | $(BASE) ; $(info Building Docker image...) ## Build conatiner image
image: ; $(info Building Docker image...) ## Build conatiner image
@$(IMAGE_BUILDER) build -t $(TAG) -f $(DOCKERFILE) $(CURDIR) $(IMAGE_BUILD_OPTS)

# Dependency management
.PHONY: deps-update
deps-update: ; $(info updating dependencies...)
deps-update: ; $(info updating dependencies...) ## update dependencies by running go mod tidy
go mod tidy

test-image: image
.PHONY: test-image
test-image: image ## Test image
$Q $(BASE)/images/image_test.sh $(IMAGE_BUILDER) $(TAG)

tests: lint hadolint shellcheck test test-image ## Run lint, hadolint, shellcheck, unit test and image test

# Misc

.PHONY: clean
clean: ; $(info Cleaning...) ## Cleanup everything
clean: ; $(info Cleaning...) ## Cleanup everything
@$(GO) clean -modcache
@rm -rf $(GOPATH)
@rm -rf $(BINDIR)
@rm -rf $(BUILDDIR)
@rm -rf test

Expand Down

0 comments on commit 7d32de9

Please sign in to comment.