diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index bc57238cfe..2f547701af 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -31,15 +31,10 @@ jobs: - name: Dockerhub login run: | echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - name: Cross build lighthouse binary - uses: actions-rs/cargo@v1 - with: - use-cross: true - command: build - args: --release --manifest-path lighthouse/Cargo.toml --target aarch64-unknown-linux-gnu --features portable + run: | + cargo install cross + make build-aarch64-portable - name: Move cross-built ARM binary into Docker scope run: | mkdir ./bin; diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 99c93be346..e2d366d904 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,7 +6,10 @@ on: - v* env: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} REPO_NAME: sigp/lighthouse + IMAGE_NAME: sigp/lighthouse jobs: extract-version: @@ -18,6 +21,71 @@ jobs: outputs: VERSION: ${{ steps.extract_version.outputs.VERSION }} + build-docker-arm64: + runs-on: ubuntu-18.04 + needs: [extract-version] + # We need to enable experimental docker features in order to use `docker buildx` + env: + DOCKER_CLI_EXPERIMENTAL: enabled + VERSION: ${{ needs.extract-version.outputs.VERSION }} + steps: + - uses: actions/checkout@v2 + - name: Dockerhub login + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + - name: Cross build lighthouse binary + run: | + cargo install cross + make build-aarch64-portable + - name: Move cross-built ARM binary into Docker scope + run: | + mkdir ./bin; + mv ./target/aarch64-unknown-linux-gnu/release/lighthouse ./bin; + # Install dependencies for emulation. Have to create a new builder to pick up emulation support. + - name: Build ARM64 dockerfile (with push) + run: | + docker run --privileged --rm tonistiigi/binfmt --install arm64 + docker buildx create --use --name cross-builder + docker buildx build \ + --platform=linux/arm64 \ + --file ./Dockerfile.cross . \ + --tag ${IMAGE_NAME}:${{ env.VERSION }}-arm64 \ + --push + build-docker-amd64: + runs-on: ubuntu-18.04 + needs: [extract-version] + env: + DOCKER_CLI_EXPERIMENTAL: enabled + VERSION: ${{ needs.extract-version.outputs.VERSION }} + steps: + - uses: actions/checkout@v2 + - name: Dockerhub login + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + - name: Build AMD64 dockerfile (with push) + run: | + docker build \ + --build-arg PORTABLE=true \ + --tag ${IMAGE_NAME}:${{ env.VERSION }}-amd64 \ + --file ./Dockerfile . + docker push ${IMAGE_NAME}:${{ env.VERSION }}-amd64 + build-docker-multiarch: + runs-on: ubuntu-18.04 + needs: [build-docker-arm64, build-docker-amd64, extract-version] + # We need to enable experimental docker features in order to use `docker manifest` + env: + DOCKER_CLI_EXPERIMENTAL: enabled + VERSION: ${{ needs.extract-version.outputs.VERSION }} + steps: + - name: Dockerhub login + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + - name: Create and push multiarch manifest + run: | + docker manifest create ${IMAGE_NAME}:${{ env.VERSION }} \ + --amend ${IMAGE_NAME}:${{ env.VERSION }}-arm64 \ + --amend ${IMAGE_NAME}:${{ env.VERSION }}-amd64; + docker manifest push ${IMAGE_NAME}:${{ env.VERSION }} build: name: Build Release strategy: @@ -190,7 +258,7 @@ jobs: | | aarch64 | [lighthouse-${{ env.VERSION }}-aarch64-unknown-linux-gnu-portable.tar.gz](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-aarch64-unknown-linux-gnu-portable.tar.gz) | [PGP Signature](https://github.com/${{ env.REPO_NAME }}/releases/download/${{ env.VERSION }}/lighthouse-${{ env.VERSION }}-aarch64-unknown-linux-gnu-portable.tar.gz.asc) | | | | | | | **System** | **Option** | - | **Resource** | - | | Docker | - | [sigp/lighthouse](https://hub.docker.com/r/sigp/lighthouse) | + | | Docker | [${{ env.VERSION }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}/tags?page=1&ordering=last_updated&name=${{ env.VERSION }}) | [${{ env.IMAGE_NAME }}](https://hub.docker.com/r/${{ env.IMAGE_NAME }}) | ENDBODY ) assets=()