diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index d098dc2..8a7749e 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -22,6 +22,15 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + cache: 'npm' + cache-dependency-path: | + client/package-lock.json + server/package-lock.json + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -46,11 +55,22 @@ jobs: type=sha,prefix=sha- - name: Build React client + working-directory: ./client run: | - cd client npm ci npm run build - cd .. + + - name: Verify client build + run: | + ls -la client/dist/ || echo "No dist directory found" + if [ -d "client/dist" ]; then + echo "✅ Client build successful" + echo "Build contents:" + find client/dist -type f | head -5 + else + echo "❌ Client build failed - no dist directory" + exit 1 + fi - name: Build and push Docker image uses: docker/build-push-action@v5 @@ -63,83 +83,12 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - - name: Generate deployment artifact + - name: Image build summary if: github.event_name != 'pull_request' run: | - mkdir -p deployment - - # Create production docker-compose file - cat > deployment/docker-compose.prod.yml << 'EOF' - version: '3.8' - - services: - nginx: - image: nginx:alpine - container_name: etsy-nginx - ports: - - "3000:80" - volumes: - - ./nginx.conf:/etc/nginx/nginx.conf:ro - - client_dist:/usr/share/nginx/html:ro - depends_on: - - etsy-tracker - restart: unless-stopped - networks: - - etsy-network - - etsy-tracker: - image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} - container_name: etsy-finance-tracker - expose: - - "8080" - environment: - - NODE_ENV=production - - PORT=8080 - volumes: - - ./data:/app/data - - etsy_uploads:/app/uploads - - client_dist:/usr/share/nginx/html - restart: unless-stopped - networks: - - etsy-network - - volumes: - etsy_uploads: - client_dist: - - networks: - etsy-network: - driver: bridge - EOF - - # Copy nginx config - cp nginx.conf deployment/ - - # Create deployment script - cat > deployment/deploy.sh << 'EOF' - #!/bin/bash - - echo "🚀 Deploying Etsy Finance Tracker..." - - # Pull latest image - docker-compose -f docker-compose.prod.yml pull - - # Stop existing containers - docker-compose -f docker-compose.prod.yml down - - # Start with new image - docker-compose -f docker-compose.prod.yml up -d - - echo "✅ Deployment complete!" - echo "🌐 Access your app at: http://localhost:3000" - EOF - - chmod +x deployment/deploy.sh - - - name: Upload deployment artifacts - if: github.event_name != 'pull_request' - uses: actions/upload-artifact@v4 - with: - name: deployment-files - path: deployment/ - retention-days: 30 \ No newline at end of file + echo "✅ Docker image built and pushed successfully!" + echo "📦 Image tags:" + echo "${{ steps.meta.outputs.tags }}" + echo "" + echo "🚀 Deploy on your Mac Mini with:" + echo "git pull && ./build-deploy.sh ghcr" \ No newline at end of file