1
- # Makefile for releasing Alpine multi-arch Docker images
1
+ # Makefile for releasing podinfo
2
2
#
3
3
# The release version is controlled from pkg/version
4
4
5
- EMPTY: =
6
- SPACE: =$(EMPTY ) $(EMPTY )
7
- COMMA: =$(EMPTY ) ,$(EMPTY )
8
5
NAME: =podinfo
9
6
DOCKER_REPOSITORY: =stefanprodan
10
7
DOCKER_IMAGE_NAME: =$(DOCKER_REPOSITORY ) /$(NAME )
11
- GITREPO: =github.com/stefanprodan/k8s-podinfo
12
8
GITCOMMIT: =$(shell git describe --dirty --always)
13
9
VERSION: =$(shell grep 'VERSION' pkg/version/version.go | awk '{ print $$4 }' | tr -d '"')
14
- LINUX_ARCH: =arm arm64 ppc64le s390x amd64
15
- PLATFORMS: =$(subst $(SPACE ) ,$(COMMA ) ,$(foreach arch,$(LINUX_ARCH ) ,linux/$(arch ) ) )
16
10
17
- .PHONY : build
18
- build :
19
- @echo Cleaning old builds
20
- @rm -rf build && mkdir build
21
- @echo Building: linux/$(LINUX_ARCH ) $(VERSION ) ; \
22
- for arch in $( LINUX_ARCH) ; do \
23
- mkdir -p build/linux/$$ arch && CGO_ENABLED=0 GOOS=linux GOARCH=$$ arch go build -ldflags=" -s -w -X $( GITREPO) /pkg/version.REVISION=$( GITCOMMIT) " -o build/linux/$$ arch/$(NAME ) ./cmd/$(NAME ) ; \
24
- cp -r ui/ build/linux/$$ arch/ui; \
25
- done
26
-
27
- .PHONY : tar
28
- tar : build
29
- @echo Cleaning old releases
30
- @rm -rf release && mkdir release
31
- for arch in $( LINUX_ARCH) ; do \
32
- tar -zcf release/$(NAME ) _$(VERSION ) _linux_$$ arch.tgz -C build/linux/$$ arch $(NAME ) ; \
33
- done
34
-
35
- .PHONY : docker-build
36
- docker-build : tar
37
- # Steps:
38
- # 1. Copy appropriate podinfo binary to build/docker/linux/<arch>
39
- # 2. Copy Dockerfile to build/docker/linux/<arch>
40
- # 3. Replace base image from alpine:latest to <arch>/alpine:latest
41
- # 4. Comment RUN in Dockerfile
42
- # <arch>:
43
- # arm: arm32v6
44
- # arm64: arm64v8
45
- rm -rf build/docker
46
- @for arch in $(LINUX_ARCH ) ; do \
47
- mkdir -p build/docker/linux/$$ arch ; \
48
- tar -xzf release/$(NAME ) _$(VERSION ) _linux_$$ arch.tgz -C build/docker/linux/$$ arch ; \
49
- cp -r ui/ build/docker/linux/$$ arch/ui; \
50
- if [ $$ arch == amd64 ]; then \
51
- cp Dockerfile build/docker/linux/$$ arch ; \
52
- cp Dockerfile build/docker/linux/$$ arch/Dockerfile.in ; \
53
- else \
54
- cp Dockerfile.build build/docker/linux/$$ arch/Dockerfile ; \
55
- cp Dockerfile.build build/docker/linux/$$ arch/Dockerfile.in ; \
56
- case $$ arch in \
57
- arm) \
58
- BASEIMAGE=arm32v6 ; \
59
- ;; \
60
- arm64) \
61
- BASEIMAGE=arm64v8 ; \
62
- ;; \
63
- * ) \
64
- BASEIMAGE=$$ arch ; \
65
- ;; \
66
- esac ; \
67
- sed -e " s/alpine:latest/$$ BASEIMAGE\\ /alpine:latest/" -e " s/^\\ s*RUN/#RUN/" build/docker/linux/$$ arch/Dockerfile.in > build/docker/linux/$$ arch/Dockerfile ; \
68
- fi ; \
69
- docker build -t $(NAME ) build/docker/linux/$$ arch ; \
70
- docker tag $(NAME ) $(DOCKER_IMAGE_NAME ) :$(NAME ) -$$ arch ; \
71
- done
72
-
73
- .PHONY : docker-push
74
- docker-push :
75
- @echo Pushing: $(VERSION ) to $(DOCKER_IMAGE_NAME )
76
- for arch in $( LINUX_ARCH) ; do \
77
- docker push $(DOCKER_IMAGE_NAME ) :$(NAME ) -$$arch ;\
78
- done
79
- manifest-tool push from-args --platforms $(PLATFORMS) --template $(DOCKER_IMAGE_NAME):podinfo-ARCH --target $(DOCKER_IMAGE_NAME):$(VERSION)
80
- manifest-tool push from-args --platforms $(PLATFORMS) --template $(DOCKER_IMAGE_NAME):podinfo-ARCH --target $(DOCKER_IMAGE_NAME):latest
11
+ run :
12
+ GO111MODULE=on go run cmd/podinfo/*
81
13
82
- .PHONY : quay-push
83
- quay-push :
84
- @echo Pushing: $(VERSION ) to quay.io/$(DOCKER_IMAGE_NAME ) :$(VERSION )
85
- @docker build -t quay.io/$(DOCKER_IMAGE_NAME ) :$(VERSION ) -f Dockerfile.ci . ; docker push quay.io/$(DOCKER_IMAGE_NAME ) :$(VERSION )
86
-
87
- .PHONY : clean
88
- clean :
89
- rm -rf release
90
- rm -rf build
14
+ test :
15
+ GO111MODULE=on go test -v -race ./...
91
16
92
- .PHONY : gcr- build
93
- gcr- build:
94
- docker build -t gcr.io/ $( DOCKER_IMAGE_NAME ) : $( VERSION ) -f Dockerfile.ci .
17
+ build :
18
+ GO111MODULE=on GIT_COMMIT= $$( git rev-list -1 HEAD ) && GO111MODULE=on CGO_ENABLED=0 go build -ldflags " -s -w -X github.com/stefanprodan/podinfo/pkg/version.REVISION= $$ {GIT_COMMIT} " -a -o ./bin/podinfo ./cmd/podinfo/ *
19
+ GO111MODULE=on GIT_COMMIT= $$( git rev-list -1 HEAD ) && GO111MODULE=on CGO_ENABLED=0 go build -ldflags " -s -w -X github.com/stefanprodan/podinfo/pkg/version.REVISION= $$ {GIT_COMMIT} " -a -o ./bin/podcli ./cmd/podcli/ *
95
20
96
- .PHONY : test
97
- test :
98
- go test -v -race ./...
21
+ build-charts :
22
+ helm lint charts/ *
23
+ helm package charts/ *
99
24
100
- .PHONY : dep
101
- dep :
102
- go get -u github.com/golang/dep/cmd/dep
103
- go get -u github.com/estesp/manifest-tool
25
+ build-container :
26
+ docker build -t $(DOCKER_IMAGE_NAME ) :$(VERSION ) .
104
27
105
- .PHONY : charts
106
- charts :
107
- cd charts/ && helm package podinfo/
108
- cd charts/ && helm package podinfo-istio/
109
- cd charts/ && helm package loadtest/
110
- cd charts/ && helm package ambassador/
111
- cd charts/ && helm package grafana/
112
- cd charts/ && helm package ngrok/
113
- mv charts/* .tgz docs/
114
- helm repo index docs --url https://stefanprodan.github.io/k8s-podinfo --merge ./docs/index.yaml
28
+ push-container :
29
+ docker push $(DOCKER_IMAGE_NAME ) :$(VERSION )
30
+ docker tag $(DOCKER_IMAGE_NAME ) :$(VERSION ) quay.io/$(DOCKER_IMAGE_NAME ) :$(VERSION )
31
+ docker push quay.io/$(DOCKER_IMAGE_NAME ) :$(VERSION )
0 commit comments