| 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}:android-deps-" | \ |
| 27 | awk '{print $2}' | \ |
| 28 | xargs -r docker rmi |
| 29 | docker pull "$CW_DOCKER_REGISTRY:android-deps-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}" |
| 30 | set -e |
| 31 | fi |
| 32 | if image_exists "$CW_DOCKER_REGISTRY:android-deps-${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:android-deps-${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:android-deps-${name}-$(tinysha "$SCRIPT_DIR/Dockerfile.${name}")-${version}" |
| 46 | fi |
| 47 | } |
| 48 | |
| 49 | img() { |
| 50 | echo "$CW_DOCKER_REGISTRY:android-deps-${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/android/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/android/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/android/build_zcash.sh) |
| 60 | decred_ver=$(tinysha $SCRIPT_DIR/Dockerfile.torch $SCRIPT_DIR/Dockerfile.decred $REPO_ROOT/scripts/android/build_decred.sh $REPO_ROOT/cw_decred/pubspec.yaml) |
| 61 | echo $base_ver $torch_ver $reown_ver $bitbox_ver $monero_ver $mwebd_ver $zcash_ver $decred_ver > /tmp/docker_build_versions |
| 62 | final_ver=$(tinysha /tmp/docker_build_versions) |
| 63 | |
| 64 | docker create --name temp_extract $(img final $final_ver) \ |
| 65 | && cd $REPO_ROOT \ |
| 66 | && docker cp temp_extract:/w.top w.top \ |
| 67 | && rsync -av w.top/ . \ |
| 68 | && rm -rf w.top \ |
| 69 | && docker rm temp_extract \ |
| 70 | && echo "cache ok" \ |
| 71 | && exit 0 \ |
| 72 | || echo "cache miss oh" |
| 73 | |
| 74 | docker rm temp_extract || true |
| 75 | |
| 76 | build base "$base_ver" |
| 77 | |
| 78 | build bitbox "$bitbox_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")" |
| 79 | |
| 80 | build mwebd "$mwebd_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")" |
| 81 | |
| 82 | build reown "$reown_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")" |
| 83 | |
| 84 | build monero "$monero_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")" |
| 85 | |
| 86 | build zcash "$zcash_ver" --build-arg BASE_IMAGE="$(img base "$base_ver")" |
| 87 | |
| 88 | build torch "$torch_ver" \ |
| 89 | --build-arg BASE_IMAGE="$(img base "$base_ver")" |
| 90 | |
| 91 | build decred "$decred_ver" \ |
| 92 | --build-arg BASE_IMAGE="$(img base "$base_ver")" \ |
| 93 | --build-arg TORCH_IMAGE="$(img torch "$torch_ver")" |
| 94 | |
| 95 | build final $final_ver \ |
| 96 | --build-arg BASE_IMAGE="$(img base $base_ver)" \ |
| 97 | --build-arg TORCH_IMAGE="$(img torch $torch_ver)" \ |
| 98 | --build-arg REOWN_IMAGE="$(img reown $reown_ver)" \ |
| 99 | --build-arg BITBOX_IMAGE="$(img bitbox $bitbox_ver)" \ |
| 100 | --build-arg MONERO_IMAGE="$(img monero $monero_ver)" \ |
| 101 | --build-arg DECRED_IMAGE="$(img decred $decred_ver)" \ |
| 102 | --build-arg MWEBD_IMAGE="$(img mwebd $mwebd_ver)" \ |
| 103 | --build-arg ZCASH_IMAGE="$(img zcash $zcash_ver)" |
| 104 | |
| 105 | echo "done: $(img final $final_ver)" |
| 106 | echo $(img final $final_ver) > /tmp/cakewallet_docker |
| 107 | |
| 108 | |
| 109 | docker create --name temp_extract $(img final $final_ver) \ |
| 110 | && cd $REPO_ROOT \ |
| 111 | && docker cp temp_extract:/w.top w.top \ |
| 112 | && rsync -av w.top/ . \ |
| 113 | && rm -rf w.top \ |
| 114 | && docker rm temp_extract \ |
| 115 | && echo "cache ok" \ |
| 116 | && exit 0 |
| 117 | |
| 118 | echo idk. |
| 119 | exit 1 |