diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 2c0d2b682..bb3327be9 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -14,8 +14,36 @@ jobs: name: RuboCop runs-on: ubuntu-latest steps: - - name: Checkout sources - uses: actions/checkout@v4 + - name: 'Checkout PR branch (with test merge-commit)' + uses: actions/checkout@v3 + with: + fetch-depth: 2 + - name: 'Get a list of changed files to process' + run: git diff-tree --name-only --diff-filter 'AM' -r HEAD^1 HEAD + + - name: Determine target branch + run: | + target_branch=${{ github.base_ref || 'mampf-next' }} + echo "Target branch is: $target_branch" + echo "TARGET_BRANCH=$target_branch" >> $GITHUB_ENV + + # for the " + 1", see: + # https://github.com/actions/checkout/issues/552#issuecomment-1167086216 + - name: Calculate fetch depth + run: | + depth=$(( ${{ github.pull_request.commits }} + 1 )) + echo "Fetch depth is: $depth" + echo "PR_FETCH_DEPTH=$depth" >> $GITHUB_ENV + + - name: 'Checkout PR branch and all PR commits' + uses: actions/checkout@v3 + with: + ref: ${{ github.pull_request.head.ref }} + fetch-depth: ${{ env.PR_FETCH_DEPTH }} + + - name: Fetch target branch with enough history for a common merge-base commit + run: | + git fetch origin ${{ github.pull_request.base.ref }} - name: Set up Ruby 3 uses: ruby/setup-ruby@v1 @@ -28,28 +56,30 @@ jobs: # But in the end, one has to open a PR anyways and then the correct target # branch is identified. # TODO: rename to 'dev' when 'mampf-next' branch is renamed. - - name: Fetch target branch - run: | - targetBranch=${{ github.base_ref || 'mampf-next' }} - echo "Target branch is: $targetBranch" - git fetch origin $targetBranch:$targetBranch --depth=1 + # - name: Fetch target branch + # run: | + # targetBranch=${{ github.base_ref || 'mampf-next' }} + # echo "Target branch is: $targetBranch" + # git fetch origin $targetBranch:$targetBranch --depth=1 # adapted from https://github.com/actions/checkout/issues/520#issuecomment-1167205721 # and: https://robertfaldo.medium.com/commands-to-run-rubocop-and-specs-you-changed-in-your-branch-e6d2f2e4110b # --diff-filter=d excludes deleted files # "|| test $? = 1;" is used to ignore the exit code of grep when no files # are found matching the pattern + # For the "three dots" ... syntax, see + # https://community.atlassian.com/t5/Bitbucket-questions/Git-diff-show-different-files-than-PR-Pull-Request/qaq-p/2331786 - name: Get changed ruby files (git diff) run: | - changedFiles=$(git diff --name-only --diff-filter=d -r $targetBranch | grep '\.rb$' || test $? = 1;) + changedFiles=$(git diff --name-only --diff-filter=d -r $targetBranch...HEAD | grep '\.rb$' || test $? = 1;) printf "Changed ruby files: \n$changedFiles" echo "CHANGED_FILES=\"$changedFiles\"" >> $GITHUB_ENV # See RuboCop command line flags here: # https://docs.rubocop.org/rubocop/usage/basic_usage.html#command-line-flags - - name: Run RuboCop - if: env.CHANGED_FILES != '' - run: $CHANGED_FILES | xargs bundle exec rubocop + # - name: Run RuboCop + # if: env.CHANGED_FILES != '' + # run: $CHANGED_FILES | xargs bundle exec rubocop # eslint: