name: Build & Push Images on: workflow_dispatch: # Only allow manual triggers # push: # branches: [main] # Commented out - no auto-trigger env: REGISTRY: ghcr.io IMAGE_NAME_PREFIX: ntumurbars/customer-portal jobs: build-and-push: name: Build & Push Docker Images runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 10.15.0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata for frontend id: meta-frontend uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_PREFIX }}-frontend tags: | type=raw,value=latest,enable={{is_default_branch}} type=sha,prefix=main- - name: Extract metadata for backend id: meta-backend uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_PREFIX }}-backend tags: | type=raw,value=latest,enable={{is_default_branch}} type=sha,prefix=main- - name: Build and push frontend image uses: docker/build-push-action@v5 with: context: . file: ./apps/portal/Dockerfile platforms: linux/amd64 push: true tags: ${{ steps.meta-frontend.outputs.tags }} labels: ${{ steps.meta-frontend.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - name: Build and push backend image uses: docker/build-push-action@v5 with: context: . file: ./apps/bff/Dockerfile platforms: linux/amd64 push: true tags: ${{ steps.meta-backend.outputs.tags }} labels: ${{ steps.meta-backend.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - name: Build Summary run: | echo "## 🚀 Build Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "**Frontend Image:** \`${{ steps.meta-frontend.outputs.tags }}\`" >> $GITHUB_STEP_SUMMARY echo "**Backend Image:** \`${{ steps.meta-backend.outputs.tags }}\`" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### 📦 Images Built:" >> $GITHUB_STEP_SUMMARY echo "- **Frontend**: [ghcr.io/${{ env.IMAGE_NAME_PREFIX }}-frontend](https://github.com/NTumurbars/customer-portal/pkgs/container/customer-portal-frontend)" >> $GITHUB_STEP_SUMMARY echo "- **Backend**: [ghcr.io/${{ env.IMAGE_NAME_PREFIX }}-backend](https://github.com/NTumurbars/customer-portal/pkgs/container/customer-portal-backend)" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### 🚀 Next Steps:" >> $GITHUB_STEP_SUMMARY echo "1. **SSH to Plesk server** and run:" >> $GITHUB_STEP_SUMMARY echo " \`\`\`bash" >> $GITHUB_STEP_SUMMARY echo " docker compose -f compose-plesk.yaml pull" >> $GITHUB_STEP_SUMMARY echo " docker compose -f compose-plesk.yaml up -d" >> $GITHUB_STEP_SUMMARY echo " \`\`\`" >> $GITHUB_STEP_SUMMARY echo "2. **Or update via Plesk UI**: Docker → Stacks → customer-portal → Pull → Up" >> $GITHUB_STEP_SUMMARY