docker-build-push.sh 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/bash
  2. set -e
  3. # Configuration
  4. IMAGE_NAME="ghcr.io/hkuds/lightrag"
  5. DOCKERFILE="Dockerfile"
  6. TAG="latest"
  7. # Get version from git tags
  8. VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "dev")
  9. echo "=================================="
  10. echo " Multi-Architecture Docker Build"
  11. echo "=================================="
  12. echo "Image: ${IMAGE_NAME}:${TAG}"
  13. echo "Version: ${VERSION}"
  14. echo "Platforms: linux/amd64, linux/arm64"
  15. echo "=================================="
  16. echo ""
  17. # Check Docker login status (skip if CR_PAT is set for CI/CD)
  18. if [ -z "$CR_PAT" ]; then
  19. if ! docker info 2>/dev/null | grep -q "Username"; then
  20. echo "⚠️ Warning: Not logged in to Docker registry"
  21. echo "Please login first: docker login ghcr.io"
  22. echo "Or set CR_PAT environment variable for automated login"
  23. echo ""
  24. read -p "Continue anyway? (y/n) " -n 1 -r
  25. echo
  26. if [[ ! $REPLY =~ ^[Yy]$ ]]; then
  27. exit 1
  28. fi
  29. fi
  30. else
  31. echo "Using CR_PAT environment variable for authentication"
  32. fi
  33. # Check if buildx builder exists, create if not
  34. if ! docker buildx ls | grep -q "desktop-linux"; then
  35. echo "Creating buildx builder..."
  36. docker buildx create --name desktop-linux --use
  37. docker buildx inspect --bootstrap
  38. else
  39. echo "Using existing buildx builder: desktop-linux"
  40. docker buildx use desktop-linux
  41. fi
  42. echo ""
  43. echo "Building and pushing multi-architecture image..."
  44. echo ""
  45. # Build and push
  46. docker buildx build \
  47. --platform linux/amd64,linux/arm64 \
  48. --file ${DOCKERFILE} \
  49. --tag ${IMAGE_NAME}:${TAG} \
  50. --tag ${IMAGE_NAME}:${VERSION} \
  51. --push \
  52. .
  53. echo ""
  54. echo "✓ Build and push complete!"
  55. echo ""
  56. echo "Images pushed:"
  57. echo " - ${IMAGE_NAME}:${TAG}"
  58. echo " - ${IMAGE_NAME}:${VERSION}"
  59. echo ""
  60. echo "Verifying multi-architecture manifest..."
  61. echo ""
  62. # Verify
  63. docker buildx imagetools inspect ${IMAGE_NAME}:${TAG}
  64. echo ""
  65. echo "✓ Verification complete!"
  66. echo ""
  67. echo "Pull with: docker pull ${IMAGE_NAME}:${TAG}"