run.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/bash
  2. set -eo pipefail
  3. dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
  4. image="$1"
  5. dbImage='mysql:8.0'
  6. # ensure the dbImage is ready and available
  7. if ! docker image inspect "$dbImage" &> /dev/null; then
  8. docker pull "$dbImage" > /dev/null
  9. fi
  10. # Create an instance of the container-under-test
  11. mysqlCid="$(docker run -d \
  12. -e MYSQL_RANDOM_ROOT_PASSWORD=true \
  13. -e MYSQL_DATABASE=monica \
  14. -e MYSQL_USER=homestead \
  15. -e MYSQL_PASSWORD=secret \
  16. "$dbImage")"
  17. trap "docker rm -vf $mysqlCid > /dev/null" EXIT
  18. cid="$(docker run -d \
  19. --link "$mysqlCid":mysql \
  20. -e DB_HOST=mysql \
  21. "$image")"
  22. trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT
  23. _artisan() {
  24. docker exec "$cid" php artisan "$@"
  25. }
  26. # returns success when all database migrations are finished
  27. _migrate_done() {
  28. local status
  29. status="$(_artisan migrate:status)"
  30. if grep -q ' Yes ' <<<"$status" && ! grep -q ' No ' <<<"$status"; then
  31. return 0
  32. fi
  33. return 1
  34. }
  35. # check artisan command for specific output; print and error when not found
  36. _artisan_test() {
  37. local match="$1"; shift
  38. output="$(_artisan "$@")"
  39. if ! grep -iq "$match" <<<"$output"; then
  40. echo "Match: '$match' not found in: $output"
  41. return 1
  42. fi
  43. }
  44. # Give some time to install
  45. . "$dir/../../retry.sh" --tries 30 '_migrate_done'
  46. # Check if installation is complete
  47. _artisan monica:getversion > /dev/null
  48. . "$dir/../../retry.sh" --tries 5 -- _artisan_test 'No scheduled commands are ready to run.' schedule:run