|
|
|
#!/bin/bash
|
|
|
|
set -euxo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
source tool/common.sh
|
|
|
|
|
|
|
|
function get_mount_paths_dir() {
|
|
|
|
dir="$1"
|
|
|
|
mapfile -t packages < <(melos list --parsable --relative --dir-exists="$dir")
|
|
|
|
echo "${packages[@]/%//$dir}"
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_mount_paths_file() {
|
|
|
|
file="$1"
|
|
|
|
mapfile -t packages < <(melos list --parsable --relative --file-exists="$file")
|
|
|
|
echo "${packages[@]/%//$file}"
|
|
|
|
}
|
|
|
|
|
|
|
|
targets=("linux/arm64" "linux/amd64")
|
|
|
|
|
|
|
|
target="$1"
|
|
|
|
|
|
|
|
# shellcheck disable=SC2076
|
|
|
|
if ! [[ ${targets[*]} =~ "$target" ]]; then
|
|
|
|
echo "Unknown target $target, must be one of ${targets[*]}"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$target" == "linux/arm64" ]] || [[ "$target" == "linux/amd64" ]]; then
|
|
|
|
os="$(echo "$target" | cut -d "/" -f 1)"
|
|
|
|
arch="$(echo "$target" | cut -d "/" -f 2)"
|
|
|
|
|
|
|
|
tag="$(image_tag "build:$os-$arch")"
|
|
|
|
|
|
|
|
# shellcheck disable=SC2046
|
|
|
|
docker buildx build \
|
|
|
|
--platform "$target" \
|
|
|
|
--progress plain \
|
|
|
|
--tag "$tag" \
|
|
|
|
--build-arg="FLUTTER_VERSION=$(jq ".flutterSdkVersion" -r < .fvm/fvm_config.json | cut -d "@" -f 1)" \
|
|
|
|
$(cache_build_args "$tag") \
|
|
|
|
-f "tool/build/Dockerfile.$os" \
|
|
|
|
./tool/build
|
|
|
|
|
|
|
|
paths=(packages/app/{pubspec.lock,linux,build})
|
|
|
|
mapfile -O "${#paths[@]}" -t paths < <(get_mount_paths_dir "lib")
|
|
|
|
mapfile -O "${#paths[@]}" -t paths < <(get_mount_paths_dir "assets")
|
|
|
|
mapfile -O "${#paths[@]}" -t paths < <(get_mount_paths_file "pubspec.yaml")
|
|
|
|
mapfile -O "${#paths[@]}" -t paths < <(get_mount_paths_file "pubspec_overrides.yaml")
|
|
|
|
|
|
|
|
run_args=()
|
|
|
|
for path in ${paths[*]}; do
|
|
|
|
run_args+=(-v "$(pwd)/$path:/src/$path")
|
|
|
|
done
|
|
|
|
mkdir -p "packages/app/build"
|
|
|
|
|
|
|
|
container_id="$(
|
|
|
|
# shellcheck disable=SC2086
|
|
|
|
docker run \
|
|
|
|
--platform "$target" \
|
|
|
|
--rm -d \
|
|
|
|
-e "ORIGINAL_USER=$(id -u)" \
|
|
|
|
-e "ORIGINAL_GROUP=$(id -g)" \
|
|
|
|
-e "BUILD_ARGS=${*:2}" \
|
|
|
|
${run_args[*]} \
|
|
|
|
"$tag"
|
|
|
|
)"
|
|
|
|
|
|
|
|
function cleanup() {
|
|
|
|
docker kill "$container_id" > /dev/null 2>&1 || true
|
|
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
|
|
|
|
docker logs -f "$container_id"
|
|
|
|
fi
|