🔧 Fixed Build Problems: - Add proper Node.js setup with npm caching - Use working-directory for client build step - Add client build verification with error handling - Simplified workflow removing complex artifact generation - Better error messages and build status reporting 🔄 Node.js Version Handling: - Set explicit Node.js 18 setup - Removed deprecated Node.js 24 environment variable - Added proper npm cache configuration - Cache both client and server package-lock.json files ✅ Build Process: 1. Checkout repository 2. Set up Node.js 18 with npm caching 3. Build React client with npm ci + npm run build 4. Verify client build succeeded 5. Build multi-platform Docker image 6. Push to GitHub Container Registry This should resolve the npm build command not found error and Node.js deprecation warnings.
94 lines
No EOL
2.5 KiB
YAML
94 lines
No EOL
2.5 KiB
YAML
name: Build and Push Docker Images
|
|
|
|
on:
|
|
push:
|
|
branches: [ main, develop ]
|
|
tags: [ 'v*' ]
|
|
pull_request:
|
|
branches: [ main ]
|
|
|
|
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 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
|
|
|
|
- name: Log in to 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 for Docker
|
|
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=sha,prefix=sha-
|
|
|
|
- name: Build React client
|
|
working-directory: ./client
|
|
run: |
|
|
npm ci
|
|
npm run build
|
|
|
|
- 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
|
|
with:
|
|
context: .
|
|
push: ${{ github.event_name != 'pull_request' }}
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
platforms: linux/amd64,linux/arm64
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
|
|
- name: Image build summary
|
|
if: github.event_name != 'pull_request'
|
|
run: |
|
|
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" |