2021-05-21 08:39:56 -04:00
#!/usr/bin/env bash
set -e
2022-02-17 00:12:45 -05:00
echo "::warning::Legacy version detected, please switch to the recommended v10.x. See https://github.com/tj-actions/changed-files#versioning for more information"
2021-06-26 10:20:56 -04:00
echo "::group::changed-files"
2021-08-17 20:03:07 -04:00
git remote add temp_changed_files " https:// ${ INPUT_TOKEN } @github.com/ ${ GITHUB_REPOSITORY } "
2021-05-21 08:39:56 -04:00
2021-06-09 15:52:54 -06:00
echo "Getting HEAD info..."
2021-07-14 23:57:17 +03:00
if [ [ -z $INPUT_SHA ] ] ; then
2021-07-17 11:46:59 -04:00
CURRENT_SHA = $( git rev-parse HEAD 2>& 1) && exit_status = $? || exit_status = $?
2021-06-09 15:52:54 -06:00
else
2021-07-17 11:46:59 -04:00
CURRENT_SHA = $INPUT_SHA
2021-06-09 15:52:54 -06:00
fi
2021-05-21 08:39:56 -04:00
2021-06-09 18:11:27 -04:00
if [ [ $exit_status -ne 0 ] ] ; then
echo "::warning::Unable to determine the current head sha"
exit 1
fi
2021-05-21 08:39:56 -04:00
if [ [ -z $GITHUB_BASE_REF ] ] ; then
2021-07-17 11:46:59 -04:00
if [ [ -z $INPUT_BASE_SHA ] ] ; then
PREVIOUS_SHA = $( git rev-parse HEAD^1 2>& 1) && exit_status = $? || exit_status = $?
else
PREVIOUS_SHA = $INPUT_BASE_SHA
fi
2021-06-25 14:58:59 -04:00
TARGET_BRANCH = ${ GITHUB_REF /refs \/ heads \/ / }
CURRENT_BRANCH = $TARGET_BRANCH
2021-06-09 18:11:27 -04:00
if [ [ $exit_status -ne 0 ] ] ; then
echo "::warning::Unable to determine the previous commit sha"
echo "::warning::You seem to be missing 'fetch-depth: 0' or 'fetch-depth: 2'. See https://github.com/tj-actions/changed-files#usage"
exit 1
fi
2021-05-21 08:39:56 -04:00
else
2021-07-17 11:46:59 -04:00
TARGET_BRANCH = $GITHUB_BASE_REF
2021-06-25 14:58:59 -04:00
CURRENT_BRANCH = $GITHUB_HEAD_REF
2021-08-17 20:03:07 -04:00
git fetch temp_changed_files " ${ TARGET_BRANCH } " :" ${ TARGET_BRANCH } "
2021-07-17 11:46:59 -04:00
if [ [ -z $INPUT_BASE_SHA ] ] ; then
PREVIOUS_SHA = $( git rev-parse " ${ TARGET_BRANCH } " 2>& 1) && exit_status = $? || exit_status = $?
else
PREVIOUS_SHA = $INPUT_BASE_SHA
fi
2021-06-09 18:11:27 -04:00
if [ [ $exit_status -ne 0 ] ] ; then
echo " ::warning::Unable to determine the base ref sha for ${ TARGET_BRANCH } "
exit 1
fi
2021-05-21 08:39:56 -04:00
fi
2021-07-17 11:46:59 -04:00
echo " Retrieving changes between $PREVIOUS_SHA ( $TARGET_BRANCH ) → $CURRENT_SHA ( $CURRENT_BRANCH ) "
2021-05-25 00:30:19 -04:00
2021-07-17 10:51:08 -04:00
UNIQUE_FILES = $( echo " $INPUT_FILES " | tr ' ' '\n' | sort -u | xargs)
if [ [ -z " $UNIQUE_FILES " ] ] ; then
2021-05-25 00:30:19 -04:00
echo "Getting diff..."
2021-07-17 11:46:59 -04:00
ADDED = $( git diff --diff-filter= A --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
COPIED = $( git diff --diff-filter= C --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
DELETED = $( git diff --diff-filter= D --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
MODIFIED = $( git diff --diff-filter= M --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
RENAMED = $( git diff --diff-filter= R --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
TYPE_CHANGED = $( git diff --diff-filter= T --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
UNMERGED = $( git diff --diff-filter= U --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
UNKNOWN = $( git diff --diff-filter= X --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
ALL_CHANGED = $( git diff --diff-filter= "*ACDMRTUX" --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
2021-08-09 08:57:25 -04:00
ALL_MODIFIED_FILES = $( git diff --diff-filter= "ACMR" --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | tr "\n" " $INPUT_SEPARATOR " | sed -E " s/( $INPUT_SEPARATOR ) $// " )
2021-05-21 08:39:56 -04:00
else
2021-05-25 00:30:19 -04:00
ADDED_ARRAY = ( )
COPIED_ARRAY = ( )
DELETED_ARRAY = ( )
MODIFIED_ARRAY = ( )
RENAMED_ARRAY = ( )
2021-06-18 19:28:02 -04:00
TYPE_CHANGED_ARRAY = ( )
2021-05-25 00:30:19 -04:00
UNMERGED_ARRAY = ( )
UNKNOWN_ARRAY = ( )
ALL_CHANGED_ARRAY = ( )
ALL_MODIFIED_FILES_ARRAY = ( )
2021-07-17 10:51:08 -04:00
for path in ${ UNIQUE_FILES }
2021-05-25 00:30:19 -04:00
do
echo " Checking for file changes: \" ${ path } \"... "
IFS = " "
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
ADDED_ARRAY += ( $( git diff --diff-filter= A --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
COPIED_ARRAY += ( $( git diff --diff-filter= C --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
DELETED_ARRAY += ( $( git diff --diff-filter= D --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
MODIFIED_ARRAY += ( $( git diff --diff-filter= M --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
RENAMED_ARRAY += ( $( git diff --diff-filter= R --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
TYPE_CHANGED_ARRAY += ( $( git diff --diff-filter= T --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
UNMERGED_ARRAY += ( $( git diff --diff-filter= U --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
UNKNOWN_ARRAY += ( $( git diff --diff-filter= X --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-07-17 11:46:59 -04:00
ALL_CHANGED_ARRAY += ( $( git diff --diff-filter= "*ACDMRTUX" --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2207
2021-08-09 08:57:25 -04:00
ALL_MODIFIED_FILES_ARRAY += ( $( git diff --diff-filter= "ACMR" --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " | grep -E " ( ${ path } ) " | xargs || true ) )
2021-05-25 00:30:19 -04:00
done
2021-05-21 08:39:56 -04:00
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
ADDED = $( echo " ${ ADDED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
COPIED = $( echo " ${ COPIED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
DELETED = $( echo " ${ DELETED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
MODIFIED = $( echo " ${ MODIFIED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
RENAMED = $( echo " ${ RENAMED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
TYPE_CHANGED = $( echo " ${ TYPE_CHANGED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
UNMERGED = $( echo " ${ UNMERGED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
UNKNOWN = $( echo " ${ UNKNOWN_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
ALL_CHANGED = $( echo " ${ ALL_CHANGED_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-25 00:30:19 -04:00
# shellcheck disable=SC2001
2021-08-06 06:14:50 -04:00
ALL_MODIFIED_FILES = $( echo " ${ ALL_MODIFIED_FILES_ARRAY [*] } " | sed 's/ */' " $INPUT_SEPARATOR " '/g' | tr ' ' '\n' | sort -u | xargs)
2021-05-21 08:39:56 -04:00
fi
2021-05-25 00:30:19 -04:00
2021-05-21 08:39:56 -04:00
echo " Added files: $ADDED "
echo " Copied files: $COPIED "
echo " Deleted files: $DELETED "
echo " Modified files: $MODIFIED "
echo " Renamed files: $RENAMED "
2021-06-18 19:28:02 -04:00
echo " Type Changed files: $TYPE_CHANGED "
2021-05-21 08:39:56 -04:00
echo " Unmerged files: $UNMERGED "
echo " Unknown files: $UNKNOWN "
echo " All changed files: $ALL_CHANGED "
echo " All modified files: $ALL_MODIFIED_FILES "
2021-07-17 10:51:08 -04:00
if [ [ -n " $UNIQUE_FILES " ] ] ; then
2021-05-21 08:39:56 -04:00
# shellcheck disable=SC2001
2021-07-17 10:51:08 -04:00
ALL_INPUT_FILES = $( echo " $UNIQUE_FILES " | tr "\n" " " | xargs)
2021-08-09 08:57:25 -04:00
ALL_OTHER_CHANGED_FILES = $( git diff --diff-filter= "ACMR" --name-only " $PREVIOUS_SHA " " $CURRENT_SHA " )
2021-07-17 15:13:26 -04:00
OTHER_CHANGED_FILES = $( echo " ${ ALL_OTHER_CHANGED_FILES [@] } " " ${ ALL_MODIFIED_FILES [@] } " | tr ' ' '\n' | sort | uniq -u | tr "\n" " " | xargs)
2021-05-21 08:39:56 -04:00
echo " Input files: ${ ALL_INPUT_FILES [*] } "
echo " Matching modified files: ${ ALL_MODIFIED_FILES [*] } "
2021-07-17 15:13:26 -04:00
2021-05-21 08:39:56 -04:00
if [ [ -n " $ALL_MODIFIED_FILES " ] ] ; then
echo "::set-output name=any_changed::true"
else
echo "::set-output name=any_changed::false"
fi
2021-07-17 15:13:26 -04:00
if [ [ -n " $OTHER_CHANGED_FILES " ] ] ; then
echo " Non Matching modified files: ${ OTHER_CHANGED_FILES [*] } "
echo "::set-output name=only_changed::false"
echo " ::set-output name=other_changed_files:: $OTHER_CHANGED_FILES "
else
echo "::set-output name=only_changed::true"
fi
2021-05-21 08:39:56 -04:00
fi
2021-08-17 20:03:07 -04:00
git remote remove temp_changed_files
2021-05-21 08:39:56 -04:00
echo " ::set-output name=added_files:: $ADDED "
echo " ::set-output name=copied_files:: $COPIED "
echo " ::set-output name=deleted_files:: $DELETED "
echo " ::set-output name=modified_files:: $MODIFIED "
echo " ::set-output name=renamed_files:: $RENAMED "
2021-06-18 19:28:02 -04:00
echo " ::set-output name=type_changed_files:: $TYPE_CHANGED "
2021-05-21 08:39:56 -04:00
echo " ::set-output name=unmerged_files:: $UNMERGED "
echo " ::set-output name=unknown_files:: $UNKNOWN "
echo " ::set-output name=all_changed_files:: $ALL_CHANGED "
echo " ::set-output name=all_modified_files:: $ALL_MODIFIED_FILES "
2021-06-26 10:20:56 -04:00
echo "::endgroup::"