build.sh 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/bin/bash
  2. set -eo pipefail
  3. image_name=$1
  4. org_name=$2
  5. platform=$3
  6. echo "Building: $image_name for platform: $platform"
  7. tags=()
  8. OPENHANDS_BUILD_VERSION="dev"
  9. if [[ -n $GITHUB_REF_NAME ]]; then
  10. # check if ref name is a version number
  11. if [[ $GITHUB_REF_NAME =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  12. major_version=$(echo "$GITHUB_REF_NAME" | cut -d. -f1)
  13. minor_version=$(echo "$GITHUB_REF_NAME" | cut -d. -f1,2)
  14. tags+=("$major_version" "$minor_version")
  15. tags+=("latest")
  16. fi
  17. sanitized=$(echo "$GITHUB_REF_NAME" | sed 's/[^a-zA-Z0-9.-]\+/-/g')
  18. OPENHANDS_BUILD_VERSION=$sanitized
  19. tag=$(echo "$sanitized" | tr '[:upper:]' '[:lower:]') # lower case is required in tagging
  20. tags+=("$tag")
  21. fi
  22. echo "Tags: ${tags[@]}"
  23. if [[ "$image_name" == "openhands" ]]; then
  24. dir="./containers/app"
  25. elif [[ "$image_name" == "runtime" ]]; then
  26. dir="./containers/runtime"
  27. else
  28. dir="./containers/$image_name"
  29. fi
  30. if [[ (! -f "$dir/Dockerfile") && "$image_name" != "runtime" ]]; then
  31. # Allow runtime to be built without a Dockerfile
  32. echo "No Dockerfile found"
  33. exit 1
  34. fi
  35. if [[ ! -f "$dir/config.sh" ]]; then
  36. echo "No config.sh found for Dockerfile"
  37. exit 1
  38. fi
  39. source "$dir/config.sh"
  40. if [[ -n "$org_name" ]]; then
  41. DOCKER_ORG="$org_name"
  42. fi
  43. # If $DOCKER_IMAGE_HASH_TAG is set, add it to the tags
  44. if [[ -n "$DOCKER_IMAGE_HASH_TAG" ]]; then
  45. tags+=("$DOCKER_IMAGE_HASH_TAG")
  46. fi
  47. # If $DOCKER_IMAGE_TAG is set, add it to the tags
  48. if [[ -n "$DOCKER_IMAGE_TAG" ]]; then
  49. tags+=("$DOCKER_IMAGE_TAG")
  50. fi
  51. DOCKER_REPOSITORY="$DOCKER_REGISTRY/$DOCKER_ORG/$DOCKER_IMAGE"
  52. DOCKER_REPOSITORY=${DOCKER_REPOSITORY,,} # lowercase
  53. echo "Repo: $DOCKER_REPOSITORY"
  54. echo "Base dir: $DOCKER_BASE_DIR"
  55. args=""
  56. for tag in "${tags[@]}"; do
  57. args+=" -t $DOCKER_REPOSITORY:$tag"
  58. done
  59. output_image="/tmp/${image_name}_${tags[-1]}_${platform}.tar"
  60. echo "Output image will be saved to: $output_image"
  61. docker buildx build \
  62. $args \
  63. --build-arg OPENHANDS_BUILD_VERSION="$OPENHANDS_BUILD_VERSION" \
  64. --platform linux/$platform \
  65. --provenance=false \
  66. -f "$dir/Dockerfile" \
  67. --output type=docker,dest="$output_image" \
  68. "$DOCKER_BASE_DIR"
  69. echo "${tags[*]}" > tags.txt