-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
152 lines (125 loc) · 5.87 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
.PHONY : manifest cache build all
ARCH:= $(shell docker version -f "{{.Server.Arch}}")
ARCHS:= amd64 arm64 riscv64
DOCKER_TAG := juampe/cardano
DOCKER_SUBTAG := -impish
UBUNTU := ubuntu:impish
#UBUNTU := juampe/ubuntu:hirsute
CARDANO_VERSION := $(shell curl -s https://api.github.com/repos/input-output-hk/cardano-node/releases/latest | jq -r ".tag_name")
LATEST_TAG := $(DOCKER_TAG):latest
RELEASE_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)
ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG)
BUILDAH_CACHE := -v $(PWD)/cache/.cabal:/root/.cabal -v $(PWD)/repo:/repo
JOBS := -j1
############
#Local stuff
############
all: local-build local-cache local-manifest
show:
@echo $(ARCH_TAG)
qemu-register:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
#Local build made with buildah due to lack of mount cache in build time, la tener we extract with podman
local-build:
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
buildah bud $(BUILDAH_CACHE) --format docker --layers --platform linux/$(ARCH) --build-arg JOBS=$(JOBS) --build-arg UBUNTU=$(UBUNTU) --build-arg TARGETARCH=$(ARCH) --build-arg CARDANO_VERSION=$(CARDANO_VERSION) -t $(ARCH_TAG) -f Dockerfile .
local-build-clean:
buildah rm -a
buildah rmi -a
local-fetch-cache:
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
$(eval CARDANO_FILE := cardano-$(ARCH)-$(CARDANO_VERSION).tgz)
$(eval CARDANO_REPO := https://iquis.com/repo/cardano/$(CARDANO_FILE))
cd repo && wget -c -N $(CARDANO_REPO)
local-cache: local-fetch-cache
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
docker image rm $(UBUNTU)-$(ARCH) || true
docker pull --platform linux/$(ARCH) $(UBUNTU)
docker image tag $(UBUNTU) $(UBUNTU)-$(ARCH)
@echo "Build cache $(ARCH_TAG)"
docker build --platform linux/$(ARCH) --build-arg JOBS=$(JOBS) --build-arg UBUNTU=$(UBUNTU)-$(ARCH) --build-arg TARGETARCH=$(ARCH) --build-arg CARDANO_VERSION=$(CARDANO_VERSION) -t $(ARCH_TAG) -f Dockerfile.cache .
local-push:
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
docker push $(ARCH_TAG)
local-manifest: local-push
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
docker pull --platform linux/$(ARCH) $(ARCH_TAG)
docker manifest create $(ARCH_TAG) --amend $(ARCH_TAG)
docker manifest annotate --arch $(ARCH) $(ARCH_TAG) $(ARCH_TAG)
docker manifest push $(ARCH_TAG)
local-publish: local-cache local-manifest
################
#Multiarch stuff
################
pilepine: build publish
qemu:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
#Phase 1 pipeline build
build: $(addprefix build-, $(ARCHS))
build-%64: qemu
$(eval ARCH := $(subst build-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
buildah bud $(BUILDAH_CACHE) --format docker --layers --platform linux/$(ARCH) --build-arg JOBS=$(JOBS) --build-arg UBUNTU=$(UBUNTU) --build-arg TARGETARCH=$(ARCH) --build-arg CARDANO_VERSION=$(CARDANO_VERSION) -t $(ARCH_TAG) -f Dockerfile .
cache: $(addprefix cache-, $(ARCHS))
cache-%64:
$(eval ARCH := $(subst cache-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
docker image rm $(UBUNTU)-$(ARCH) || true
docker pull --platform linux/$(ARCH) $(UBUNTU)
docker image tag $(UBUNTU) $(UBUNTU)-$(ARCH)
@echo "Build cache $(ARCH_TAG)"
docker build --platform linux/$(ARCH) --build-arg JOBS=$(JOBS) --build-arg UBUNTU=$(UBUNTU)-$(ARCH) --build-arg TARGETARCH=$(ARCH) --build-arg CARDANO_VERSION=$(CARDANO_VERSION) -t $(ARCH_TAG) -f Dockerfile.cache .
#Phase 2 pipeline
publish: $(addprefix cache-, $(ARCHS)) manifest
push-%64:
$(eval ARCH := $(subst push-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
@echo "Push $(ARCH_TAG)"
docker push $(ARCH_TAG)
push: $(addprefix push-, $(ARCHS))
$(eval ARCH := $(subst pull-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
# @echo "Push $(ARCH_TAG)"
# docker push $(DOCKER_TAG):latest
pull-%64:
$(eval ARCH := $(subst pull-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
@echo "Pull $(ARCH_TAG)"
docker pull --platform linux/$(ARCH) $(ARCH_TAG)
pull: $(addprefix pull-, $(ARCHS))
manifest-%64:
$(eval ARCH := $(subst manifest-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
@echo "Publish $(ARCH_TAG)"
docker pull --platform linux/$(ARCH) $(ARCH_TAG)
# docker rm $(ARCH_TAG)
docker manifest create $(ARCH_TAG) --amend $(ARCH_TAG)
docker manifest annotate --arch $(ARCH) $(RELEASE_TAG) $(ARCH_TAG)
docker manifest annotate --arch $(ARCH) $(ARCH_TAG) $(ARCH_TAG)
docker manifest push $(ARCH_TAG)
amend-%64:
$(eval ARCH := $(subst amend-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
$(eval AMEND := $(AMEND) --amend $(ARCH_TAG))
@echo "Amend $(ARCH_TAG)"
manifest-clean-%64:
$(eval ARCH := $(subst manifest-clean-,,$@))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION)-$(ARCH)$(DOCKER_SUBTAG))
@echo "Clear manifest $(ARCH_TAG)"
docker manifest rm $(ARCH_TAG) || return 0 >/dev/null
manifest-clean: $(addprefix manifest-clean-,$(ARCHS))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION))
@echo "Clear manifest $(DOCKER_TAG):latest"
docker manifest rm $(DOCKER_TAG):latest || return 0 >/dev/null
manifest-base: $(addprefix amend-,$(ARCHS))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION))
@echo "Publish base release $(RELEASE_TAG)"
docker manifest create $(LATEST_TAG) $(AMEND)
docker manifest push $(LATEST_TAG)
docker manifest create $(RELEASE_TAG) $(AMEND)
docker manifest push $(RELEASE_TAG)
manifest: push manifest-base $(addprefix manifest-,$(ARCHS))
$(eval ARCH_TAG := $(DOCKER_TAG):$(CARDANO_VERSION))
@echo "Publish update $(DOCKER_TAG)"
docker manifest push $(LATEST_TAG)
docker manifest push $(RELEASE_TAG)