Make the temporary build script more flexible for cross-architecture builds
This commit is contained in:
@@ -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:**
|
||||
|
||||
|
||||
@@ -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"
|
||||
# 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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user