elvis-check.sh 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/env bash
  2. ## This script checks style of changed files.
  3. ## Expect argument 1 to be the git compare base.
  4. set -euo pipefail
  5. ELVIS_VERSION='1.0.0-emqx-2'
  6. base="${1:-}"
  7. if [ "${base}" = "" ]; then
  8. echo "Usage $0 <git-compare-base-ref>"
  9. exit 1
  10. fi
  11. elvis_version="${2:-$ELVIS_VERSION}"
  12. echo "elvis -v: $elvis_version"
  13. echo "git diff base: $base"
  14. if [ ! -f ./elvis ] || [ "$(./elvis -v | grep -oE '[1-9]+\.[0-9]+\.[0-9]+\-emqx-[0-9]+')" != "$elvis_version" ]; then
  15. curl --silent --show-error -fLO "https://github.com/emqx/elvis/releases/download/$elvis_version/elvis"
  16. chmod +x ./elvis
  17. fi
  18. if [[ "$base" =~ [0-9a-f]{8,40} ]]; then
  19. # base is a commit sha1
  20. compare_base="$base"
  21. else
  22. if [[ $CI == true ]];then
  23. remote="$(git remote -v | grep -E "github\.com(.|/)$GITHUB_REPOSITORY" | grep fetch | awk '{print $1}')"
  24. else
  25. remote="$(git remote -v | grep -E 'github\.com(.|/)emqx' | grep fetch | awk '{print $1}')"
  26. fi
  27. git fetch "$remote" "$base"
  28. compare_base="$remote/$base"
  29. fi
  30. git_diff() {
  31. git diff --name-only --diff-filter=ACMRTUXB "$compare_base"...HEAD
  32. }
  33. bad_file_count=0
  34. for file in $(git_diff); do
  35. if [ ! -f "$file" ]; then
  36. # file is deleted, skip
  37. continue
  38. fi
  39. if [[ $file != *.erl ]]; then
  40. # not .erl file
  41. continue
  42. fi
  43. if ! ./elvis rock "$file" -c elvis.config; then
  44. bad_file_count=$(( bad_file_count + 1))
  45. fi
  46. done
  47. if [ $bad_file_count -gt 0 ]; then
  48. echo "elvis: $bad_file_count errors"
  49. exit 1
  50. fi