build.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. OPEN_DEVIN_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. fi
  16. sanitized=$(echo "$GITHUB_REF_NAME" | sed 's/[^a-zA-Z0-9.-]\+/-/g')
  17. OPEN_DEVIN_BUILD_VERSION=$sanitized
  18. tag=$(echo "$sanitized" | tr '[:upper:]' '[:lower:]') # lower case is required in tagging
  19. tags+=("$tag")
  20. fi
  21. echo "Tags: ${tags[@]}"
  22. if [[ "$image_name" == "opendevin" ]]; then
  23. dir="./containers/app"
  24. else
  25. dir="./containers/$image_name"
  26. fi
  27. if [[ ! -f "$dir/Dockerfile" ]]; then
  28. echo "No Dockerfile found"
  29. exit 1
  30. fi
  31. if [[ ! -f "$dir/config.sh" ]]; then
  32. echo "No config.sh found for Dockerfile"
  33. exit 1
  34. fi
  35. source "$dir/config.sh"
  36. if [[ -n "$org_name" ]]; then
  37. DOCKER_ORG="$org_name"
  38. fi
  39. DOCKER_REPOSITORY="$DOCKER_REGISTRY/$DOCKER_ORG/$DOCKER_IMAGE"
  40. DOCKER_REPOSITORY=${DOCKER_REPOSITORY,,} # lowercase
  41. echo "Repo: $DOCKER_REPOSITORY"
  42. echo "Base dir: $DOCKER_BASE_DIR"
  43. args=""
  44. for tag in "${tags[@]}"; do
  45. args+=" -t $DOCKER_REPOSITORY:$tag"
  46. done
  47. output_image="/tmp/${image_name}_image_${platform}.tar"
  48. docker buildx build \
  49. $args \
  50. --build-arg OPEN_DEVIN_BUILD_VERSION="$OPEN_DEVIN_BUILD_VERSION" \
  51. --platform linux/$platform \
  52. --provenance=false \
  53. -f "$dir/Dockerfile" \
  54. --output type=docker,dest="$output_image" \
  55. "$DOCKER_BASE_DIR"
  56. echo "${tags[*]}" > tags.txt