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 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. building the image as nearly all artifacts are cached.
Automatically set if called from release.sh 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 EOF
} }
@ -113,6 +116,10 @@ main() {
flag_noarg && shift "$FLAGSHIFT" flag_noarg && shift "$FLAGSHIFT"
PUSH_DOCKER=1 PUSH_DOCKER=1
;; ;;
latest-docker)
flag_noarg && shift "$FLAGSHIFT"
LATEST_DOCKER=1
;;
*) *)
flag_errusage "unrecognized flag $FLAGRAW" flag_errusage "unrecognized flag $FLAGRAW"
;; ;;
@ -149,7 +156,7 @@ main() {
runjob windows/arm64 'OS=windows ARCH=arm64 build' & runjob windows/arm64 'OS=windows ARCH=arm64 build' &
waitjobs 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' & runjob windows/amd64/msi 'OS=windows ARCH=amd64 build_windows_msi' &
waitjobs waitjobs
} }
@ -247,14 +254,19 @@ ARCHIVE=$ARCHIVE \
sh_c rsync --archive --human-readable "$REMOTE_HOST:src/d2/$ARCHIVE" "$ARCHIVE" sh_c rsync --archive --human-readable "$REMOTE_HOST:src/d2/$ARCHIVE" "$ARCHIVE"
)} )}
build_docker_image() { build_docker() {
D2_DOCKER_IMAGE=${D2_DOCKER_IMAGE:-terrastruct/d2} if [ -n "${LOCAL-}" ]; then
flags='--load' sh_c ./ci/release/docker/build.sh \
if [ -n "${PUSH_DOCKER-}" -o -n "${RELEASE-}" ]; then ${PUSH_DOCKER:+--push} \
flags='--push --platform linux/amd64,linux/arm64' ${LATEST_DOCKER:+--latest}
return 0
fi 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() { 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 && printf "user: debian\ngroup: debian\npaths: [/home/debian]\n" > /etc/fixuid/config.yml
COPY ./d2-*-linux-$TARGETARCH.tar.gz /tmp 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 \ RUN mkdir -p /usr/local/lib/d2 \
&& tar -C /usr/local/lib/d2 -xzf /tmp/d2-*-linux-"$TARGETARCH".tar.gz \ && tar -C /usr/local/lib/d2 -xzf /tmp/d2-*-linux-"$TARGETARCH".tar.gz \
&& /usr/local/lib/d2/d2-*/scripts/install.sh \ && /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 "$@"