Files
docker-images/.gitea/workflows/build-images.yml

76 lines
2.2 KiB
YAML

name: Build and Push Docker Images
on:
push:
branches: [main]
paths:
- 'images/**'
workflow_dispatch:
env:
REGISTRY: gitea.arnodo.fr
jobs:
build:
runs-on: docker
container:
image: docker:cli
steps:
- name: Install dependencies
run: apk add --no-cache git
- name: Checkout repository
run: |
git clone --depth 2 https://gitea.arnodo.fr/${{ gitea.repository }}.git .
git checkout ${{ gitea.sha }}
- name: Detect images to build
id: detect
run: |
echo "Event: ${{ gitea.event_name }}"
if [ "${{ gitea.event_name }}" = "workflow_dispatch" ]; then
echo "Manual trigger - building all images"
IMAGES=""
for dir in images/*/; do
if [ -f "${dir}Dockerfile" ]; then
name=$(basename "$dir")
echo "Found image: $name"
IMAGES="${IMAGES}${name} "
fi
done
else
echo "Push event - detecting changes"
IMAGES=$(git diff --name-only HEAD~1 HEAD -- images/ 2>/dev/null | cut -d'/' -f2 | sort -u | grep -v '^$' | tr '\n' ' ')
fi
echo "Images to build: $IMAGES"
echo "images=$IMAGES" >> $GITHUB_OUTPUT
- name: Login to Registry
run: |
echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ gitea.actor }} --password-stdin
- name: Build and Push all images
run: |
IMAGES="${{ steps.detect.outputs.images }}"
if [ -z "$IMAGES" ]; then
echo "No images to build"
exit 0
fi
for IMAGE in $IMAGES; do
IMAGE_NAME="${{ env.REGISTRY }}/damien/${IMAGE}"
IMAGE_PATH="images/${IMAGE}"
echo "========================================"
echo "Building ${IMAGE_NAME}:latest"
echo "========================================"
docker build -t "${IMAGE_NAME}:latest" "${IMAGE_PATH}"
docker push "${IMAGE_NAME}:latest"
echo "✅ Pushed ${IMAGE_NAME}:latest"
done