Docker build CI triggered from @sveitser of ma/nitro-docker #24
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Build the nitro-node and nitro-node-dev images on ARM64 and AMD64 hosts. | |
# | |
# The reason for building the ARM image natively instead of with QEMU is that | |
# the QEMU build always failed after around 40 minutes. I'm currently not sure | |
# why it failed. I did also run into insufficient space issuse on public runners | |
# so it's possible this was always the culprit. | |
# | |
# After building, the images are merged together to make a multiplatform image. | |
# | |
# The latest wavm machine is also copied and exported as an artifact. In nitro | |
# this seems to be later used as machine for the non-dev nitro-node build. | |
# For more details on that see the Dockerfile and ./scripts/download.sh | |
name: Espresso Docker build CI | |
run-name: Docker build CI triggered from @${{ github.actor }} of ${{ github.head_ref }} | |
on: | |
workflow_dispatch: | |
merge_group: | |
pull_request: | |
push: | |
branches: | |
- master | |
- develop | |
- integration | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
docker_build: | |
strategy: | |
matrix: | |
platform: [ linux/amd64, linux/arm64 ] | |
include: | |
- platform: linux/amd64 | |
runs-on: X64 | |
- platform: linux/arm64 | |
runs-on: ARM64 | |
runs-on: [ self-hosted, "${{ matrix.runs-on }}" ] | |
steps: | |
- name: Fix submodule permissions check | |
run: | | |
git config --global --add safe.directory '*' | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to Github Container Repo | |
uses: docker/login-action@v3 | |
# if: github.event_name != 'pull_request' | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build nitro-node image | |
uses: ./.github/actions/docker-image | |
with: | |
images: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node | |
target: nitro-node | |
platforms: ${{ matrix.platform }} | |
- name: Build nitro-node-dev image | |
uses: ./.github/actions/docker-image | |
with: | |
images: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node-dev | |
target: nitro-node-dev | |
platforms: ${{ matrix.platform }} | |
- name: Extract WAVM machine from container and print its root | |
id: module-root | |
run: | | |
container=$(docker create --rm ghcr.io/espressosystems/nitro-espresso-integration/nitro-node-dev:pr-19) | |
mkdir -p target/machines/latest | |
docker cp $container:/home/user/target/machines/latest target/machines/latest | |
module_root="$(cat "target/machines/latest/module-root.txt")" | |
echo "name=module-root=$module_root" >> $GITHUB_STATE | |
echo -e "\x1b[1;34mWAVM module root:\x1b[0m $module_root" | |
- name: Upload WAVM machine as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wavm-machine-${{ steps.module-root.outputs.module-root }} | |
path: target/machines/latest/* | |
if-no-files-found: error | |
# Merge the AMD64 and ARM64 images into the final (multiplatform) image. | |
# | |
# For documentation refer to | |
# https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners | |
merge_into_multiplatform_images: | |
needs: | |
- docker_build | |
strategy: | |
matrix: | |
target: [ nitro-node, nitro-node-dev ] | |
include: | |
- target: nitro-node | |
image: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node | |
- target: nitro-node-dev | |
image: ghcr.io/espressosystems/nitro-espresso-integration/nitro-node-dev | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to Github Container Repo | |
uses: docker/login-action@v2 | |
# if: github.event_name != 'pull_request' | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Download digests | |
uses: actions/download-artifact@v3 | |
with: | |
name: "${{ matrix.target }}-digests" | |
path: "${{ runner.temp }}/digests" | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{ matrix.image }} | |
- name: Create manifest list and push | |
working-directory: "${{ runner.temp }}/digests" | |
run: | | |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ | |
$(printf '${{ matrix.image }}@sha256:%s ' *) | |
- name: Inspect image | |
run: | | |
docker buildx imagetools inspect ${{ matrix.image }}:${{ steps.meta.outputs.version }} |