diff --git a/.github/workflows/elvis_lint.yaml b/.github/workflows/code_style_check.yaml similarity index 52% rename from .github/workflows/elvis_lint.yaml rename to .github/workflows/code_style_check.yaml index 1fdbeba87..959512c20 100644 --- a/.github/workflows/elvis_lint.yaml +++ b/.github/workflows/code_style_check.yaml @@ -1,4 +1,4 @@ -name: Elvis Linter +name: Code style check on: [pull_request] @@ -7,10 +7,18 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 + with: + fetch-depth: 1000 - name: Set git token if: endsWith(github.repository, 'enterprise') run: | echo "https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com" > $HOME/.git-credentials git config --global credential.helper store - - run: | - ./scripts/elvis-check.sh $GITHUB_BASE_REF + - name: Run elvis check + run: | + set -e + if [ -f EMQX_ENTERPRISE ]; then + ./scripts/elvis-check.sh $GITHUB_BASE_REF emqx-enterprise + else + ./scripts/elvis-check.sh $GITHUB_BASE_REF emqx + fi diff --git a/scripts/elvis-check.sh b/scripts/elvis-check.sh index 5fe482865..264200d6b 100755 --- a/scripts/elvis-check.sh +++ b/scripts/elvis-check.sh @@ -5,16 +5,16 @@ set -euo pipefail -ELVIS_VERSION='1.0.0-emqx-2' +elvis_version='1.0.0-emqx-2' base="${1:-}" +repo="${2:-emqx/emqx}" +REPO="${GITHUB_REPOSITORY:-${repo}}" if [ "${base}" = "" ]; then echo "Usage $0 " exit 1 fi -elvis_version="${2:-$ELVIS_VERSION}" - echo "elvis -v: $elvis_version" echo "git diff base: $base" @@ -27,11 +27,7 @@ if [[ "$base" =~ [0-9a-f]{8,40} ]]; then # base is a commit sha1 compare_base="$base" else - if [[ $CI == true ]];then - remote="$(git remote -v | grep -E "github\.com(.|/)$GITHUB_REPOSITORY" | grep fetch | awk '{print $1}')" - else - remote="$(git remote -v | grep -E 'github\.com(.|/)emqx' | grep fetch | awk '{print $1}')" - fi + remote="$(git remote -v | grep -E "github\.com(:|/)$REPO((\.git)|(\s))" | grep fetch | awk '{print $1}')" git fetch "$remote" "$base" compare_base="$remote/$base" fi @@ -58,3 +54,31 @@ if [ $bad_file_count -gt 0 ]; then echo "elvis: $bad_file_count errors" exit 1 fi + +### now check new-line at EOF for changed files + +nl_at_eof() { + local file="$1" + if ! [ -f "$file" ]; then + return + fi + case "$file" in + *.png|*rebar3) + return + ;; + esac + local lastbyte + lastbyte="$(tail -c 1 "$file" 2>&1)" + if [ "$lastbyte" != '' ]; then + echo "$file" + return 1 + fi +} + +for file in $(git_diff); do + if ! nl_at_eof "$file"; then + bad_file_count=$(( bad_file_count + 1 )) + fi +done + +exit $bad_file_count