Skip to content

Commit

Permalink
feat(ci): build both x86/arm64 docker images from GHA (#4204)
Browse files Browse the repository at this point in the history
Description
Improve docker image build, supporting build with both x86-64 and ARM64 images together.

Motivation and Context
Reduce docker user confusion as both x86-64 and arm64 combined.

How Has This Been Tested?
Pulled all images local and test Raspberry Pi
Run some of the images on my local machine and Raspberry pi
  • Loading branch information
leet4tari authored Jun 23, 2022
1 parent babb1c0 commit 28a8f8b
Showing 1 changed file with 93 additions and 34 deletions.
127 changes: 93 additions & 34 deletions .github/workflows/launchpad_docker.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
---
name: Build launchpad docker images

on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
# branches:
# - development
branches:
- build-gha-docker-*
workflow_dispatch:
inputs:
docker_tag:
description: "Docker tag"
required: true
default: "development"

name: Build launchpad docker images

env:
toolchain: nightly-2021-11-20
CARGO_HTTP_MULTIPLEXING: false
Expand All @@ -26,69 +27,127 @@ jobs:
matrix:
image_name:
[
frontail,
monerod,
tari_base_node,
tari_console_wallet,
tari_mm_proxy,
tari_sha3_miner,
tor,
xmrig,
]
include:
- image_name: tari_base_node
app_name: base_node
app_exec: tari_base_node
- image_name: tari_wallet
app_name: wallet
app_exec: tari_console_wallet
- image_name: tari_mm_proxy
app_name: mm_proxy
app_exec: tari_merge_mining_proxy
- image_name: tari_sha3_miner
app_name: sha3_miner
app_exec: tari_miner

runs-on: ubuntu-latest

steps:
- name: checkout
uses: actions/checkout@v3
with:
submodules: recursive

- name: set env
id: environments
run: |
TAG=""
REF=${{github.ref}}
if [ "${{ startsWith(github.ref, 'refs/tags/v') }}" == "true" ]
then
REF=${{github.ref}}
TAG="${REF/refs\/tags\//}"
echo "docker tag from git: $TAG"
else
# Pull App version from file
VAPP=$(awk -F ' = ' \
'$1 ~ /version/ { gsub(/["]/, "", $2); printf("%s",$2) }' \
"${GITHUB_WORKSPACE}/applications/tari_base_node/Cargo.toml")
VBRANCH=$(echo ${GITHUB_REF#refs/heads/})
VSHA_SHORT=$(git rev-parse --short HEAD)
TAG="v${VAPP}_${VBRANCH}_$(date -u '+%Y%m%d')_${VSHA_SHORT}"
echo "docker tag from App Version _ git branch _ \
date stamp _ git short hash: ${TAG}"
fi
echo "event name: ${{ github.event_name }}"
if [ "${{ github.event_name }}" == "workflow_dispatch" ]
then
TAG="${{ github.event.inputs.docker_tag }}"
echo "docker tag from workflow dispatch: $TAG"
fi
echo "TAG=$TAG" >> $GITHUB_ENV
IMAGE=${{ matrix.image_name }}
echo "image: $IMAGE"
TEMP=${IMAGE/tari_/}
# echo "temp: $TEMP"
SERVICE="${TEMP/console_/}"
echo "service: $SERVICE"
echo "SERVICE=$SERVICE" >> $GITHUB_ENV
- name: build docker image
run: |
if [ -z $SERVICE ]
# Setup dockerfile to use
if [ "${IMAGE:0:5}" == "tari_" ]
then
echo "service is undefined!"
exit 1
echo ::set-output name=dockerfile::tarilabs.Dockerfile
# Strip tari_
IMAGE=${IMAGE/tari_/}
# Strip console_
IMAGE=${IMAGE/console_/}
echo ::set-output name=app_name::${IMAGE}
echo ::set-output name=dockercontext::./
else
DOCKERFILE=${IMAGE}.Dockerfile
DOCKERCONTEXT=./applications/launchpad/docker_rig/
# Pull the docker image TAG from dockerfile
SUBTAG=$(awk -F '=' '/ARG .*_VERSION=/ \
{ gsub(/["]/, "", $2); printf("%s",$2) }' \
"${GITHUB_WORKSPACE}/${DOCKERCONTEXT}${DOCKERFILE}")
echo ::set-output name=dockerfile::${DOCKERFILE}
echo ::set-output name=dockercontext::${DOCKERCONTEXT}
if [ ! -z "${SUBTAG}" ]
then
TAG="${SUBTAG}_${TAG}"
echo "Adding subtag: ${TAG}"
fi
fi
cd applications/launchpad/docker_rig
docker-compose build $SERVICE
- name: Login to Quay.io
# Set docker image tag
echo "tag: ${TAG}"
echo ::set-output name=tag::$TAG
- name: Login to Docker Image Provider
uses: docker/login-action@v1
with:
registry: quay.io
registry: ${{ secrets.DOCKER_PROVIDER }}
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_ROBOT_TOKEN }}

- name: tag and push image
run: |
echo "tag: $TAG"
if [ -n "$TAG" ]
then
docker tag quay.io/tarilabs/${{ matrix.image_name }}:latest quay.io/tarilabs/${{ matrix.image_name }}:$TAG
- name: Set up QEMU for Docker
uses: docker/setup-qemu-action@v2

docker push quay.io/tarilabs/${{ matrix.image_name }}:latest
docker push quay.io/tarilabs/${{ matrix.image_name }}:$TAG
fi
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2

- name: Docker image build and push
uses: docker/build-push-action@v3
with:
context: ${{ steps.environments.outputs.dockercontext }}
file: ./applications/launchpad/docker_rig/${{ steps.environments.outputs.dockerfile }}
platforms: linux/arm64, linux/amd64
push: true
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
VERSION=${{ steps.environments.outputs.tag }}
APP_NAME=${{ matrix.app_name }}
APP_EXEC=${{ matrix.app_exec }}
tags: |
${{ secrets.DOCKER_PROVIDER }}/${{ secrets.DOCKER_REPO }}/${{ matrix.image_name }}:latest
${{ secrets.DOCKER_PROVIDER }}/${{ secrets.DOCKER_REPO }}/${{ matrix.image_name }}:${{ steps.environments.outputs.tag }}

0 comments on commit 28a8f8b

Please sign in to comment.