Files
minihass/.github/workflows/container-build.yml
sstent 4f163ec27b Dynamic registry and image name in workflow
This update modifies the GitHub Actions workflow to dynamically determine the container registry and image name based on the server environment. It also ensures that the image name is in lowercase and updates the login and build steps accordingly.
2025-11-19 17:57:39 -08:00

68 lines
2.1 KiB
YAML

name: Build and Push Docker Image
on:
workflow_dispatch:
push:
branches:
- main
paths:
- 'app.py'
- 'dockerfile'
- 'requirements.txt'
- 'docker-compose.yml'
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
# 1. Determine Registry and Image Name dynamically
- name: Prepare Registry Environment
id: prep
run: |
# Check if running on GitHub or Gitea
if [[ "${{ github.server_url }}" == *"github.com"* ]]; then
echo "Running on GitHub"
echo "REGISTRY=ghcr.io" >> $GITHUB_ENV
else
echo "Running on Gitea"
# Strip 'https://' and trailing slashes from the server URL to get the hostname
# e.g., https://gitea.my-server.com/ -> gitea.my-server.com
CLEAN_HOST=$(echo "${{ github.server_url }}" | sed -e 's|^[^/]*//||' -e 's|/.*$||')
echo "REGISTRY=$CLEAN_HOST" >> $GITHUB_ENV
fi
# Docker images must be lowercase. GitHub/Gitea repos might contain uppercase.
IMAGE_NAME=$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')
echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV
# 2. Login using the dynamic REGISTRY variable
- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# 3. Push using dynamic tags
- name: Build and push multi-arch Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
platforms: linux/amd64,linux/arm64
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max