name: Build Container on: push: branches: [ main, develop ] paths: - 'src/**' - 'public/**' - 'package*.json' - 'Dockerfile' - 'Containerfile' pull_request: branches: [ main ] paths: - 'src/**' - 'public/**' - 'package*.json' - 'Dockerfile' - 'Containerfile' env: IMAGE_NAME: jmespath-playground jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Node.js 24 LTS uses: actions/setup-node@v4 with: node-version: '24' cache: 'npm' - name: Install dependencies run: npm ci - name: Run tests run: npm test -- --coverage --watchAll=false - name: Build React application run: npm run build - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build container image uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: false tags: ${{ env.IMAGE_NAME }}:latest cache-from: type=gha cache-to: type=gha,mode=max - name: Test container run: | docker run --rm -d -p 3000:3000 --name test-container ${{ env.IMAGE_NAME }}:latest sleep 10 # Test if the container is responding curl -f http://localhost:3000 || exit 1 docker stop test-container - name: Upload build artifacts uses: actions/upload-artifact@v4 if: success() with: name: build-output path: build/ retention-days: 7 # Optional: Build with multi-platform support for production build-multiplatform: runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' needs: build steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build multi-platform image uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile platforms: linux/amd64,linux/arm64 push: false tags: ${{ env.IMAGE_NAME }}:latest cache-from: type=gha cache-to: type=gha,mode=max