Files
mc-webui/.github/workflows/docker-publish.yml
MarekWo 10cc2031d1 feat: add GitHub Actions cache for Docker layer builds
Use GHA cache backend (cache-from/cache-to) so that unchanged
layers (especially the slow ARM pip install) are reused across runs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 21:30:05 +02:00

88 lines
2.4 KiB
YAML

name: Build and Push mc-webui image
on:
push:
branches: [main, dev]
workflow_dispatch: # Manual trigger
env:
IMAGE_NAME: mc-webui
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Freeze App Version
run: python3 -m app.version freeze
- name: Extract version tag
id: get_tag
run: |
TAG_VALUE=$(grep "DOCKER_TAG =" app/version_frozen.py | cut -d'"' -f2)
echo "Extracted Tag: $TAG_VALUE"
echo "tag=$TAG_VALUE" >> $GITHUB_OUTPUT
- name: Determine image tags
id: tags
run: |
BRANCH="${GITHUB_REF##*/}"
DH_IMAGE="${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}"
OWNER_LC=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
GH_IMAGE="ghcr.io/${OWNER_LC}/${{ env.IMAGE_NAME }}"
TAG="${{ steps.get_tag.outputs.tag }}"
if [ "$BRANCH" = "main" ]; then
TAGS="${DH_IMAGE}:latest,${DH_IMAGE}:${TAG}"
TAGS="${TAGS},${GH_IMAGE}:latest,${GH_IMAGE}:${TAG}"
else
TAGS="${DH_IMAGE}:${BRANCH},${DH_IMAGE}:${BRANCH}-${TAG}"
TAGS="${TAGS},${GH_IMAGE}:${BRANCH},${GH_IMAGE}:${BRANCH}-${TAG}"
fi
echo "Generated tags: $TAGS"
echo "tags=$TAGS" >> $GITHUB_OUTPUT
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: true
platforms: linux/amd64,linux/arm64,linux/arm/v7
tags: ${{ steps.tags.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max