cross_build.sh 876 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/bin/bash
  2. set -euo pipefail
  3. get_app() {
  4. mix run --no-start -e "Mix.Project.config[:app] |> IO.puts" | tail -1
  5. }
  6. get_version() {
  7. mix run --no-start -e "Mix.Project.config[:version] |> IO.puts" | tail -1
  8. }
  9. APP_NAME=`get_app`
  10. APP_VERSION=`get_version`
  11. OS_VERSION=${OS_VERSION?not set}
  12. MIX_ENV=${MIX_ENV-prod}
  13. ROOT_DIR=`pwd`
  14. SOURCE_DIR=$ROOT_DIR
  15. BUILD_DIR=$ROOT_DIR/priv/build/
  16. DOCKER_DIR=$BUILD_DIR/$OS_VERSION
  17. DOCKER_IMAGE_VERSION=`echo $APP_VERSION | sed "s#+#-#"`
  18. DOCKER_IMAGE_TAG=$APP_NAME-$OS_VERSION:$DOCKER_IMAGE_VERSION
  19. build_image() {
  20. docker build -t $DOCKER_IMAGE_TAG $DOCKER_DIR
  21. }
  22. build_binary() {
  23. docker run -e SOURCE_DIR=/app \
  24. -e MIX_ENV=$MIX_ENV \
  25. -e DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG \
  26. -v $ROOT_DIR:/app \
  27. $DOCKER_IMAGE_TAG \
  28. /app/priv/build/build.sh
  29. }
  30. build_image
  31. build_binary