Skip to content

Build ArchLinuxARM Image #42

Build ArchLinuxARM Image

Build ArchLinuxARM Image #42

name: Build ArchLinuxARM Image
run-name: Build ArchLinuxARM Image${{ github.event_name == 'workflow_dispatch' && (inputs.name != '' && format(' - {0}', inputs.name) || '') || '' }}
on:
push:
branches:
- main
workflow_dispatch:
inputs:
setup_args:
description: "Arguments to pass to setup-arch.sh (e.g. extra packages)"
required: false
default: ""
name:
description: "Optional image tag name (adds an extra tag)"
required: false
default: ""
schedule:
- cron: '0 15 * * 5'
permissions:
contents: read
packages: write
jobs:
build-and-push:
name: Build and Push GHCR Image
runs-on: ubuntu-22.04-arm
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set shared Docker config
run: echo "DOCKER_CONFIG=$RUNNER_TEMP/.docker" >> "$GITHUB_ENV"
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Prepare rootfs (aarch64)
env:
PLATFORM: linux/arm64
run: |
set -euxo pipefail
mkdir -p "${PLATFORM}"
docker run --rm --platform "${PLATFORM}" --pull always \
-v "$(pwd)/${PLATFORM}:/mnt" \
-v "$(pwd)/setup-arch.sh:/setup-arch.sh" \
--privileged alpine /setup-arch.sh ${{ github.event.inputs.setup_args }}
- name: Prepare rootfs (armv7h)
env:
PLATFORM: linux/arm/v7
run: |
set -euxo pipefail
mkdir -p "${PLATFORM}"
docker run --rm --platform "${PLATFORM}" --pull always \
-v "$(pwd)/${PLATFORM}:/mnt" \
-v "$(pwd)/setup-arch.sh:/setup-arch.sh" \
--privileged alpine /setup-arch.sh ${{ github.event.inputs.setup_args }}
- name: Build and push multi-arch image
env:
IMAGE: ghcr.io/${{ github.repository_owner }}/docker-archlinuxarm
run: |
set -euxo pipefail
sudo --preserve-env=DOCKER_CONFIG docker buildx create --name rootbuilder --use
DATE="$(date -u +%F)"
NAME_TAG="${{ github.event.inputs.name }}"
if [ -n "${NAME_TAG}" ]; then
EXTRA_TAG="$IMAGE:${NAME_TAG}"
DATE_TAG="$IMAGE:${DATE}-${NAME_TAG}"
else
EXTRA_TAG="$IMAGE:latest"
DATE_TAG="$IMAGE:${DATE}"
fi
sudo --preserve-env=DOCKER_CONFIG docker buildx build --platform linux/arm64,linux/arm/v7 . -t ${DATE_TAG} -t ${EXTRA_TAG} --push
sudo --preserve-env=DOCKER_CONFIG docker buildx imagetools inspect "${DATE_TAG}"