build-api-image.sh 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/env bash
  2. set -eo pipefail
  3. SHA=$(git rev-parse HEAD)
  4. REPO_NAME=langgenius/dify
  5. API_REPO_NAME="${REPO_NAME}-api"
  6. if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
  7. REFSPEC=$(echo "${GITHUB_HEAD_REF}" | sed 's/[^a-zA-Z0-9]/-/g' | head -c 40)
  8. PR_NUM=$(echo "${GITHUB_REF}" | sed 's:refs/pull/::' | sed 's:/merge::')
  9. LATEST_TAG="pr-${PR_NUM}"
  10. CACHE_FROM_TAG="latest"
  11. elif [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
  12. REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/tags/::' | head -c 40)
  13. LATEST_TAG="${REFSPEC}"
  14. CACHE_FROM_TAG="latest"
  15. else
  16. REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/heads/::' | sed 's/[^a-zA-Z0-9]/-/g' | head -c 40)
  17. LATEST_TAG="${REFSPEC}"
  18. CACHE_FROM_TAG="${REFSPEC}"
  19. fi
  20. if [[ "${REFSPEC}" == "main" ]]; then
  21. LATEST_TAG="latest"
  22. CACHE_FROM_TAG="latest"
  23. fi
  24. echo "Pulling cache image ${API_REPO_NAME}:${CACHE_FROM_TAG}"
  25. if docker pull "${API_REPO_NAME}:${CACHE_FROM_TAG}"; then
  26. API_CACHE_FROM_SCRIPT="--cache-from ${API_REPO_NAME}:${CACHE_FROM_TAG}"
  27. else
  28. echo "WARNING: Failed to pull ${API_REPO_NAME}:${CACHE_FROM_TAG}, disable build image cache."
  29. API_CACHE_FROM_SCRIPT=""
  30. fi
  31. cat<<EOF
  32. Rolling with tags:
  33. - ${API_REPO_NAME}:${SHA}
  34. - ${API_REPO_NAME}:${REFSPEC}
  35. - ${API_REPO_NAME}:${LATEST_TAG}
  36. EOF
  37. #
  38. # Build image
  39. #
  40. cd api
  41. docker build \
  42. ${API_CACHE_FROM_SCRIPT} \
  43. --build-arg COMMIT_SHA=${SHA} \
  44. -t "${API_REPO_NAME}:${SHA}" \
  45. -t "${API_REPO_NAME}:${REFSPEC}" \
  46. -t "${API_REPO_NAME}:${LATEST_TAG}" \
  47. --label "sha=${SHA}" \
  48. --label "built_at=$(date)" \
  49. --label "build_actor=${GITHUB_ACTOR}" \
  50. .
  51. # push
  52. docker push --all-tags "${API_REPO_NAME}"