name: Deploy Frontend on: # push: # branches: [ main ] # paths: # - 'frontend/**' # - 'Dockerfile.frontend' # - 'nginx.conf' # - '.github/workflows/deploy_frontend.yml' workflow_dispatch: env: IMAGE_NAME: license-manager-frontend CONTAINER_NAME: license-manager-frontend jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker image run: | docker build -f Dockerfile.frontend --build-arg NGINX_CONF=nginx-ci.conf -t ${{ env.IMAGE_NAME }}:latest . docker save ${{ env.IMAGE_NAME }}:latest > frontend-image.tar - name: Copy files to server uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.HOST_PI }} username: pi password: ${{ secrets.PASS_PI }} port: 22 source: "frontend-image.tar" target: "/home/pi/license-manager/" - name: Deploy to server uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.HOST_PI }} username: pi password: ${{ secrets.PASS_PI }} port: 22 script: | cd /home/pi/license-manager # Stop and remove existing container docker stop ${{ env.CONTAINER_NAME }} || true docker rm ${{ env.CONTAINER_NAME }} || true # Load new image docker load < frontend-image.tar # Remove old image docker rmi ${{ env.IMAGE_NAME }}:old || true docker tag ${{ env.IMAGE_NAME }}:latest ${{ env.IMAGE_NAME }}:old || true # Run new container docker run -d \ --name ${{ env.CONTAINER_NAME }} \ --restart unless-stopped \ -p 18080:80 \ --add-host host.docker.internal:host-gateway \ ${{ env.IMAGE_NAME }}:latest # Clean up rm -f frontend-image.tar docker image prune -f # Check deployment status sleep 5 if docker ps | grep -q ${{ env.CONTAINER_NAME }}; then echo "✅ Frontend deployment successful! Container is running." docker logs --tail 10 ${{ env.CONTAINER_NAME }} else echo "❌ Frontend deployment failed! Container is not running." docker logs ${{ env.CONTAINER_NAME }} exit 1 fi - name: Health check run: | sleep 10 response=$(curl -s -o /dev/null -w "%{http_code}" http://${{ secrets.HOST_PI }}:18080/ || echo "000") if [ "$response" = "200" ]; then echo "✅ Frontend health check passed! Service is responding." else echo "⚠️ Frontend health check returned status: $response" echo "Service may still be starting up..." fi