1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- name: Check For Changed Files
- description: Checks for changed files compared to specific git reference and glob expression
- inputs:
- baseRef:
- description: Git reference to check against
- required: false
- ref:
- description: Git reference to check with
- required: false
- default: HEAD
- checkGlob:
- description: Glob expression to limit check to specific files
- required: false
- useFallback:
- description: Use fallback compare against prior commit
- required: false
- default: 'true'
- diffFilter:
- description: git diff-filter string to use
- required: false
- default: ''
- outputs:
- hasChangedFiles:
- value: ${{ steps.checks.outputs.hasChangedFiles }}
- description: True if specified files were changed in comparison to specified git reference
- changedFiles:
- value: ${{ steps.checks.outputs.changedFiles }}
- description: List of changed files
- runs:
- using: composite
- steps:
- - name: Check For Changed Files ✅
- shell: bash
- id: checks
- env:
- GIT_BASE_REF: ${{ inputs.baseRef }}
- GIT_REF: ${{ inputs.ref }}
- GITHUB_EVENT_FORCED: ${{ github.event.forced }}
- GITHUB_REF_BEFORE: ${{ github.event.before }}
- USE_FALLBACK: ${{ inputs.useFallback }}
- DIFF_FILTER: ${{ inputs.diffFilter }}
- run: |
- : Check for Changed Files ✅
- if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
- shopt -s extglob
- shopt -s dotglob
- if [[ "${GIT_BASE_REF}" ]]; then
- if ! git cat-file -e "${GIT_BASE_REF}" &> /dev/null; then
- echo "::warning::Provided base reference ${GIT_BASE_REF} is invalid"
- if [[ "${USE_FALLBACK}" == 'true' ]]; then
- GIT_BASE_REF='HEAD~1'
- fi
- fi
- else
- if ! git cat-file -e ${GITHUB_REF_BEFORE} &> /dev/null; then
- GITHUB_REF_BEFORE='4b825dc642cb6eb9a060e54bf8d69288fbee4904'
- fi
- GIT_BASE_REF='HEAD~1'
- case "${GITHUB_EVENT_NAME}" in
- pull_request) GIT_BASE_REF="origin/${GITHUB_BASE_REF}" ;;
- push) if [[ "${GITHUB_EVENT_FORCED}" != 'true' ]]; then GIT_BASE_REF="${GITHUB_REF_BEFORE}"; fi ;;
- *) ;;
- esac
- fi
- changes=($(git diff --name-only --diff-filter="${DIFF_FILTER}" ${GIT_BASE_REF} ${GIT_REF} -- ${{ inputs.checkGlob }}))
- if (( ${#changes[@]} )); then
- file_string="${changes[*]}"
- echo "hasChangedFiles=true" >> $GITHUB_OUTPUT
- echo "changedFiles=[\"${file_string// /\",\"}\"]" >> $GITHUB_OUTPUT
- else
- echo "hasChangedFiles=false" >> $GITHUB_OUTPUT
- echo "changedFiles=[]" >> GITHUB_OUTPUT
- fi
|