dev
sh 113 lines 3.88 KB
Raw
1 #!/usr/bin/env bash
2 set -euo pipefail
3 cd "$(dirname $0)"
4
5 CW_DOCKER_REGISTRY="${CW_DOCKER_REGISTRY:-localhost/cake-tech/cake_wallet}"
6 CW_DOCKER_USE_CLOUD="${CW_DOCKER_USE_CLOUD:-}"
7
8 SCRIPT_DIR="$(pwd)"
9 REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
10
11 image_exists() {
12 docker image inspect "$1" &>/dev/null
13 }
14
15 tinysha() {
16 cat "$@" | sha256sum | cut -c1-6
17 }
18
19 build() {
20 local name="$1"; shift
21 local version=$1; shift
22 if [[ "x$CW_DOCKER_USE_CLOUD" == "xtrue" ]]
23 then
24 set +e
25 docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | \
26 grep "^${CW_DOCKER_REGISTRY}:linux-deps-amd64-" | \
27 awk '{print $2}' | \
28 xargs -r docker rmi
29 docker pull "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}"
30 set -e
31 fi
32 if image_exists "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}"; then
33 echo "==> skipping $name (image already exists)"
34 return 0
35 fi
36 echo "==> building $name"
37 docker build \
38 --platform linux/amd64 \
39 --file "$SCRIPT_DIR/Dockerfile.${name}" \
40 --tag "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}" \
41 "$@" \
42 "$REPO_ROOT"
43 if [[ "x$CW_DOCKER_USE_CLOUD" == "xtrue" ]]
44 then
45 docker push "$CW_DOCKER_REGISTRY:linux-deps-amd64-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}"
46 fi
47 }
48
49 img() {
50 echo "$CW_DOCKER_REGISTRY:linux-deps-amd64-${1}-$(tinysha "$SCRIPT_DIR/Dockerfile.${1}")-${2}"
51 }
52
53 base_ver="latest"
54 torch_ver="$(tinysha $SCRIPT_DIR/Dockerfile.torch $REPO_ROOT/scripts/prepare_torch.sh $REPO_ROOT/scripts/linux/build_torch.sh)"
55 reown_ver=$(tinysha $SCRIPT_DIR/Dockerfile.reown $REPO_ROOT/scripts/prepare_reown.sh $REPO_ROOT/scripts/android/build_reown_deps.sh)
56 bitbox_ver=$(tinysha $SCRIPT_DIR/Dockerfile.bitbox $REPO_ROOT/scripts/build_bitbox_flutter.sh)
57 monero_ver=$(tinysha $SCRIPT_DIR/Dockerfile.monero $REPO_ROOT/scripts/prepare_moneroc.sh $REPO_ROOT/scripts/linux/build_monero_all.sh)
58 mwebd_ver=$(tinysha $SCRIPT_DIR/Dockerfile.mwebd $REPO_ROOT/pubspec_overrides.yaml $(find $REPO_ROOT/cw_mweb/go -type f))
59 zcash_ver=$(tinysha $SCRIPT_DIR/Dockerfile.zcash $REPO_ROOT/scripts/prepare_zcash.sh $REPO_ROOT/scripts/linux/build_zcash.sh)
60 echo $base_ver $torch_ver $reown_ver $bitbox_ver $monero_ver $mwebd_ver $zcash_ver > /tmp/docker_build_versions
61 final_ver=$(tinysha /tmp/docker_build_versions)
62
63 docker create --name temp_extract $(img final $final_ver) \
64 && cd $REPO_ROOT \
65 && docker cp temp_extract:/w.top w.top \
66 && rsync -av w.top/ . \
67 && rm -rf w.top \
68 && docker rm temp_extract \
69 && echo "cache ok" \
70 && exit 0 \
71 || echo "cache miss oh"
72
73 docker rm temp_extract || true
74
75 build base "$base_ver"
76
77 build bitbox "$bitbox_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
78
79 build mwebd "$mwebd_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
80
81 build reown "$reown_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
82
83 build monero "$monero_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
84
85 build zcash "$zcash_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")"
86
87 build torch "$torch_ver" \
88 --build-arg BASE_IMAGE="$(img base "$base_ver")"
89
90 build final $final_ver \
91 --build-arg BASE_IMAGE="$(img base $base_ver)" \
92 --build-arg TORCH_IMAGE="$(img torch $torch_ver)" \
93 --build-arg REOWN_IMAGE="$(img reown $reown_ver)" \
94 --build-arg BITBOX_IMAGE="$(img bitbox $bitbox_ver)" \
95 --build-arg MONERO_IMAGE="$(img monero $monero_ver)" \
96 --build-arg MWEBD_IMAGE="$(img mwebd $mwebd_ver)" \
97 --build-arg ZCASH_IMAGE="$(img zcash $zcash_ver)"
98
99 echo "done: $(img final $final_ver)"
100 echo $(img final $final_ver) > /tmp/cakewallet_docker
101
102
103 docker create --name temp_extract $(img final $final_ver) \
104 && cd $REPO_ROOT \
105 && docker cp temp_extract:/w.top w.top \
106 && rsync -av w.top/ . \
107 && rm -rf w.top \
108 && docker rm temp_extract \
109 && echo "cache ok" \
110 && exit 0
111
112 echo idk.
113 exit 1