diff --git a/.github/workflows/build-commit-docker.yml b/.github/workflows/build-commit-docker.yml new file mode 100644 index 0000000..58d6300 --- /dev/null +++ b/.github/workflows/build-commit-docker.yml @@ -0,0 +1,84 @@ +name: Build Docker images +on: + push: + branches: + - 'sr229/docker-xbuild' + - 'master' + +jobs: + build_arm: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + + - name: Install Docker Edge Build (for Xbuild runs) + run: wget -qO - https://test.docker.com | sh + + - name: Install buildx + run: | + mkdir -p $HOME/.docker/cli-plugins/ + touch $HOME/.docker/cli-plugins/docker-buildx + wget -qO - https://github.com/docker/buildx/releases/download/v0.3.1/buildx-v0.3.1.linux-amd64 > $HOME/.docker/cli-plugins/docker-buildx + chmod a+x $HOME/.docker/cli-plugins/docker-buildx + + - name: Setup Builder instance + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name cdr-build + docker buildx use cdr-build + docker buildx inspect --bootstrap + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + - name: Build Images - ARM64 + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm64 -t codercom/nbin-arm64:latest -f arm.dockerfile . + + - name: Build Images - ARM + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm -t codercom/nbin-arm:latest -f arm.dockerfile . + + - name: Build Images - ARM64 (Alpine) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm64 -t codercom/nbin-alpine-arm64:latest -f alpine.dockerfile . + + - name: Build Images - ARM (Alpine) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm -t codercom/nbin-alpine-arm:latest -f alpine.dockerfile . + + build_amd64: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + + - name: Install Docker Edge Build (for Xbuild runs) + run: wget -qO - https://test.docker.com | sh + + - name: Install buildx + run: | + mkdir -p $HOME/.docker/cli-plugins/ + touch $HOME/.docker/cli-plugins/docker-buildx + wget -qO - https://github.com/docker/buildx/releases/download/v0.3.1/buildx-v0.3.1.linux-amd64 > $HOME/.docker/cli-plugins/docker-buildx + chmod a+x $HOME/.docker/cli-plugins/docker-buildx + + - name: Setup Builder instance + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name cdr-build + docker buildx use cdr-build + docker buildx inspect --bootstrap + + - name: Build Images - AMD64 (CentOS) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/amd64 -t codercom/nbin-centos:latest -f centos.dockerfile . + + - name: Build Images - AMD64 (Alpine) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/amd64 -t codercom/nbin-alpine:latest -f alpine.dockerfile . \ No newline at end of file diff --git a/.github/workflows/build-commit.yml b/.github/workflows/build-commit.yml new file mode 100644 index 0000000..c8f6af5 --- /dev/null +++ b/.github/workflows/build-commit.yml @@ -0,0 +1,35 @@ +name: Build +on: + push: + branches: + - 'sr229/docker-xbuild' + - 'master' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + + - name: Install Docker Edge Build (for Xbuild runs) + run: wget -qO - https://test.docker.com | sh + + + - name: Install buildx + run: | + mkdir -p $HOME/.docker/cli-plugins/ + touch $HOME/.docker/cli-plugins/docker-buildx + wget -qO - https://github.com/docker/buildx/releases/download/v0.3.1/buildx-v0.3.1.linux-amd64 > $HOME/.docker/cli-plugins/docker-buildx + chmod a+x $HOME/.docker/cli-plugins/docker-buildx + + - name: Setup Builder instance + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name cdr-build + docker buildx use cdr-build + docker buildx inspect --bootstrap + + - name: Build for ARM + run: scripts/ci.bash + \ No newline at end of file diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml new file mode 100644 index 0000000..babc67c --- /dev/null +++ b/.github/workflows/release-docker.yml @@ -0,0 +1,103 @@ +name: Build Docker images +on: + - release + +jobs: + build_arm: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + + - name: Install Docker Edge Build (for Xbuild runs) + run: wget -qO - https://test.docker.com | sh + + - name: Install buildx + run: | + mkdir -p $HOME/.docker/cli-plugins/ + touch $HOME/.docker/cli-plugins/docker-buildx + wget -qO - https://github.com/docker/buildx/releases/download/v0.3.1/buildx-v0.3.1.linux-amd64 > $HOME/.docker/cli-plugins/docker-buildx + chmod a+x $HOME/.docker/cli-plugins/docker-buildx + + - name: Setup Builder instance + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name cdr-build + docker buildx use cdr-build + docker buildx inspect --bootstrap + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + - name: Build Images - ARM64 + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm64 -t codercom/nbin-arm:arm64 -f arm.dockerfile . + + - name: Build Images - ARM + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm -t codercom/nbin-arm:arm -f arm.dockerfile . + + - name: Build Images - ARM64 (Alpine) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm64 -t codercom/nbin-alpine:arm64 -f alpine.dockerfile . + + - name: Build Images - ARM (Alpine) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/arm -t codercom/nbin-alpine:arm -f alpine.dockerfile . + + - uses: azure/docker-login@master + with: + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + + - name: "Push to Registry" + run: | + docker push codercom/nbin-arm:latest + docker push codercom/nbin-alpine-arm:latest + docker push codercom/nbin-arm64:latest + docker push codercom/nbin-alpine-arm64:latest + + build_amd64: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + + - name: Install Docker Edge Build (for Xbuild runs) + run: wget -qO - https://test.docker.com | sh + + - name: Install buildx + run: | + mkdir -p $HOME/.docker/cli-plugins/ + touch $HOME/.docker/cli-plugins/docker-buildx + wget -qO - https://github.com/docker/buildx/releases/download/v0.3.1/buildx-v0.3.1.linux-amd64 > $HOME/.docker/cli-plugins/docker-buildx + chmod a+x $HOME/.docker/cli-plugins/docker-buildx + + - name: Setup Builder instance + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx create --name cdr-build + docker buildx use cdr-build + docker buildx inspect --bootstrap + + - name: Build Images - AMD64 (CentOS) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/amd64 -t codercom/nbin-centos:amd64 -f centos.dockerfile . + + - name: Build Images - AMD64 (Alpine) + run: | + export DOCKER_CLI_EXPERMIENTAL=enabled + docker buildx build --platform linux/amd64 -t codercom/nbin-alpine:amd64 -f alpine.dockerfile . + + - uses: azure/docker-login@master + with: + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + + - name: "Push to Registry" + run: | + docker push codercom/nbin-centos:amd64 + docker push codercom/nbin-alpine:amd64 \ No newline at end of file diff --git a/aarch64-alpine.dockerfile b/aarch64-alpine.dockerfile deleted file mode 100644 index 8e76637..0000000 --- a/aarch64-alpine.dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM balenalib/aarch64-alpine-node:10.15-edge-build - -RUN ["cross-build-start"] - -RUN apk add --no-cache --no-progress bash gcc g++ ccache git make python linux-headers - -RUN ["cross-build-end"] diff --git a/aarch64.dockerfile b/aarch64.dockerfile deleted file mode 100644 index 6f53ee0..0000000 --- a/aarch64.dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM balenalib/aarch64-debian-node:10.15-jessie-build - -RUN ["cross-build-start"] - -RUN apt-get update && apt-get -y install build-essential linux-headers-generic gcc g++ ccache git make - -RUN ["cross-build-end"] diff --git a/arm.dockerfile b/arm.dockerfile new file mode 100644 index 0000000..9f3a1d0 --- /dev/null +++ b/arm.dockerfile @@ -0,0 +1,6 @@ +# Debian Target - only for ARM builds. +# DO NOT USE THIS AS A TARGET FOR x86! +FROM ubuntu:18.04 + +RUN apt update && \ + apt install -y build-essential g++ gcc linux-headers-generic diff --git a/armhf-alpine.dockerfile b/armhf-alpine.dockerfile deleted file mode 100644 index 25bb72f..0000000 --- a/armhf-alpine.dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM balenalib/armv7hf-alpine-node:10.15-edge-build - -RUN ["cross-build-start"] - -RUN apk add --no-cache --no-progress bash gcc g++ ccache git make python linux-headers - -RUN ["cross-build-end"] diff --git a/armhf.dockerfile b/armhf.dockerfile deleted file mode 100644 index d2f51ec..0000000 --- a/armhf.dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM balenalib/armv7hf-debian-node:10.15-jessie-build - -RUN ["cross-build-start"] - -RUN apt-get update && apt-get -y install build-essential linux-headers-generic gcc g++ ccache git make - -RUN ["cross-build-end"] diff --git a/centos.dockerfile b/centos.dockerfile index 27698a5..b63c4b0 100644 --- a/centos.dockerfile +++ b/centos.dockerfile @@ -2,7 +2,7 @@ FROM centos:7 RUN yum install -y centos-release-scl RUN yum-config-manager --enable rhel-server-rhscl-7-rpms -RUN yum install -y devtoolset-6 +RUN yum install -y devtoolset-7 RUN yum install -y gcc-c++ RUN rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/c/ccache-3.3.4-1.el7.x86_64.rpm diff --git a/scripts/docker_build.sh b/scripts/docker_build.sh index 6227c55..f143372 100755 --- a/scripts/docker_build.sh +++ b/scripts/docker_build.sh @@ -12,39 +12,39 @@ source ./vars.sh # $BINARY_NAME function docker_build() { case "$IMAGE" in - *armv7hf* | armv7hf | aarch64 | *aarch64*) - containerID=$(docker create -it -v $HOME/$CACHE_DIR:/ccache $IMAGE) - docker start $containerID - docker exec $containerID mkdir /src + *arm | *arm64) + containerID=$(docker buildx create -it -v $HOME/$CACHE_DIR:/ccache $IMAGE) + # HACK: We can leverage the same VMs we use to make x86 builds but in expense of using QEMU + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker start $containerID + docker exec $containerID mkdir /src - function exec() { - docker exec $containerID bash -c "$@" - } + function exec() { + docker exec $containerID bash -c "$@" + } - docker cp ../. $containerID:/src - exec "cross-build-start" - exec "$PREBUILD_COMMAND/src/lib/node/build.sh" - exec "cd /src && npm rebuild" - exec "cd /src && npm test" - exec "cross-build-end" - docker cp $containerID:/src/lib/node/out/Release/node ../build/$PACKAGE_VERSION/$BINARY_NAME - ;; + docker cp ../. $containerID:/src + exec "$PREBUILD_COMMAND/src/lib/node/build.sh" + exec "cd /src && npm rebuild" + exec "cd /src && npm test" + docker cp $containerID:/src/lib/node/out/Release/node ../build/$PACKAGE_VERSION/$BINARY_NAME + ;; *) - containerID=$(docker create -it -v $HOME/$CACHE_DIR:/ccache $IMAGE) - docker start $containerID - docker exec $containerID mkdir /src + containerID=$(docker create -it -v $HOME/$CACHE_DIR:/ccache $IMAGE) + docker start $containerID + docker exec $containerID mkdir /src - function exec() { - docker exec $containerID bash -c "$@" - } + function exec() { + docker exec $containerID bash -c "$@" + } - docker cp ../. $containerID:/src - exec "$PREBUILD_COMMAND/src/lib/node/build.sh" - exec "cd /src && npm rebuild" - exec "cd /src && npm test" - docker cp $containerID:/src/lib/node/out/Release/node ../build/$PACKAGE_VERSION/$BINARY_NAME - ;; - esac + docker cp ../. $containerID:/src + exec "$PREBUILD_COMMAND/src/lib/node/build.sh" + exec "cd /src && npm rebuild" + exec "cd /src && npm test" + docker cp $containerID:/src/lib/node/out/Release/node ../build/$PACKAGE_VERSION/$BINARY_NAME + ;; + esac } if [[ "$TARGET" == "alpine" ]]; then