From 2ba3996258246e9f4099f0a08f11f7c23bbb3728 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Mon, 25 Aug 2025 21:12:53 -0400 Subject: [PATCH] Make the temporary build script more flexible for cross-architecture builds --- examples/quickstart/README.md | 2 +- examples/quickstart/build.sh | 104 +++++++++++++++++++++++++++++++--- 2 files changed, 96 insertions(+), 10 deletions(-) diff --git a/examples/quickstart/README.md b/examples/quickstart/README.md index 6812883af..82f007815 100644 --- a/examples/quickstart/README.md +++ b/examples/quickstart/README.md @@ -83,7 +83,7 @@ Transform your local bot into a production-ready service. Pipecat Cloud handles 3. Set up Docker for building your bot image: - - **Install [Docker](https://www.docker.com/)** on your system + - **Install [Docker Desktop](https://www.docker.com/)** on your system - **Create a [Docker Hub](https://hub.docker.com/) account** - **Login to Docker Hub:** diff --git a/examples/quickstart/build.sh b/examples/quickstart/build.sh index 689587e85..dabbfdbcc 100755 --- a/examples/quickstart/build.sh +++ b/examples/quickstart/build.sh @@ -5,15 +5,101 @@ VERSION="0.1" DOCKER_USERNAME="your_username" AGENT_NAME="quickstart" -# Build the Docker image with the correct context -echo "Building Docker image..." -docker build --platform=linux/arm64 -t "$DOCKER_USERNAME/$AGENT_NAME:$VERSION" -t "$DOCKER_USERNAME/$AGENT_NAME:latest" . +# Function to check if buildx is available +check_buildx() { + if ! command -v docker &> /dev/null; then + echo "❌ Docker is not installed or not in PATH" + echo " Please install Docker Desktop or Docker Engine" + echo " Visit: https://docs.docker.com/get-docker/" + exit 1 + fi -# Push the Docker images -echo "Pushing Docker image $DOCKER_USERNAME/$AGENT_NAME:$VERSION..." -docker push "$DOCKER_USERNAME/$AGENT_NAME:$VERSION" + if ! docker buildx version &> /dev/null; then + echo "❌ Docker buildx is not available" + echo " buildx is required for cross-platform ARM64 builds" + echo "" + echo "Solutions:" + echo " • Install Docker Desktop (includes buildx)" + echo " • Update Docker to version 19.03+ and enable buildx" + echo " • Run: docker buildx install" + echo "" + echo "Visit: https://docs.docker.com/buildx/working-with-buildx/" + exit 1 + fi -echo "Pushing Docker image $DOCKER_USERNAME/$AGENT_NAME:latest..." -docker push "$DOCKER_USERNAME/$AGENT_NAME:latest" + echo "✅ Docker buildx is available" +} -echo "Successfully built and pushed $DOCKER_USERNAME/$AGENT_NAME:$VERSION and $DOCKER_USERNAME/$AGENT_NAME:latest" \ No newline at end of file +# Function to ensure builder is set up +setup_builder() { + # Check if we have a builder that supports our target platform + if ! docker buildx inspect --builder default | grep -q "linux/arm64"; then + echo "Setting up multi-platform builder..." + docker buildx create --name multiarch --driver docker-container --use --bootstrap 2>/dev/null || { + echo "⚠️ Using default builder (may be slower on x86 machines)" + docker buildx use default + } + fi +} + +# Main build process +main() { + echo "Building Docker image for Pipecat Cloud (ARM64)..." + + # Check prerequisites + check_buildx + setup_builder + + # Build the Docker image with buildx (handles cross-platform) + echo "Building $DOCKER_USERNAME/$AGENT_NAME:$VERSION..." + + # Use buildx with --load to build and load into local Docker + if ! docker buildx build \ + --platform=linux/arm64 \ + -t "$DOCKER_USERNAME/$AGENT_NAME:$VERSION" \ + -t "$DOCKER_USERNAME/$AGENT_NAME:latest" \ + --load \ + .; then + echo "❌ Build failed" + echo "" + echo "Common issues:" + echo " • Missing Dockerfile in current directory" + echo " • Build errors in your application code" + echo " • Insufficient disk space" + echo "" + echo "On Intel/x86 machines: builds may be slower due to emulation" + exit 1 + fi + + echo "✅ Build completed successfully" + + # Push the Docker images + echo "" + echo "Pushing images to registry..." + + echo "Pushing $DOCKER_USERNAME/$AGENT_NAME:$VERSION..." + if ! docker push "$DOCKER_USERNAME/$AGENT_NAME:$VERSION"; then + echo "❌ Push failed for version tag" + echo " Make sure you're logged in: docker login" + exit 1 + fi + + echo "Pushing $DOCKER_USERNAME/$AGENT_NAME:latest..." + if ! docker push "$DOCKER_USERNAME/$AGENT_NAME:latest"; then + echo "❌ Push failed for latest tag" + echo " Make sure you're logged in: docker login" + exit 1 + fi + + echo "" + echo "🎉 Successfully built and pushed:" + echo " 📦 $DOCKER_USERNAME/$AGENT_NAME:$VERSION" + echo " 📦 $DOCKER_USERNAME/$AGENT_NAME:latest" + echo "" + echo "Next steps:" + echo " 1. Update your pcc-deploy.toml with the image name" + echo " 2. Run: pcc deploy" +} + +# Run main function +main "$@"