name: Build and Publish Unified Docker Image on: push: branches: - main tags: - 'v*' workflow_dispatch: env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} type=sha,prefix=sha- type=raw,value=latest,enable={{is_default_branch}} labels: | org.opencontainers.image.title=ReadMeABook Unified org.opencontainers.image.description=All-in-one audiobook request and automation system (PostgreSQL + Redis + App) org.opencontainers.image.vendor=ReadMeABook - name: Capture version information id: version run: | echo "git_commit=$(git rev-parse --short=7 HEAD)" >> $GITHUB_OUTPUT echo "build_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT - name: Build and push unified Docker image uses: docker/build-push-action@v5 with: context: . file: ./dockerfile.unified platforms: linux/amd64,linux/arm64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max build-args: | GIT_COMMIT=${{ steps.version.outputs.git_commit }} BUILD_DATE=${{ steps.version.outputs.build_date }} - name: Generate deployment instructions if: github.event_name != 'pull_request' run: | echo "## 🎉 Docker image published successfully!" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### 📦 Available tags:" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY echo "${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### 🚀 Quick start:" >> $GITHUB_STEP_SUMMARY echo '```bash' >> $GITHUB_STEP_SUMMARY echo "docker run -d \\" >> $GITHUB_STEP_SUMMARY echo " --name readmeabook \\" >> $GITHUB_STEP_SUMMARY echo " -p 3030:3030 \\" >> $GITHUB_STEP_SUMMARY echo " -v ./config:/app/config \\" >> $GITHUB_STEP_SUMMARY echo " -v ./downloads:/downloads \\" >> $GITHUB_STEP_SUMMARY echo " -v ./media:/media \\" >> $GITHUB_STEP_SUMMARY echo " -v readmeabook-data:/var/lib/postgresql/data \\" >> $GITHUB_STEP_SUMMARY echo " ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY