action.yaml 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. name: Check For Changed Files
  2. description: Checks for changed files compared to specific git reference and glob expression
  3. inputs:
  4. baseRef:
  5. description: Git reference to check against
  6. required: false
  7. ref:
  8. description: Git reference to check with
  9. required: false
  10. default: HEAD
  11. checkGlob:
  12. description: Glob expression to limit check to specific files
  13. required: false
  14. useFallback:
  15. description: Use fallback compare against prior commit
  16. required: false
  17. default: 'true'
  18. diffFilter:
  19. description: git diff-filter string to use
  20. required: false
  21. default: ''
  22. outputs:
  23. hasChangedFiles:
  24. value: ${{ steps.checks.outputs.hasChangedFiles }}
  25. description: True if specified files were changed in comparison to specified git reference
  26. changedFiles:
  27. value: ${{ steps.checks.outputs.changedFiles }}
  28. description: List of changed files
  29. runs:
  30. using: composite
  31. steps:
  32. - name: Check For Changed Files ✅
  33. shell: bash
  34. id: checks
  35. env:
  36. GIT_BASE_REF: ${{ inputs.baseRef }}
  37. GIT_REF: ${{ inputs.ref }}
  38. GITHUB_EVENT_FORCED: ${{ github.event.forced }}
  39. GITHUB_REF_BEFORE: ${{ github.event.before }}
  40. USE_FALLBACK: ${{ inputs.useFallback }}
  41. DIFF_FILTER: ${{ inputs.diffFilter }}
  42. run: |
  43. : Check for Changed Files ✅
  44. if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
  45. shopt -s extglob
  46. shopt -s dotglob
  47. if [[ "${GIT_BASE_REF}" ]]; then
  48. if ! git cat-file -e "${GIT_BASE_REF}" &> /dev/null; then
  49. echo "::warning::Provided base reference ${GIT_BASE_REF} is invalid"
  50. if [[ "${USE_FALLBACK}" == 'true' ]]; then
  51. GIT_BASE_REF='HEAD~1'
  52. fi
  53. fi
  54. else
  55. if ! git cat-file -e ${GITHUB_REF_BEFORE} &> /dev/null; then
  56. GITHUB_REF_BEFORE='4b825dc642cb6eb9a060e54bf8d69288fbee4904'
  57. fi
  58. GIT_BASE_REF='HEAD~1'
  59. case "${GITHUB_EVENT_NAME}" in
  60. pull_request) GIT_BASE_REF="origin/${GITHUB_BASE_REF}" ;;
  61. push) if [[ "${GITHUB_EVENT_FORCED}" != 'true' ]]; then GIT_BASE_REF="${GITHUB_REF_BEFORE}"; fi ;;
  62. *) ;;
  63. esac
  64. fi
  65. changes=($(git diff --name-only --diff-filter="${DIFF_FILTER}" ${GIT_BASE_REF} ${GIT_REF} -- ${{ inputs.checkGlob }}))
  66. if (( ${#changes[@]} )); then
  67. file_string="${changes[*]}"
  68. echo "hasChangedFiles=true" >> $GITHUB_OUTPUT
  69. echo "changedFiles=[\"${file_string// /\",\"}\"]" >> $GITHUB_OUTPUT
  70. else
  71. echo "hasChangedFiles=false" >> $GITHUB_OUTPUT
  72. echo "changedFiles=[]" >> GITHUB_OUTPUT
  73. fi