Skip to content

Commit 612d9a3

Browse files
mruegaauren
authored andcommitted
Update Build and Test Procedures
* Move lintand test jobs to Github Actions * Integrate the gofmt check into Makefile * Extract version for gobgp, gorelease, gomoq
1 parent c38c3ac commit 612d9a3

File tree

7 files changed

+105
-79
lines changed

7 files changed

+105
-79
lines changed

.github/workflows/ci.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
name: continuous-integration
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
- v[1-9].*
8+
tags:
9+
- v[1-9].*
10+
pull_request:
11+
branches:
12+
- master
13+
- v[1-9].*
14+
15+
jobs:
16+
ci-go-lint:
17+
name: ci-go-lint
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: Set up Go 1.x
21+
uses: actions/setup-go@v2
22+
with:
23+
go-version: ~1.16.4
24+
id: go
25+
26+
- name: Check out code into the Go module directory
27+
uses: actions/checkout@v2
28+
29+
- name: Lint kube-router code
30+
run: |
31+
make lint
32+
33+
ci-unit-tests:
34+
name: ci-unit-tests
35+
runs-on: ubuntu-latest
36+
steps:
37+
- name: Set up Go 1.x
38+
uses: actions/setup-go@v2
39+
with:
40+
go-version: ~1.16.4
41+
id: go
42+
43+
- name: Check out code into the Go module directory
44+
uses: actions/checkout@v2
45+
46+
- name: Run unit tests for kube-router
47+
run: |
48+
make test
49+
50+
ci-build-kube-router:
51+
name: ci-build-kube-router
52+
runs-on: ubuntu-latest
53+
steps:
54+
- name: Set up Go 1.x
55+
uses: actions/setup-go@v2
56+
with:
57+
go-version: ~1.16.4
58+
id: go
59+
60+
- name: Check out code into the Go module directory
61+
uses: actions/checkout@v2
62+
63+
- name: Build kube-router
64+
run: |
65+
make kube-router

.gitignore

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,3 @@
55
_output
66
_cache
77
vendor
8-
Dockerfile.amd64.run
9-
Dockerfile.arm64.run
10-
Dockerfile.s390x.run
11-
Dockerfile.arm.run
12-
Dockerfile.ppc64le.run

.travis.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ env:
1919
- GIT_BRANCH=$TRAVIS_BRANCH
2020

2121
script:
22-
- build/travis-test.sh
23-
# All successfully built commits get an image placed in the kube-router-git
22+
# All built commits get an image placed in the kube-router-git
2423
# image repo and tagged with the commit hash.
2524
- wget https://github.com/estesp/manifest-tool/releases/download/v1.0.2/manifest-tool-linux-amd64 -O manifest-tool && chmod +x manifest-tool
2625
- build/travis-deploy.sh

Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
FROM alpine:3.12
1+
ARG ARCH=
2+
FROM ${ARCH}alpine:3.12
23

34
RUN apk add --no-cache \
45
iptables \

Makefile

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ GOARCH?=$(shell go env GOARCH)
33
DEV_SUFFIX?=-git
44
OSX=$(filter Darwin,$(shell uname))
55
BUILD_DATE?=$(shell date +%Y-%m-%dT%H:%M:%S%z)
6-
LOCAL_PACKAGES?=app app/controllers app/options app/watchers utils
76
IMG_NAMESPACE?=cloudnativelabs
87
GIT_COMMIT=$(shell git describe --tags --dirty)
98
GIT_BRANCH?=$(shell git rev-parse --abbrev-ref HEAD)
@@ -18,81 +17,86 @@ DOCKER=$(if $(or $(IN_DOCKER_GROUP),$(IS_ROOT),$(OSX)),docker,sudo docker)
1817
MAKEFILE_DIR=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
1918
UPSTREAM_IMPORT_PATH=$(GOPATH)/src/github.com/cloudnativelabs/kube-router/
2019
BUILD_IN_DOCKER?=true
21-
DOCKER_BUILD_IMAGE?=golang:1.16.3-alpine3.12
20+
DOCKER_BUILD_IMAGE?=golang:1.16.4-alpine3.12
2221
DOCKER_LINT_IMAGE?=golangci/golangci-lint:v1.27.0
23-
GOBGP_VERSION=v0.0.0-20210402043138-915bfc2d8189 # v2.26.0
22+
GOBGP_VERSION=v0.0.0-20210503121111-d1a8400dc698 # v2.27.0
2423
QEMU_IMAGE?=multiarch/qemu-user-static
24+
GORELEASER_VERSION=v0.162.1
25+
MOQ_VERSION=v0.2.1
2526
ifeq ($(GOARCH), arm)
2627
ARCH_TAG_PREFIX=$(GOARCH)
2728
FILE_ARCH=ARM
28-
DOCKERFILE_SED_EXPR?=s,FROM alpine,FROM arm32v6/alpine,
29+
DOCKER_ARCH=arm32v6/
2930
else ifeq ($(GOARCH), arm64)
3031
ARCH_TAG_PREFIX=$(GOARCH)
3132
FILE_ARCH=ARM aarch64
32-
DOCKERFILE_SED_EXPR?=s,FROM alpine,FROM arm64v8/alpine,
33+
DOCKER_ARCH=arm64v8/
3334
else ifeq ($(GOARCH), s390x)
3435
ARCH_TAG_PREFIX=$(GOARCH)
3536
FILE_ARCH=IBM S/390
36-
DOCKERFILE_SED_EXPR?=s,FROM alpine,FROM s390x/alpine,
37+
DOCKER_ARCH=s390x/
3738
else ifeq ($(GOARCH), ppc64le)
3839
ARCH_TAG_PREFIX=$(GOARCH)
3940
FILE_ARCH=64-bit PowerPC
40-
DOCKERFILE_SED_EXPR?=s,FROM alpine,FROM ppc64le/alpine,
41+
DOCKER_ARCH=ppc64le/
4142
else
4243
ARCH_TAG_PREFIX=amd64
43-
DOCKERFILE_SED_EXPR?=
4444
FILE_ARCH=x86-64
45+
DOCKER_ARCH=
4546
endif
4647
$(info Building for GOARCH=$(GOARCH))
4748
all: test kube-router container ## Default target. Runs tests, builds binaries and images.
4849

4950
kube-router:
50-
ifeq "$(BUILD_IN_DOCKER)" "true"
5151
@echo Starting kube-router binary build.
52+
ifeq "$(BUILD_IN_DOCKER)" "true"
5253
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
53-
sh -c ' \
54-
GOARCH=$(GOARCH) CGO_ENABLED=0 go build \
55-
-ldflags "-X github.com/cloudnativelabs/kube-router/pkg/version.Version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/pkg/version.BuildDate=$(BUILD_DATE)" \
56-
-o kube-router cmd/kube-router/kube-router.go'
57-
@echo Finished kube-router binary build.
54+
sh -c \
55+
'GOARCH=$(GOARCH) CGO_ENABLED=0 go build \
56+
-ldflags "-X github.com/cloudnativelabs/kube-router/pkg/version.Version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/pkg/version.BuildDate=$(BUILD_DATE)" \
57+
-o kube-router cmd/kube-router/kube-router.go'
5858
else
59-
GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-X github.com/cloudnativelabs/kube-router/pkg/cmd.version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/pkg/cmd.buildDate=$(BUILD_DATE)' -o kube-router cmd/kube-router/kube-router.go
59+
GOARCH=$(GOARCH) CGO_ENABLED=0 go build \
60+
-ldflags "-X github.com/cloudnativelabs/kube-router/pkg/version.Version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/pkg/version.BuildDate=$(BUILD_DATE)" \
61+
-o kube-router cmd/kube-router/kube-router.go
62+
6063
endif
64+
@echo Finished kube-router binary build.
6165

6266
test: gofmt ## Runs code quality pipelines (gofmt, tests, coverage, etc)
6367
ifeq "$(BUILD_IN_DOCKER)" "true"
6468
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
65-
sh -c 'CGO_ENABLED=0 go test -v -timeout 30s github.com/cloudnativelabs/kube-router/cmd/kube-router/ github.com/cloudnativelabs/kube-router/pkg/...'
69+
sh -c \
70+
'CGO_ENABLED=0 go test -v -timeout 30s github.com/cloudnativelabs/kube-router/cmd/kube-router/ github.com/cloudnativelabs/kube-router/pkg/...'
71+
6672
else
67-
go test -v -timeout 30s github.com/cloudnativelabs/kube-router/cmd/kube-router/ github.com/cloudnativelabs/kube-router/pkg/...
73+
go test -v -timeout 30s github.com/cloudnativelabs/kube-router/cmd/kube-router/ github.com/cloudnativelabs/kube-router/pkg/...
6874
endif
6975

7076
lint: gofmt
7177
ifeq "$(BUILD_IN_DOCKER)" "true"
7278
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_LINT_IMAGE) \
73-
sh -c 'golangci-lint run ./...'
79+
sh -c \
80+
'golangci-lint run ./...'
7481
else
7582
golangci-lint run ./...
7683
endif
7784

7885
run: kube-router ## Runs "kube-router --help".
7986
./kube-router --help
8087

81-
container: Dockerfile.$(GOARCH).run kube-router gobgp multiarch-binverify ## Builds a Docker container image.
88+
container: kube-router gobgp multiarch-binverify ## Builds a Docker container image.
8289
@echo Starting kube-router container image build for $(GOARCH) on $(shell go env GOHOSTARCH)
8390
@if [ "$(GOARCH)" != "$(shell go env GOHOSTARCH)" ]; then \
8491
echo "Using qemu to build non-native container"; \
8592
$(DOCKER) run --rm --privileged $(QEMU_IMAGE) --reset -p yes; \
8693
fi
87-
$(DOCKER) build -t "$(REGISTRY_DEV):$(subst /,,$(IMG_TAG))" -f Dockerfile.$(GOARCH).run .
94+
$(DOCKER) build -t "$(REGISTRY_DEV):$(subst /,,$(IMG_TAG))" -f Dockerfile --build-arg ARCH="$(DOCKER_ARCH)" .
8895
@if [ "$(GIT_BRANCH)" = "master" ]; then \
8996
$(DOCKER) tag "$(REGISTRY_DEV):$(IMG_TAG)" "$(REGISTRY_DEV)"; \
9097
fi
9198
@echo Finished kube-router container image build.
9299

93-
Dockerfile.$(GOARCH).run: Dockerfile Makefile
94-
@sed -e "$(DOCKERFILE_SED_EXPR)" Dockerfile > $(@)
95-
96100
docker-login: ## Logs into a docker registry using {DOCKER,QUAY}_{USERNAME,PASSWORD} variables.
97101
@echo Starting docker login target.
98102
@if [ -n "$(DOCKER_USERNAME)" ] && [ -n "$(DOCKER_PASSWORD)" ]; then \
@@ -143,7 +147,7 @@ github-release:
143147
@echo Starting kube-router GitHub release creation.
144148
@[ -n "$(value GITHUB_TOKEN)" ] && \
145149
GITHUB_TOKEN=$(value GITHUB_TOKEN); \
146-
curl -sL https://git.io/goreleaser | VERSION=v0.142.0 bash
150+
curl -sL https://git.io/goreleaser | VERSION=$(GORELEASER_VERSION) bash
147151
@echo Finished kube-router GitHub release creation.
148152

149153
release: push-release github-release ## Pushes a release to DockerHub and GitHub
@@ -152,15 +156,14 @@ release: push-release github-release ## Pushes a release to DockerHub and GitHub
152156
clean: ## Removes the kube-router binary and Docker images
153157
rm -f kube-router
154158
rm -f gobgp
155-
rm -f Dockerfile.$(GOARCH).run
156159
if [ $(shell $(DOCKER) images -q $(REGISTRY_DEV):$(IMG_TAG) 2> /dev/null) ]; then \
157160
$(DOCKER) rmi $(REGISTRY_DEV):$(IMG_TAG); \
158161
fi
159162
gofmt: ## Tells you what files need to be gofmt'd.
160-
@build/verify-gofmt.sh
163+
gofmt -l -s $(shell find . -not \( \( -wholename '*/vendor/*' \) -prune \) -name '*.go')
161164

162165
gofmt-fix: ## Fixes files that need to be gofmt'd.
163-
gofmt -s -w $(LOCAL_PACKAGES)
166+
gofmt -s -w $(shell find . -not \( \( -wholename '*/vendor/*' \) -prune \) -name '*.go')
164167

165168
# List of all file_moq.go files which would need to be regenerated
166169
# from file.go if changed
@@ -171,7 +174,7 @@ gomoqs: ./pkg/controllers/proxy/network_services_controller_moq.go
171174
%_moq.go: %.go
172175
ifeq "$(BUILD_IN_DOCKER)" "true"
173176
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
174-
sh -c 'apk add --no-cache git build-base && go get github.com/matryer/moq && go generate -v $(*).go'
177+
sh -c 'go install github.com/matryer/moq@$(MOQ_VERSION) && go generate -v $(*).go'
175178
else
176179
@test -x $(lastword $(subst :, ,$(GOPATH)))/bin/moq && exit 0; echo "ERROR: 'moq' tool is needed to update mock test files, install it with: \ngo get github.com/matryer/moq\n"; exit 1
177180
go generate -v $(*).go
@@ -214,14 +217,15 @@ else
214217
endif
215218

216219
gobgp:
217-
ifeq "$(BUILD_IN_DOCKER)" "true"
218220
@echo Building gobgp
221+
ifeq "$(BUILD_IN_DOCKER)" "true"
219222
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
220-
sh -c 'apk --no-cache add git && GOARCH=$(GOARCH) CGO_ENABLED=0 go install github.com/osrg/gobgp/cmd/gobgp@$(GOBGP_VERSION) && if [[ ${GOARCH} != $$(go env GOHOSTARCH) ]]; then PREFIX=linux_${GOARCH}; fi && cp $$(go env GOPATH)/bin/$${PREFIX}/gobgp .'
221-
@echo Finished building gobgp.
223+
sh -c \
224+
'CGO_ENABLED=0 GOARCH=$(GOARCH) GOOS=linux go install github.com/osrg/gobgp/cmd/gobgp@$(GOBGP_VERSION) && if [ ${GOARCH} != $$(go env GOHOSTARCH) ]; then PREFIX=linux_${GOARCH}; fi && cp $$(go env GOPATH)/bin/$${PREFIX}/gobgp .'
222225
else
223-
CGO_ENABLED=0 GOARCH=$(GOARCH) GOOS=linux go install github.com/osrg/gobgp/cmd/gobgp@$(GOBGP_VERSION) && if [[ ${GOARCH} != $$(go env GOHOSTARCH) ]]; then PREFIX=linux_${GOARCH}; fi && cp $$(go env GOPATH)/bin/$${PREFIX}/gobgp .
226+
CGO_ENABLED=0 GOARCH=$(GOARCH) GOOS=linux go install github.com/osrg/gobgp/cmd/gobgp@$(GOBGP_VERSION) && if [ ${GOARCH} != $$(go env GOHOSTARCH) ]; then PREFIX=linux_${GOARCH}; fi && cp $$(go env GOPATH)/bin/$${PREFIX}/gobgp .
224227
endif
228+
@echo Finished building gobgp.
225229

226230
multiarch-binverify:
227231
@echo 'Verifying kube-router gobgp for ARCH=$(FILE_ARCH) ...'
@@ -232,7 +236,7 @@ help:
232236
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
233237
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-22s\033[0m %s\n", $$1, $$2}'
234238

235-
.PHONY: build clean container run release goreleaser push gofmt gofmt-fix gomoqs
239+
.PHONY: clean container run release goreleaser push gofmt gofmt-fix gomoqs
236240
.PHONY: test lint docker-login push-manifest push-manifest-release
237241
.PHONY: push-release github-release help gopath gopath-fix multiarch-binverify
238242

build/travis-test.sh

Lines changed: 0 additions & 12 deletions
This file was deleted.

build/verify-gofmt.sh

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)