Merge pull request #784 from nhooyr/docker-qemu-fix-ad12

docker: Run image build on amd64 instance to avoid QEMU errors on arm64
This commit is contained in:
Anmol Sethi 2023-02-09 18:22:50 -08:00 committed by GitHub
commit 0e7b05650a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 78 additions and 9 deletions

View file

@ -58,6 +58,9 @@ Flags:
images into the daemon for push later. It's not slow though to use --push-docker after
building the image as nearly all artifacts are cached.
Automatically set if called from release.sh
--latest-docker
Mark the built image with the latest tag. Automatically set if called from release.sh
EOF
}
@ -113,6 +116,10 @@ main() {
flag_noarg && shift "$FLAGSHIFT"
PUSH_DOCKER=1
;;
latest-docker)
flag_noarg && shift "$FLAGSHIFT"
LATEST_DOCKER=1
;;
*)
flag_errusage "unrecognized flag $FLAGRAW"
;;
@ -149,7 +156,7 @@ main() {
runjob windows/arm64 'OS=windows ARCH=arm64 build' &
waitjobs
runjob linux/dockerimage 'OS=linux build_docker_image' &
runjob linux/docker build_docker &
runjob windows/amd64/msi 'OS=windows ARCH=amd64 build_windows_msi' &
waitjobs
}
@ -247,14 +254,19 @@ ARCHIVE=$ARCHIVE \
sh_c rsync --archive --human-readable "$REMOTE_HOST:src/d2/$ARCHIVE" "$ARCHIVE"
)}
build_docker_image() {
D2_DOCKER_IMAGE=${D2_DOCKER_IMAGE:-terrastruct/d2}
flags='--load'
if [ -n "${PUSH_DOCKER-}" -o -n "${RELEASE-}" ]; then
flags='--push --platform linux/amd64,linux/arm64'
build_docker() {
if [ -n "${LOCAL-}" ]; then
sh_c ./ci/release/docker/build.sh \
${PUSH_DOCKER:+--push} \
${LATEST_DOCKER:+--latest}
return 0
fi
sh_c rsync --archive --human-readable ./ci/release/Dockerfile_entrypoint.sh "./ci/release/build/$VERSION"
sh_c docker buildx build $flags -t "$D2_DOCKER_IMAGE:$VERSION" -t "$D2_DOCKER_IMAGE:latest" --build-arg "VERSION=$VERSION" -f ./ci/release/Dockerfile "./ci/release/build/$VERSION"
sh_c lockfile_ssh "$CI_D2_LINUX_AMD64" .d2-build-lock
sh_c gitsync "$CI_D2_LINUX_AMD64" src/d2
sh_c ssh "$CI_D2_LINUX_AMD64" ./src/d2/ci/release/docker/build.sh \
${PUSH_DOCKER:+--push} \
${LATEST_DOCKER:+--latest}
}
build_windows_msi() {

View file

@ -21,7 +21,7 @@ RUN curl -fsSL "https://github.com/boxboat/fixuid/releases/download/v0.5/fixuid-
&& printf "user: debian\ngroup: debian\npaths: [/home/debian]\n" > /etc/fixuid/config.yml
COPY ./d2-*-linux-$TARGETARCH.tar.gz /tmp
ADD ./Dockerfile_entrypoint.sh /usr/local/bin/entrypoint.sh
ADD ./entrypoint.sh /usr/local/bin/entrypoint.sh
RUN mkdir -p /usr/local/lib/d2 \
&& tar -C /usr/local/lib/d2 -xzf /tmp/d2-*-linux-"$TARGETARCH".tar.gz \
&& /usr/local/lib/d2/d2-*/scripts/install.sh \

57
ci/release/docker/build.sh Executable file
View file

@ -0,0 +1,57 @@
#!/bin/sh
set -eu
. "$(dirname "$0")/../../../ci/sub/lib.sh"
cd -- "$(dirname "$0")/../../.."
help() {
cat <<EOF
usage: $0 [-p|--push] [--latest] [
EOF
}
main() {
while flag_parse "$@"; do
case "$FLAG" in
h|help)
help
return 0
;;
p|push)
flag_noarg && shift "$FLAGSHIFT"
PUSH=1
;;
latest)
flag_noarg && shift "$FLAGSHIFT"
LATEST=1
;;
*)
flag_errusage "unrecognized flag $FLAGRAW"
;;
esac
done
shift "$FLAGSHIFT"
if [ -z "${VERSION-}" ]; then
VERSION=$(readlink ./ci/release/build/latest)
fi
D2_DOCKER_IMAGE=${D2_DOCKER_IMAGE:-terrastruct/d2}
sh_c mkdir -p "./ci/release/build/$VERSION/docker"
sh_c cp "./ci/release/build/$VERSION/d2-$VERSION"-linux-*.tar.gz "./ci/release/build/$VERSION/docker/"
sh_c cp ./ci/release/docker/entrypoint.sh "./ci/release/build/$VERSION/docker/entrypoint.sh"
flags='--load'
if [ -n "${PUSH-}" -o -n "${RELEASE-}" ]; then
flags='--push --platform linux/amd64,linux/arm64'
fi
if [ -n "${LATEST-}" -o -n "${RELEASE-}" ]; then
flags="$flags -t $D2_DOCKER_IMAGE:latest"
fi
sh_c docker buildx build $flags \
-t "$D2_DOCKER_IMAGE:$VERSION" \
--build-arg "VERSION=$VERSION" \
-f ./ci/release/docker/Dockerfile "./ci/release/build/$VERSION/docker"
}
main "$@"