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