build.sh 1.7 KB

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