Skip to content

Docker

Docker #140

Workflow file for this run

name: Docker
on:
push:
branches:
- '*'
paths:
- 'docker/**'
schedule:
- cron: '0 3 * * 6'
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
type: choice
options:
- info
- warning
- debug
env:
GITHUB_BRANCH: ${{ github.head_ref || github.ref_name }}
jobs:
build:
strategy:
matrix:
arch: [amd64, arm64]
include:
- arch: amd64
runner: ubuntu-latest
platform: linux/amd64
- arch: arm64
runner: ubuntu-24.04-arm
platform: linux/arm64
runs-on: ${{ matrix.runner }}
steps:
- name: Disk free
run: |
echo "Free disk space:"
df -h
- name: Free up disk space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /opt/ghc
sudo rm -rf /usr/local/.ghcup
sudo rm -rf /opt/hostedtoolcache/CodeQL
- name: Disk free
run: |
echo "Free disk space:"
df -h
- uses: actions/checkout@v4
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build base ${{ matrix.arch }}
working-directory: ./docker/base
run: |
if [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]]; then
BUILD_ARCH="arm64"
elif [[ "$(uname -m)" == "x86_64" || "$(uname -m)" == "amd64" ]]; then
BUILD_ARCH="amd64"
else
echo "Unknown architecture"
exit 1
fi
if [[ $GITHUB_BRANCH != "main" ]]; then
export TAG_NAME=base-${BUILD_ARCH}-dev
else
export TAG_NAME=base-${BUILD_ARCH}
fi
export IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/haxtools:$TAG_NAME
export MAINTAINER="infosux"
export BUILD_DATE=$(date -u +"%Y-%m-%d")
export BUILD_TIME=$(date -u +"%H:%M:%S UTC")
export VCS_URL=$(git config --get remote.origin.url)
export VCS_REF=$(git rev-parse --short HEAD)
docker buildx build --provenance false --platform=${{ matrix.platform }} --build-arg TAG_NAME=$TAG_NAME --build-arg MAINTAINER --build-arg BUILD_DATE --build-arg BUILD_TIME -t $IMAGE_NAME --push .
docker system prune -af
- name: Disk free
run: |
echo "Free disk space:"
df -h
- name: Build cli ${{ matrix.arch }}
working-directory: ./docker/cli
run: |
if [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]]; then
BUILD_ARCH="arm64"
elif [[ "$(uname -m)" == "x86_64" || "$(uname -m)" == "amd64" ]]; then
BUILD_ARCH="amd64"
else
echo "Unknown architecture"
exit 1
fi
if [[ $GITHUB_BRANCH != "main" ]]; then
export TAG_NAME=cli-${BUILD_ARCH}-dev
export BASE_TAG=base-${BUILD_ARCH}-dev
else
export TAG_NAME=cli-${BUILD_ARCH}
export BASE_TAG=base-${BUILD_ARCH}
fi
export IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/haxtools:$TAG_NAME
export MAINTAINER="infosux"
export BUILD_DATE=$(date -u +"%Y-%m-%d")
export BUILD_TIME=$(date -u +"%H:%M:%S UTC")
export VCS_URL=$(git config --get remote.origin.url)
export VCS_REF=$(git rev-parse --short HEAD)
docker buildx build --provenance false --platform=${{ matrix.platform }} --build-arg BASE_TAG=$BASE_TAG --build-arg MAINTAINER --build-arg BUILD_DATE --build-arg BUILD_TIME -t $IMAGE_NAME --push .
docker system prune -af
- name: Disk free
run: |
echo "Free disk space:"
df -h
- name: Build gui ${{ matrix.arch }}
working-directory: ./docker/gui
run: |
if [[ "$(uname -m)" == "aarch64" || "$(uname -m)" == "arm64" ]]; then
BUILD_ARCH="arm64"
elif [[ "$(uname -m)" == "x86_64" || "$(uname -m)" == "amd64" ]]; then
BUILD_ARCH="amd64"
else
echo "Unknown architecture"
exit 1
fi
if [[ $GITHUB_BRANCH != "main" ]]; then
export TAG_NAME=gui-${BUILD_ARCH}-dev
export BASE_TAG=cli-${BUILD_ARCH}-dev
else
export TAG_NAME=gui-${BUILD_ARCH}
export BASE_TAG=cli-${BUILD_ARCH}
fi
export IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/haxtools:$TAG_NAME
export MAINTAINER="infosux"
export BUILD_DATE=$(date -u +"%Y-%m-%d")
export BUILD_TIME=$(date -u +"%H:%M:%S UTC")
export VCS_URL=$(git config --get remote.origin.url)
export VCS_REF=$(git rev-parse --short HEAD)
docker buildx build --provenance false --platform=${{ matrix.platform }} --build-arg BASE_TAG=$BASE_TAG --build-arg MAINTAINER --build-arg BUILD_DATE --build-arg BUILD_TIME -t $IMAGE_NAME --push .
docker system prune -af
- name: Disk free
run: |
echo "Free disk space:"
df -h
create-manifests:
needs: build
runs-on: ubuntu-latest
strategy:
matrix:
image: [base, cli, gui]
steps:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Create and Push haxtools:${{ matrix.image }}
run: |
if [[ $GITHUB_BRANCH != "main" ]]; then
export BRANCH_SUFFIX="-dev"
fi
AMD64_DIGEST=$(docker buildx imagetools inspect ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-amd64${BRANCH_SUFFIX} --format '{{json .Manifest}}' | jq -r '.digest')
ARM64_DIGEST=$(docker buildx imagetools inspect ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-arm64${BRANCH_SUFFIX} --format '{{json .Manifest}}' | jq -r '.digest')
docker manifest create ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}${BRANCH_SUFFIX} \
${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-amd64${BRANCH_SUFFIX}@$AMD64_DIGEST \
${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}-arm64${BRANCH_SUFFIX}@$ARM64_DIGEST
docker manifest push ${{ secrets.DOCKER_USERNAME }}/haxtools:${{ matrix.image }}${BRANCH_SUFFIX}