build.sh 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/bin/bash
  2. set -eo pipefail
  3. image_name=$1
  4. org_name=$2
  5. push=0
  6. if [[ $3 == "--push" ]]; then
  7. push=1
  8. fi
  9. echo -e "Building: $image_name"
  10. tags=(latest)
  11. if [[ -n $GITHUB_REF_NAME ]]; then
  12. # check if ref name is a version number
  13. if [[ $GITHUB_REF_NAME =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  14. major_version=$(echo $GITHUB_REF_NAME | cut -d. -f1)
  15. minor_version=$(echo $GITHUB_REF_NAME | cut -d. -f1,2)
  16. tags+=($major_version $minor_version)
  17. fi
  18. sanitized=$(echo $GITHUB_REF_NAME | sed 's/[^a-zA-Z0-9.-]\+/-/g')
  19. tags+=($sanitized)
  20. fi
  21. echo "Tags: ${tags[@]}"
  22. dir=./containers/$image_name
  23. if [ ! -f $dir/Dockerfile ]; then
  24. echo "No Dockerfile found"
  25. exit 1
  26. fi
  27. if [ ! -f $dir/config.sh ]; then
  28. echo "No config.sh found for Dockerfile"
  29. exit 1
  30. fi
  31. source $dir/config.sh
  32. if [[ -n "$org_name" ]]; then
  33. DOCKER_ORG="$org_name"
  34. fi
  35. DOCKER_REPOSITORY=$DOCKER_REGISTRY/$DOCKER_ORG/$DOCKER_IMAGE
  36. echo "Repo: $DOCKER_REPOSITORY"
  37. echo "Base dir: $DOCKER_BASE_DIR"
  38. #docker pull $DOCKER_REPOSITORY:main || true # try to get any cached layers
  39. args=""
  40. for tag in ${tags[@]}; do
  41. args+=" -t $DOCKER_REPOSITORY:$tag"
  42. done
  43. if [[ $push -eq 1 ]]; then
  44. args+=" --push"
  45. fi
  46. docker buildx build \
  47. $args \
  48. --platform linux/amd64,linux/arm64 \
  49. -f $dir/Dockerfile $DOCKER_BASE_DIR