-
Notifications
You must be signed in to change notification settings - Fork 70
/
docker-build.sh
executable file
·118 lines (91 loc) · 4.47 KB
/
docker-build.sh
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
#!/bin/bash
# Must be logged to docker hub:
# docker login -u cyphernode
# Must enable experimental cli features
# "experimental": "enabled" in ~/.docker/config.json
image() {
local image=$1
local dir=$2
local arch=$3
echo "Building and pushing $image from $dir for $arch using $dockerfile tagging as $v1, $v2 and $v3..."
docker build --no-cache -t cyphernode/${image}:${arch}-${v3} -t cyphernode/${image}:${arch}-${v2} -t cyphernode/${image}:${arch}-${v1} ${dir}/. \
&& docker push cyphernode/${image}:${arch}-${v3} \
&& docker push cyphernode/${image}:${arch}-${v2} \
&& docker push cyphernode/${image}:${arch}-${v1}
return $?
}
manifest() {
local image=$1
echo "Creating and pushing manifest for $image for version $v3..."
docker manifest create cyphernode/${image}:${v3} cyphernode/${image}:${arm_docker}-${v3} cyphernode/${image}:${x86_docker}-${v3} cyphernode/${image}:${aarch64_docker}-${v3} \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${arm_docker}-${v3} --os linux --arch ${arm_docker} \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${x86_docker}-${v3} --os linux --arch ${x86_docker} \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${aarch64_docker}-${v3} --os linux --arch ${aarch64_docker} \
&& docker manifest push -p cyphernode/${image}:${v3}
[ $? -ne 0 ] && return 1
echo "Creating and pushing manifest for $image for version $v2..."
docker manifest create cyphernode/${image}:${v2} cyphernode/${image}:${arm_docker}-${v2} cyphernode/${image}:${x86_docker}-${v2} cyphernode/${image}:${aarch64_docker}-${v2} \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${arm_docker}-${v2} --os linux --arch ${arm_docker} \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${x86_docker}-${v2} --os linux --arch ${x86_docker} \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${aarch64_docker}-${v2} --os linux --arch ${aarch64_docker} \
&& docker manifest push -p cyphernode/${image}:${v2}
[ $? -ne 0 ] && return 1
echo "Creating and pushing manifest for $image for version $v1..."
docker manifest create cyphernode/${image}:${v1} cyphernode/${image}:${arm_docker}-${v1} cyphernode/${image}:${x86_docker}-${v1} cyphernode/${image}:${aarch64_docker}-${v1} \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${arm_docker}-${v1} --os linux --arch ${arm_docker} \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${x86_docker}-${v1} --os linux --arch ${x86_docker} \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${aarch64_docker}-${v1} --os linux --arch ${aarch64_docker} \
&& docker manifest push -p cyphernode/${image}:${v1}
return $?
}
x86_docker="amd64"
arm_docker="arm"
aarch64_docker="arm64"
v1="v0"
v2="v0.8"
v3="v0.8.1"
# Build amd64 and arm64 first, building for arm will trigger the manifest creation and push on hub
echo -e "\nBuild ${v3} for:\n"
echo "1) AMD 64 bits (Most PCs)"
echo "2) ARM 64 bits (RPi4, Mac M1)"
echo "3) ARM 32 bits (RPi2-3)"
echo -en "\nYour choice (1, 2, 3): "
read arch_input
case "${arch_input}" in
1)
arch_docker=${x86_docker}
;;
2)
arch_docker=${aarch64_docker}
;;
3)
arch_docker=${arm_docker}
;;
*)
echo "Not a valid choice."
exit 1
;;
esac
echo -e "\nBuilding Cyphernode Core containers\n"
echo -e "arch_docker=$arch_docker\n"
image "gatekeeper" "api_auth_docker/" ${arch_docker} \
&& image "proxycron" "cron_docker/" ${arch_docker} \
&& image "otsclient" "otsclient_docker/" ${arch_docker} \
&& image "tor" "tor_docker/" ${arch_docker} \
&& image "proxy" "proxy_docker/" ${arch_docker} \
&& image "notifier" "notifier_docker/" ${arch_docker} \
&& image "pycoin" "pycoin_docker/" ${arch_docker} \
&& image "cyphernodeconf" "cyphernodeconf_docker/" ${arch_docker}
[ $? -ne 0 ] && echo "Error" && exit 1
[ "${arch_docker}" = "${x86_docker}" ] && echo "Built and pushed ${arch_docker} only" && exit 0
[ "${arch_docker}" = "${aarch64_docker}" ] && echo "Built and pushed ${arch_docker} only" && exit 0
[ "${arch_docker}" = "${arm_docker}" ] && echo "Built and pushed images, now building and pushing manifest for all archs..."
manifest "gatekeeper" \
&& manifest "proxycron" \
&& manifest "otsclient" \
&& manifest "tor" \
&& manifest "proxy" \
&& manifest "notifier" \
&& manifest "pycoin" \
&& manifest "cyphernodeconf"
[ $? -ne 0 ] && echo "Error" && exit 1