113 lines
3.7 KiB
YAML
113 lines
3.7 KiB
YAML
# 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}}
|