From 6b7a9a8fefe12a6b06e8e0029e7f9f0b9faf5bed Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Wed, 29 Dec 2021 15:06:57 +0100 Subject: [PATCH] build: add scripts/buildx --- .github/workflows/build_packages.yaml | 23 +++----- scripts/buildx.sh | 79 +++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 16 deletions(-) create mode 100755 scripts/buildx.sh diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index aa93c8ba5..752abf4d0 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -248,15 +248,6 @@ jobs: shell: bash steps: - - name: prepare docker - run: | - mkdir -p $HOME/.docker - echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json - echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50}' | sudo tee /etc/docker/daemon.json - sudo systemctl restart docker - docker info - docker buildx create --use --name mybuild - docker run --rm --privileged tonistiigi/binfmt --install all - uses: actions/download-artifact@v2 with: name: source @@ -298,13 +289,13 @@ jobs: run: | set -e -u cd source - docker buildx build --no-cache \ - --platform=linux/$ARCH \ - -t cross_build_emqx_for_$SYSTEM \ - -f .ci/build_packages/Dockerfile \ - --build-arg BUILD_FROM=emqx/build-env:$ERL_OTP-$SYSTEM \ - --build-arg EMQX_NAME=$PROFILE \ - --output type=tar,dest=/tmp/cross-build-$PROFILE-for-$SYSTEM.tar . + ./scripts/buildx.sh \ + --prepare \ + --profile "$PROFILE" \ + --system "$SYSTEM" \ + --builder "emqx/build-env:$ERL_OTP-$SYSTEM" \ + --arch "$ARCH" \ + --build_dest "/tmp/cross-build-$PROFILE-for-$SYSTEM.tar" . mkdir -p /tmp/packages/$PROFILE tar -xvf /tmp/cross-build-$PROFILE-for-$SYSTEM.tar --wildcards emqx/_packages/$PROFILE/* diff --git a/scripts/buildx.sh b/scripts/buildx.sh new file mode 100755 index 000000000..fffdc37a8 --- /dev/null +++ b/scripts/buildx.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +## This script helps to setup a buildx environment for CI + +set -euo pipefail + +function help { + echo + echo "-h|--help: To display this usage information" + echo "--prepare: Prepare docker buildx environment (only once for each setup)" + echo "--src_dir : EMQ X source ode in this dir, default to PWD" + echo "--profile : EMQ X profile to build, e.g. emqx, emqx-edge" + echo "--system : Target system e.g. debian10, centos7 etc." + echo "--builder : Builder image to pull." + echo "--arch : Target arch to build the EMQ X package for" + echo "--build_dest : Destination file output tar file" +} + +while [ "$#" -gt 0 ]; do + case $1 in + -h|--help) + help + exit 0 + ;; + --prepare) + PREPARE='yes' + shift + ;; + --src_dir) + SRC_DIR="$2" + shift 2 + ;; + --profile) + PROFILE="$2" + shift 2 + ;; + --system) + SYSTEM="$2" + shift 2 + ;; + --builder) + BUILDER="$2" + shift 2 + ;; + --arch) + ARCH="$2" + shift 2 + ;; + --build_dest) + BUILD_DEST="$2" + shift 2 + ;; + *) + echo "WARN: Unknown arg (ignored): $1" + shift + continue + ;; + esac +done + +if [ "${PREPARE:-}" = 'yes' ]; then + mkdir -p $HOME/.docker + echo '{ "experimental": "enabled" }' | tee $HOME/.docker/config.json + echo '{ "experimental": true, "storage-driver": "overlay2", "max-concurrent-downloads": 50, "max-concurrent-uploads": 50}' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + docker info + docker buildx create --use --name mybuild + docker run --rm --privileged tonistiigi/binfmt --install all +fi + +cd "${SRC_DIR:-.}" + +docker buildx build --no-cache \ + --platform=linux/$ARCH \ + -t "cross_build_emqx_for_${SYSTEM}" \ + -f .ci/build_packages/Dockerfile \ + --build-arg BUILD_FROM="$BUILDER" \ + --build-arg EMQX_NAME="$PROFILE" \ + --output type=tar,dest="$BUILD_DEST" .