# based on https://blog.oddbit.com/post/2020-09-25-building-multi-architecture-im/ --- # Interlisp workflow to build Docker Image that support multiple architectures name: Build Medley Docker image # Run this workflow on demand on: workflow_dispatch: # Jobs that compose this workflow jobs: # Job to build the docker image docker: runs-on: ubuntu-latest steps: # Checkout the branch - name: Checkout uses: actions/checkout@v2 # Get the Medley Release Information - name: Get Medley Release Information id: medley_version uses: abatilo/release-info-action@v1.3.0 with: owner: Interlisp repo: medley # Get the Maiko Release Information - name: Get Maiko Release Information id: maiko_version uses: abatilo/release-info-action@v1.3.0 with: owner: Interlisp repo: maiko # Setup needed environment variables - name: Prepare id: prep run: | DOCKERHUB_ACCOUNT=interlisp DOCKER_IMAGE=${DOCKERHUB_ACCOUNT}/${GITHUB_REPOSITORY#*/} VERSION=latest MAIKO_RELEASE=${{ steps.maiko_version.outputs.latest_tag }} MEDLEY_RELEASE=${{ steps.medley_version.outputs.latest_tag }} TAGS="${DOCKER_IMAGE}:${MEDLEY_RELEASE},${DOCKER_IMAGE}:${VERSION},${DOCKER_IMAGE}:${MAIKO_RELEASE}" # Set output parameters. echo ::set-output name=tags::${TAGS} echo ::set-output name=docker_image::${DOCKER_IMAGE} echo ::set-output name=build_time::$(date -u +'%Y-%m-%dT%H:%M:%SZ') echo ::set-output name=version::${VERSION} echo ::set-output name=maiko_release::${MAIKO_RELEASE} echo ::set-output name=medley_release::${MEDLEY_RELEASE} # Download Medley Release Assets - name: Download Release Assets uses: robinraju/release-downloader@v1.2 with: repository: Interlisp/medley token: ${{ secrets.GITHUB_TOKEN }} latest: true fileName: "*" # Download Maiko Release Assets - name: Download Release Assets uses: robinraju/release-downloader@v1.2 with: repository: Interlisp/maiko token: ${{ secrets.GITHUB_TOKEN }} latest: true fileName: "*" # Setup Docker Machine Emulation environment - name: Set up QEMU uses: docker/setup-qemu-action@master with: platforms: all # Setup Docker Buildx function - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@master # Login to DockerHub - required to store the image - name: Login to DockerHub if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} # Start the Docker Build using the Dockerfilein the repository - name: Build uses: docker/build-push-action@v2 with: builder: ${{ steps.buildx.outputs.name }} context: . file: ./Dockerfile # Platforms # linux/amd64 -- Standard x86_64 # linux/arm64 -- Apple M1 # linux/arm/v7 -- Raspberry pi platforms: linux/amd64,linux/arm64,linux/arm/v7 # Push the created image push: true # tags to assign to the Docker image tags: ${{ steps.prep.outputs.tags }} build-args: | medley_release=${{steps.prep.outputs.medley_release}} maiko_release=${{steps.prep.outputs.maiko_release}} build_date=${{steps.prep.outputs.build_time}}