Skip to content

Introduce the new Rust port #74

Introduce the new Rust port

Introduce the new Rust port #74

name: Build and Push Docker Image for Multiple Architectures
on:
# To enable manual triggering of this workflow
workflow_dispatch:
# Trigger for pushes to master and tags
push:
branches:
- master
- develop # TODO: Remove this
tags:
- 'v*.*.*'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
IMAGE_NAME: index.docker.io/metacall/core
jobs:
build:
name: Build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64
- linux/arm/v6
- linux/arm/v7
steps:
- name: Checkout the code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Define Platform
run: |
PLATFORM=${{ matrix.platform }}
echo "METACALL_PLATFORM=${PLATFORM}" >> $GITHUB_ENV
echo "METACALL_PLATFORM_PAIR=${PLATFORM//\//-}" >> $GITHUB_ENV
- name: Docker Metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE_NAME }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Build MetaCall Docker Images
run: bash ./docker-compose.sh platform
# # TODO: Build with alpine and provide multiple tags (debian & alpine) once all tests pass
# - name: Push MetaCall Docker Image to DockerHub
# run: |
# if [[ "${{ github.ref == 'refs/heads/master' }}" = true ]]; then
# bash ./docker-compose.sh push
# elif [[ "${{ contains(github.ref, 'refs/tags/') }}" = true ]]; then
# bash ./docker-compose.sh version
# else
# echo "Failed to push the docker images"
# exit 1
# fi
# - name: Export Digest
# run: |
# mkdir -p /tmp/digests
# digest="${{ steps.build.outputs.digest }}"
# touch "/tmp/digests/${digest#sha256:}"
# - name: Upload Digest
# uses: actions/upload-artifact@v4
# with:
# name: digests-${{ env.METACALL_PLATFORM_PAIR }}
# path: /tmp/digests/*
# if-no-files-found: error
# retention-days: 1
- name: Logout from DockerHub
run: docker logout
# merge:
# runs-on: ubuntu-latest
# needs:
# - build
# steps:
# - name: Download Digests
# uses: actions/download-artifact@v4
# with:
# path: /tmp/digests
# pattern: digests-*
# merge-multiple: true
# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v3
# - name: Docker Metadata
# id: meta
# uses: docker/metadata-action@v5
# with:
# images: ${{ env.IMAGE_NAME }}
# - name: Login to DockerHub
# uses: docker/login-action@v3
# with:
# username: ${{ secrets.DOCKER_HUB_USERNAME }}
# password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
# - name: Create manifest list and push
# working-directory: /tmp/digests
# run: |
# docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
# $(printf '${{ env.IMAGE_NAME }}@sha256:%s ' *)
# - name: Inspect image
# run: |
# docker buildx imagetools inspect ${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}