Skip to content

Commit 50fcbb8

Browse files
Merge pull request #1883 from thomasferrandiz/cleanup-makefile
Clean-up Makefile and use docker buildx locally
2 parents a3a9176 + e90a170 commit 50fcbb8

File tree

6 files changed

+37
-135
lines changed

6 files changed

+37
-135
lines changed

.github/workflows/build.yaml

+6-14
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,6 @@ jobs:
2626
- name: go mod vendor
2727
run: go mod vendor
2828

29-
- name: build linux
30-
run: |
31-
set -e
32-
for arch in ${LINUX_ARCHES}; do
33-
echo "Building for arch $arch"
34-
ARCH=$arch make dist/flanneld-$arch
35-
file dist/flanneld-$arch
36-
done
37-
38-
- name: Set up QEMU
39-
uses: docker/setup-qemu-action@v3
40-
4129
- name: Set up Docker Buildx
4230
uses: docker/setup-buildx-action@v3
4331

@@ -50,8 +38,7 @@ jobs:
5038
tags: |
5139
type=ref, event=branch
5240
53-
- name: Build and push Docker image
54-
# if: github.repository_owner == 'flannel-io' && success()
41+
- name: Build multi-arch Docker image
5542
uses: docker/build-push-action@v5
5643
with:
5744
context: .
@@ -60,3 +47,8 @@ jobs:
6047
platforms: linux/amd64,linux/arm64,linux/arm,linux/s390x,linux/ppc64le,linux/riscv64
6148
tags: ${{ steps.meta.outputs.tags }}
6249
build-args: TAG=${{ env.GIT_TAG }}
50+
51+
- name: build for windows
52+
run: make dist/flanneld.exe
53+
54+

.github/workflows/release.yml

-9
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,6 @@ jobs:
3131
- name: go mod vendor
3232
run: go mod vendor
3333

34-
- name: build linux
35-
run: |
36-
set -e
37-
for arch in ${LINUX_ARCHES}; do
38-
echo "Building for arch $arch"
39-
ARCH=$arch make dist/flanneld-$arch
40-
file dist/flanneld-$arch
41-
done
42-
4334
- name: Set up QEMU
4435
uses: docker/setup-qemu-action@v3
4536

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ dist/*.tar.gz
22
dist/flanneld*
33
dist/*.docker
44
dist/here.txt
5+
dist/flannel_oci.tar
56
cover.out
67
.editorconfig
78
.idea/

Documentation/building.md

+16
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,22 @@ If you want to cross-compile for a different platform (e.g. you're running `amd6
1919
Then you should be able to set the ARCH as above
2020
* ARCH=arm make image
2121

22+
## Building a multi-arch image
23+
24+
To build the multi-arch image of flannel locally, you need to install [Docker buildx](https://github.com/docker/buildx).
25+
Then you can use the following target:
26+
```
27+
make build-multi-arch
28+
```
29+
30+
If you don't already have a builder running locally, you can this target to start it:
31+
```
32+
make buildx-create-builder
33+
```
34+
35+
See the [buildx documentation](https://docs.docker.com/reference/cli/docker/buildx/) for more details.
36+
37+
2238
## Building manually
2339

2440
1. Make sure you have required dependencies installed on your machine.

Makefile

+12-110
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: test e2e-test deps cover gofmt gofmt-fix license-check clean tar.gz docker-push release docker-push-all flannel-git docker-manifest-amend docker-manifest-push
1+
.PHONY: test e2e-test deps cover gofmt gofmt-fix license-check clean tar.gz release buildx-create-builder build-multi-arch
22

33
# Registry used for publishing images
44
REGISTRY?=quay.io/coreos/flannel
@@ -58,9 +58,9 @@ dist/flanneld-$(ARCH): deps dist/qemu-$(ARCH)-static
5858
mv dist/flanneld dist/flanneld-$(ARCH)'
5959

6060
## Create a docker image on disk for a specific arch and tag
61-
image: dist/flanneld-$(TAG)-$(ARCH).docker
62-
dist/flanneld-$(TAG)-$(ARCH).docker: dist/flanneld-$(ARCH)
63-
docker build -f images/Dockerfile --platform=$(ARCH) --build-arg TAG=$(TAG) -t $(REGISTRY):$(TAG)-$(ARCH) .
61+
image: deps dist/flanneld-$(TAG)-$(ARCH).docker
62+
dist/flanneld-$(TAG)-$(ARCH).docker:
63+
docker buildx build -f images/Dockerfile --platform=$(ARCH) --build-arg TAG=$(TAG) -t $(REGISTRY):$(TAG)-$(ARCH) --load .
6464
docker save -o dist/flanneld-$(TAG)-$(ARCH).docker $(REGISTRY):$(TAG)-$(ARCH)
6565

6666
# amd64 gets an image without the suffix too (i.e. it's the default)
@@ -126,14 +126,6 @@ verify-modules:
126126
!go mod tidy 2>&1|read && \
127127
!go vet 2>&1|read'
128128

129-
gofmt-fix:
130-
docker run --rm -e CGO_ENABLED=$(CGO_ENABLED) -e GOARCH=$(ARCH) \
131-
-u $(shell id -u):$(shell id -g) \
132-
-v $(CURDIR):/go/src/github.com/flannel-io/flannel \
133-
-v $(CURDIR)/dist:/go/src/github.com/flannel-io/flannel/dist \
134-
golang:$(GO_VERSION) /bin/bash -c '\
135-
cd /go/src/github.com/flannel-io/flannel && \
136-
gofmt -w $(PACKAGES)'
137129

138130
bash_unit:
139131
wget https://raw.githubusercontent.com/pgrange/bash_unit/v2.0.1/bash_unit
@@ -157,7 +149,7 @@ endif
157149

158150
# Make a release after creating a tag
159151
# To build cross platform Docker images, the qemu-static binaries are needed. On ubuntu "apt-get install qemu-user-static"
160-
release: tar.gz dist/qemu-s390x-static dist/qemu-ppc64le-static dist/qemu-arm64-static dist/qemu-arm-static dist/qemu-riscv64-static release-chart release-helm #release-tests
152+
release: tar.gz dist/qemu-s390x-static dist/qemu-ppc64le-static dist/qemu-arm64-static dist/qemu-arm-static dist/qemu-riscv64-static release-chart release-helm
161153
ARCH=amd64 make dist/flanneld-$(TAG)-amd64.docker
162154
ARCH=arm make dist/flanneld-$(TAG)-arm.docker
163155
ARCH=arm64 make dist/flanneld-$(TAG)-arm64.docker
@@ -215,108 +207,18 @@ tar.gz:
215207
tar --transform='flags=r;s|-riscv64||' -zcvf dist/flannel-$(TAG)-linux-riscv64.tar.gz -C dist flanneld-riscv64 mk-docker-opts.sh ../README.md
216208
tar -tvf dist/flannel-$(TAG)-linux-riscv64.tar.gz
217209

218-
release-tests: release-etcd-tests release-k8s-tests
219-
220-
release-etcd-tests: bash_unit
221-
# Run the functional tests with different etcd versions.
222-
ETCD_IMG="quay.io/coreos/etcd:latest" ./bash_unit dist/functional-test.sh
223-
ETCD_IMG="quay.io/coreos/etcd:v3.2.7" ./bash_unit dist/functional-test.sh
224-
# Etcd v2 docker image format is different. Override the etcd binary location so it works.
225-
ETCD_IMG="quay.io/coreos/etcd:v2.3.8" ETCD_LOCATION=" " ./bash_unit dist/functional-test.sh
226-
227-
release-k8s-tests: bash_unit
228-
# Run the functional tests with different k8s versions. Currently these are the latest point releases.
229-
# This list should be updated during the release process.
230-
K8S_VERSION="1.25.2" HYPERKUBE_CMD=" " HYPERKUBE_APISERVER_CMD="kube-apiserver" ./bash_unit dist/functional-test-k8s.sh
231-
K8S_VERSION="1.24.6" HYPERKUBE_CMD=" " HYPERKUBE_APISERVER_CMD="kube-apiserver" ./bash_unit dist/functional-test-k8s.sh
232-
K8S_VERSION="1.23.12" HYPERKUBE_CMD=" " HYPERKUBE_APISERVER_CMD="kube-apiserver" ./bash_unit dist/functional-test-k8s.sh
233-
K8S_VERSION="1.22.15" HYPERKUBE_CMD=" " HYPERKUBE_APISERVER_CMD="kube-apiserver" ./bash_unit dist/functional-test-k8s.sh
234-
K8S_VERSION="1.17.3" HYPERKUBE_CMD=" " HYPERKUBE_APISERVER_CMD="kube-apiserver" ./bash_unit dist/functional-test-k8s.sh
235-
236-
docker-push: dist/flanneld-$(TAG)-$(ARCH).docker
237-
docker push $(REGISTRY):$(TAG)-$(ARCH)
238-
239-
docker-manifest-amend:
240-
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create --amend $(REGISTRY):$(TAG) $(REGISTRY):$(TAG)-$(ARCH)
241-
242-
docker-manifest-push:
243-
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push --purge $(REGISTRY):$(TAG)
244-
245-
docker-push-all:
246-
ARCH=amd64 make docker-push docker-manifest-amend
247-
ARCH=arm make docker-push docker-manifest-amend
248-
ARCH=arm64 make docker-push docker-manifest-amend
249-
ARCH=ppc64le make docker-push docker-manifest-amend
250-
ARCH=s390x make docker-push docker-manifest-amend
251-
ARCH=riscv64 make docker-push docker-manifest-amend
252-
make docker-manifest-push
253-
254-
flannel-git:
255-
ARCH=amd64 REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-amd64.docker docker-push docker-manifest-amend
256-
ARCH=arm REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-arm.docker docker-push docker-manifest-amend
257-
ARCH=arm64 REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-arm64.docker docker-push docker-manifest-amend
258-
ARCH=ppc64le REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-ppc64le.docker docker-push docker-manifest-amend
259-
ARCH=s390x REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-s390x.docker docker-push docker-manifest-amend
260-
ARCH=riscv64 REGISTRY=quay.io/coreos/flannel-git make clean dist/flanneld-$(TAG)-riscv64.docker docker-push docker-manifest-amend
261-
REGISTRY=quay.io/coreos/flannel-git make docker-manifest-push
262-
263210
install:
264211
# This is intended as just a developer convenience to help speed up non-containerized builds
265212
# It is NOT how you install flannel
266213
CGO_ENABLED=$(CGO_ENABLED) go install -v github.com/flannel-io/flannel
267214

268-
minikube-start:
269-
minikube start --network-plugin cni
270-
271-
minikube-build-image:
272-
CGO_ENABLED=1 go build -v -o dist/flanneld-amd64
273-
# Make sure the minikube docker is being used "eval $(minikube docker-env)"
274-
sh -c 'eval $$(minikube docker-env) && docker build -f images/Dockerfile.amd64 -t flannel/minikube .'
275-
276-
minikube-deploy-flannel:
277-
kubectl apply -f Documentation/minikube.yml
278-
279-
minikube-remove-flannel:
280-
kubectl delete -f Documentation/minikube.yml
281-
282-
minikube-restart-pod:
283-
# Use this to pick up a new image
284-
kubectl delete pods -l app=flannel --grace-period=0
285-
286-
kubernetes-logs:
287-
kubectl logs `kubectl get po -l app=flannel -o=custom-columns=NAME:metadata.name --no-headers=true` -c kube-flannel -f
288-
289-
LOCAL_IP_ENV?=$(shell ip route get 8.8.8.8 | head -1 | awk '{print $$7}')
290-
run-etcd: stop-etcd
291-
docker run --detach \
292-
-p 2379:2379 \
293-
--name flannel-etcd quay.io/coreos/etcd \
294-
-e ETCD_UNSUPPORTED_ARCH=$(ARCH) \
295-
etcd \
296-
--advertise-client-urls "http://$(LOCAL_IP_ENV):2379,http://127.0.0.1:2379,http://$(LOCAL_IP_ENV):4001,http://127.0.0.1:4001" \
297-
--listen-client-urls "http://0.0.0.0:2379,http://0.0.0.0:4001"
298-
299-
stop-etcd:
300-
@-docker rm -f flannel-etcd
301-
302-
run-k8s-apiserver: stop-k8s-apiserver
303-
docker run --detach --net=host \
304-
--name calico-k8s-apiserver \
305-
docker.io/rancher/hyperkube:v$(K8S_VERSION)-rancher1-linux-amd64 \
306-
/hyperkube apiserver --etcd-servers=http://$(LOCAL_IP_ENV):2379 \
307-
--service-cluster-ip-range=10.101.0.0/16
308-
309-
stop-k8s-apiserver:
310-
@-docker rm -f calico-k8s-apiserver
311-
312-
run-local-kube-flannel-with-prereqs: run-etcd run-k8s-apiserver dist/flanneld
313-
while ! kubectl apply -f dist/fake-node.yaml; do sleep 1; done
314-
$(MAKE) run-local-kube-flannel
315-
316-
run-local-kube-flannel:
317-
# Currently this requires the netconf to be in /etc/kube-flannel/net-conf.json
318-
sudo NODE_NAME=test dist/flanneld --kube-subnet-mgr --kube-api-url http://127.0.0.1:8080
319-
320215
deps:
321216
go mod vendor
322217
go mod tidy
218+
219+
buildx-create-builder:
220+
docker buildx create --name mybuilder --use --bootstrap
221+
222+
build-multi-arch:
223+
docker buildx build --platform linux/amd64,linux/arm64,linux/arm,linux/s390x,linux/ppc64le,linux/riscv64 -t $(REGISTRY):$(TAG) -f images/Dockerfile --build-arg TAG=$(TAG) -o type=oci,dest=dist/flannel_oci.tar --progress plain .
224+

pkg/trafficmngr/iptables/iptables_windows.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ type IPTables interface {
2929
Exists(table string, chain string, rulespec ...string) (bool, error)
3030
}
3131

32-
func (iptm IPTablesManager) SetupAndEnsureForwardRules(flannelIPv4Network, flannelIPv6Network string, resyncPeriod int) {
32+
func (iptm IPTablesManager) SetupAndEnsureForwardRules(flannelIPv4Network ip.IP4Net, flannelIPv6Network ip.IP6Net, resyncPeriod int) {
3333
}
3434

3535
func (iptm IPTablesManager) SetupAndEnsureMasqRules(flannelIPv4Net, prevSubnet ip.IP4Net,
3636
prevNetworks []ip.IP4Net,
37-
currentlease *lease.Lease,
3837
flannelIPv6Net, prevIPv6Subnet ip.IP6Net,
3938
prevIPv6Networks []ip.IP6Net,
39+
currentlease *lease.Lease,
4040
resyncPeriod int) error {
4141
return nil
4242
}

0 commit comments

Comments
 (0)