name: Docker Build Smart Logic on: push: branches: - '**' workflow_dispatch: env: REGISTRY_HOST: git.pi-farm.de IMAGE_BASE: ${{ gitea.repository }} jobs: build: name: Build amd64 & arm64 runs-on: buildx-multiarch steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set dynamic variables and check Dockerfiles run: | # 1. Basis-Checks if [ ! -f "Dockerfile" ]; then echo "ERROR: No Dockerfile found! Aborting." exit 1 fi # 2. Architektur-Zuweisung AMD64_FILE="Dockerfile" if [ -f "Dockerfile.aarch64" ]; then echo "Custom Dockerfile.aarch64 detected." ARM64_FILE="Dockerfile.aarch64" else echo "No Dockerfile.aarch64 found. Using standard Dockerfile for both architectures." ARM64_FILE="Dockerfile" fi # 3. Variablen exportieren VERSION="${{ gitea.ref_name }}" echo "VERSION=$VERSION" >> $GITEA_ENV echo "IMAGE_NAME=${{ env.REGISTRY_HOST }}/${{ env.IMAGE_BASE }}" >> $GITEA_ENV echo "CACHE_IMAGE_NAME=${{ env.REGISTRY_HOST }}/${{ env.IMAGE_BASE }}-cache" >> $GITEA_ENV echo "AMD64_DOCKERFILE=$AMD64_FILE" >> $GITEA_ENV echo "ARM64_DOCKERFILE=$ARM64_FILE" >> $GITEA_ENV echo "BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> $GITEA_ENV - name: Login to registry run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login \ ${{ env.REGISTRY_HOST }} \ -u ${{ secrets.REGISTRY_USER }} \ --password-stdin - name: Setup buildx run: | docker buildx rm multiarch || true docker buildx create --name multiarch --driver docker-container --use docker buildx inspect --bootstrap - name: Build & push amd64 (Cache) run: | docker buildx build \ --platform linux/amd64 \ -f ${AMD64_DOCKERFILE} \ --build-arg BUILD_DATE=${BUILD_DATE} \ --build-arg VERSION=${VERSION} \ -t ${CACHE_IMAGE_NAME}:${VERSION}-amd64 \ --push . - name: Build & push arm64 (Cache) run: | docker buildx build \ --platform linux/arm64 \ -f ${ARM64_DOCKERFILE} \ --build-arg BUILD_DATE=${BUILD_DATE} \ --build-arg VERSION=${VERSION} \ -t ${CACHE_IMAGE_NAME}:${VERSION}-arm64 \ --push . - name: Create and push manifest to Prod run: | docker buildx imagetools create \ -t ${IMAGE_NAME}:${VERSION} \ ${CACHE_IMAGE_NAME}:${VERSION}-amd64 \ ${CACHE_IMAGE_NAME}:${VERSION}-arm64