From dacc586dca080878c1eaa8159ff4b2936648bdcb Mon Sep 17 00:00:00 2001 From: Bockiii Date: Sun, 3 Oct 2021 16:06:30 +0200 Subject: [PATCH] New docker build mechanism (#2268) * New docker build mechanism --- .github/workflows/dockerbuild.yml | 60 +++++++++++++++++++++++++++++++ Dockerfile | 17 +-------- docker-bake.hcl | 23 ++++++++++++ hooks/build | 10 ------ hooks/post_push | 34 ------------------ hooks/pre_build | 5 --- hooks/push | 9 ----- 7 files changed, 84 insertions(+), 74 deletions(-) create mode 100644 .github/workflows/dockerbuild.yml create mode 100644 docker-bake.hcl delete mode 100644 hooks/build delete mode 100644 hooks/post_push delete mode 100644 hooks/pre_build delete mode 100644 hooks/push diff --git a/.github/workflows/dockerbuild.yml b/.github/workflows/dockerbuild.yml new file mode 100644 index 00000000..75396190 --- /dev/null +++ b/.github/workflows/dockerbuild.yml @@ -0,0 +1,60 @@ +name: Build Image on Commit and Release + +on: + push: + branches: + - 'master' + tags: + - '20*' + +env: + DOCKERHUB_SLUG: rssbridge/rss-bridge + GHCR_SLUG: ghcr.io/rss-bridge/rss-bridge + +jobs: + bake: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2.3.4 + - + name: Docker meta + id: docker_meta + uses: docker/metadata-action@v3.5.0 + with: + images: | + ${{ env.DOCKERHUB_SLUG }} + ${{ env.GHCR_SLUG }} + tags: | + type=raw,value=latest + type=ref,event=tag,enable=${{ startsWith(github.ref, 'refs/tags/20') }} + type=raw,value=stable,enable=${{ startsWith(github.ref, 'refs/tags/20') }} + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1.6.0 + - + name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - + name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - + name: Build and push + uses: docker/bake-action@v1.6.0 + with: + files: | + ./docker-bake.hcl + ${{ steps.docker_meta.outputs.bake-file }} + targets: image-all + push: true diff --git a/Dockerfile b/Dockerfile index 7e87b04d..88be787e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,9 @@ -ARG FROM_ARCH=amd64 - -# Multi-stage build, see https://docs.docker.com/develop/develop-images/multistage-build/ -FROM alpine AS builder - -# Download QEMU -ADD https://github.com/balena-io/qemu/releases/download/v5.2.0%2Bbalena4/qemu-5.2.0.balena4-arm.tar.gz . -RUN tar zxvf qemu-5.2.0.balena4-arm.tar.gz --strip-components 1 -ADD https://github.com/balena-io/qemu/releases/download/v5.2.0%2Bbalena4/qemu-5.2.0.balena4-aarch64.tar.gz . -RUN tar zxvf qemu-5.2.0.balena4-aarch64.tar.gz --strip-components 1 - -FROM $FROM_ARCH/php:7-apache +FROM php:7-apache LABEL description="RSS-Bridge is a PHP project capable of generating RSS and Atom feeds for websites that don't have one." LABEL repository="https://github.com/RSS-Bridge/rss-bridge" LABEL website="https://github.com/RSS-Bridge/rss-bridge" -# Add QEMU -COPY --from=builder qemu-arm-static /usr/bin -COPY --from=builder qemu-aarch64-static /usr/bin - ENV APACHE_DOCUMENT_ROOT=/app RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \ diff --git a/docker-bake.hcl b/docker-bake.hcl new file mode 100644 index 00000000..5b9e8113 --- /dev/null +++ b/docker-bake.hcl @@ -0,0 +1,23 @@ +target "docker-metadata-action" {} + +group "default" { + targets = ["image-local"] +} + +target "image" { + inherits = ["docker-metadata-action"] +} + +target "image-local" { + inherits = ["image"] + output = ["type=docker"] +} + +target "image-all" { + inherits = ["image"] + platforms = [ + "linux/amd64", + "linux/arm64", + "linux/arm/v7" + ] +} diff --git a/hooks/build b/hooks/build deleted file mode 100644 index 4d9e99ab..00000000 --- a/hooks/build +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# Custom build script to build images for all supported architectures. -# Example for IMAGE_NAME: rss-builder/rss-builder:stable - -for arch in amd64 arm32v7 arm64v8 -do - echo "Building $IMAGE_NAME-$arch" - docker build --build-arg FROM_ARCH=$arch --file $DOCKERFILE_PATH --tag $IMAGE_NAME-$arch . -done diff --git a/hooks/post_push b/hooks/post_push deleted file mode 100644 index 45db96df..00000000 --- a/hooks/post_push +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# Use manifest-tool to create the manifest, given the experimental -# "docker manifest" command isn't available yet on Docker Hub. -MANIFEST_TOOL_VERSION=$(curl -s https://api.github.com/repos/estesp/manifest-tool/releases/latest | grep 'tag_name' | cut -d\" -f4) -curl -Lo manifest-tool https://github.com/estesp/manifest-tool/releases/download/$MANIFEST_TOOL_VERSION/manifest-tool-linux-amd64 -chmod +x manifest-tool - -# Generate the manifest file. -# Parameter 1 is the multi-arch image name, e.g. rss-bridge/rss-bridge:stable -function generate_manifest { - cat > manifest-generated.yaml << EOF -image: $1 -manifests: - - image: $1-amd64 - platform: - architecture: amd64 - os: linux - - image: $1-arm32v7 - platform: - architecture: arm - os: linux - variant: v7 - - image: $1-arm64v8 - platform: - architecture: arm64 - os: linux - variant: v8 -EOF -} - -echo "Pushing multi-arch manifest $IMAGE_NAME" -generate_manifest $IMAGE_NAME -./manifest-tool push from-spec manifest-generated.yaml diff --git a/hooks/pre_build b/hooks/pre_build deleted file mode 100644 index 76a62755..00000000 --- a/hooks/pre_build +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Register qemu-*-static for all supported processors except the -# current one, but also remove all registered binfmt_misc before -docker run --rm --privileged multiarch/qemu-user-static:register --reset \ No newline at end of file diff --git a/hooks/push b/hooks/push deleted file mode 100644 index 297ddd05..00000000 --- a/hooks/push +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -# Custom build script to push images for all supported architectures. - -for arch in amd64 arm32v7 arm64v8 -do - echo "Pushing $IMAGE_NAME-$arch" - docker push $IMAGE_NAME-$arch -done