Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ci): build both x86/arm64 docker images from GHA #4204

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 }}