name: Docker Build and Push on: push: tags: - "v*" jobs: docker: runs-on: arm64-ubuntu-24.04 steps: - name: Clone repository run: | git clone "${{ gitea.server_url }}/${{ gitea.repository }}.git" . git checkout "${{ gitea.ref_name }}" - name: Set image metadata run: | IMAGE_NAME="$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]' | tr '_' '-')" IMAGE="${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${{ gitea.ref_name }}" echo "IMAGE_NAME=${IMAGE_NAME}" >> "$GITEA_ENV" echo "IMAGE=${IMAGE}" >> "$GITEA_ENV" - name: Login to Docker Registry run: | echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" \ -u "$DOCKER_USERNAME" \ --password-stdin - name: Build Docker Image run: | docker build -t "$IMAGE" . - name: Push Docker Image run: | for attempt in 1 2 3; do echo "Starting docker push attempt ${attempt}/3 for ${IMAGE}" docker push "$IMAGE" & PUSH_PID=$! while kill -0 "$PUSH_PID" 2>/dev/null; do echo "docker push is still running at $(date -u '+%Y-%m-%dT%H:%M:%SZ')" sleep 60 done if wait "$PUSH_PID"; then echo "docker push completed successfully" exit 0 fi echo "docker push failed on attempt ${attempt}/3" sleep 30 done echo "docker push failed after 3 attempts" exit 1