diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b639c4569c..8b9c37d688b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,11 +4,28 @@ on: push: branches: - main + - '**' pull_request: branches: - main jobs: + test-no-head-sha: + runs-on: ubuntu-latest + name: Test changed-files missing head sha + steps: + - name: Checkout to branch + uses: actions/checkout@v2 + + - name: Run changed-files with defaults + id: changed-files + continue-on-error: true + uses: ./ + + - name: Show output + run: | + echo "${{ toJSON(steps.changed-files.outputs) }}" + test: runs-on: ubuntu-latest name: Test changed-files diff --git a/entrypoint.sh b/entrypoint.sh index 161a3817ca8..6789ecf6587 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -7,90 +7,92 @@ git remote set-url origin "https://${INPUT_TOKEN}@github.com/${GITHUB_REPOSITORY echo "Getting head sha..." if [[ -z $GITHUB_BASE_REF ]]; then - HEAD_SHA=$(git rev-parse HEAD^1 || true) + HEAD_SHA=$(git rev-parse HEAD^1 2>&1) && exit_status=$? || exit_status=$? else TARGET_BRANCH=${GITHUB_BASE_REF} git fetch --depth=1 origin "${TARGET_BRANCH}":"${TARGET_BRANCH}" - HEAD_SHA=$(git rev-parse "${TARGET_BRANCH}" || true) + HEAD_SHA=$(git rev-parse "${TARGET_BRANCH}" 2>&1) && exit_status=$? || exit_status=$? fi -if [[ -z $HEAD_SHA ]]; then - echo "::warning::Unable to determine the head sha: $HEAD_SHA." +if [[ $exit_status -ne 0 ]]; then + echo "::warning::Unable to determine the head sha" echo "::warning::You seem to be missing 'fetch-depth: 0' or 'fetch-depth: 2'" exit 1 +fi + +echo "Using head sha: $HEAD_SHA..." + +if [[ -z "$INPUT_FILES" ]]; then + echo "Getting diff..." + ADDED=$(git diff --diff-filter=A --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + COPIED=$(git diff --diff-filter=C --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + DELETED=$(git diff --diff-filter=D --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + MODIFIED=$(git diff --diff-filter=M --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + RENAMED=$(git diff --diff-filter=R --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + CHANGED=$(git diff --diff-filter=T --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + UNMERGED=$(git diff --diff-filter=U --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + UNKNOWN=$(git diff --diff-filter=X --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + ALL_CHANGED=$(git diff --diff-filter="*ACDMRTUX" --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") + ALL_MODIFIED_FILES=$(git diff --diff-filter="ACM" --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") else - echo "Using head sha: $HEAD_SHA..." - if [[ -z "$INPUT_FILES" ]]; then - echo "Getting diff..." - ADDED=$(git diff --diff-filter=A --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - COPIED=$(git diff --diff-filter=C --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - DELETED=$(git diff --diff-filter=D --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - MODIFIED=$(git diff --diff-filter=M --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - RENAMED=$(git diff --diff-filter=R --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - CHANGED=$(git diff --diff-filter=T --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - UNMERGED=$(git diff --diff-filter=U --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - UNKNOWN=$(git diff --diff-filter=X --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - ALL_CHANGED=$(git diff --diff-filter="*ACDMRTUX" --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - ALL_MODIFIED_FILES=$(git diff --diff-filter="ACM" --name-only "$HEAD_SHA" | tr "\n" "$INPUT_SEPARATOR" | sed -E "s/($INPUT_SEPARATOR)$//") - else - ADDED_ARRAY=() - COPIED_ARRAY=() - DELETED_ARRAY=() - MODIFIED_ARRAY=() - RENAMED_ARRAY=() - CHANGED_ARRAY=() - UNMERGED_ARRAY=() - UNKNOWN_ARRAY=() - ALL_CHANGED_ARRAY=() - ALL_MODIFIED_FILES_ARRAY=() - for path in ${INPUT_FILES} - do - echo "Checking for file changes: \"${path}\"..." - IFS=" " - # shellcheck disable=SC2207 - ADDED_ARRAY+=($(git diff --diff-filter=A --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - COPIED_ARRAY+=($(git diff --diff-filter=C --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - DELETED_ARRAY+=($(git diff --diff-filter=D --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - MODIFIED_ARRAY+=($(git diff --diff-filter=M --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - RENAMED_ARRAY+=($(git diff --diff-filter=R --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - CHANGED_ARRAY+=($(git diff --diff-filter=T --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - UNMERGED_ARRAY+=($(git diff --diff-filter=U --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - UNKNOWN_ARRAY+=($(git diff --diff-filter=X --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - ALL_CHANGED_ARRAY+=($(git diff --diff-filter="*ACDMRTUX" --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - # shellcheck disable=SC2207 - ALL_MODIFIED_FILES_ARRAY+=($(git diff --diff-filter="ACM" --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) - done + ADDED_ARRAY=() + COPIED_ARRAY=() + DELETED_ARRAY=() + MODIFIED_ARRAY=() + RENAMED_ARRAY=() + CHANGED_ARRAY=() + UNMERGED_ARRAY=() + UNKNOWN_ARRAY=() + ALL_CHANGED_ARRAY=() + ALL_MODIFIED_FILES_ARRAY=() + for path in ${INPUT_FILES} + do + echo "Checking for file changes: \"${path}\"..." + IFS=" " + # shellcheck disable=SC2207 + ADDED_ARRAY+=($(git diff --diff-filter=A --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + COPIED_ARRAY+=($(git diff --diff-filter=C --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + DELETED_ARRAY+=($(git diff --diff-filter=D --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + MODIFIED_ARRAY+=($(git diff --diff-filter=M --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + RENAMED_ARRAY+=($(git diff --diff-filter=R --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + CHANGED_ARRAY+=($(git diff --diff-filter=T --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + UNMERGED_ARRAY+=($(git diff --diff-filter=U --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + UNKNOWN_ARRAY+=($(git diff --diff-filter=X --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + ALL_CHANGED_ARRAY+=($(git diff --diff-filter="*ACDMRTUX" --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + # shellcheck disable=SC2207 + ALL_MODIFIED_FILES_ARRAY+=($(git diff --diff-filter="ACM" --name-only "$HEAD_SHA" | grep -E "(${path})" | xargs || true)) + done - # shellcheck disable=SC2001 - ADDED=$(echo "${ADDED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - COPIED=$(echo "${COPIED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - DELETED=$(echo "${DELETED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - MODIFIED=$(echo "${MODIFIED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - RENAMED=$(echo "${RENAMED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - CHANGED=$(echo "${CHANGED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - UNMERGED=$(echo "${UNMERGED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - UNKNOWN=$(echo "${UNKNOWN_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - ALL_CHANGED=$(echo "${ALL_CHANGED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - # shellcheck disable=SC2001 - ALL_MODIFIED_FILES=$(echo "${ALL_MODIFIED_FILES_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') - fi + # shellcheck disable=SC2001 + ADDED=$(echo "${ADDED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + COPIED=$(echo "${COPIED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + DELETED=$(echo "${DELETED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + MODIFIED=$(echo "${MODIFIED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + RENAMED=$(echo "${RENAMED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + CHANGED=$(echo "${CHANGED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + UNMERGED=$(echo "${UNMERGED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + UNKNOWN=$(echo "${UNKNOWN_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + ALL_CHANGED=$(echo "${ALL_CHANGED_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') + # shellcheck disable=SC2001 + ALL_MODIFIED_FILES=$(echo "${ALL_MODIFIED_FILES_ARRAY[*]}" | sed 's/ */'"$INPUT_SEPARATOR"'/g') fi + echo "Added files: $ADDED" echo "Copied files: $COPIED" echo "Deleted files: $DELETED"