Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: error retrieving changed files #882

Merged
merged 61 commits into from Dec 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
5305478
chore: update test
jackton1 Dec 17, 2022
b34d5e2
Update test.yml
jackton1 Dec 17, 2022
544eedb
Update diff-sha.sh
jackton1 Dec 17, 2022
89c3040
Update diff-sha.sh
jackton1 Dec 17, 2022
cdb935e
Update diff-sha.sh
jackton1 Dec 17, 2022
62cf6ff
Update diff-sha.sh
jackton1 Dec 17, 2022
711063a
Update diff-sha.sh
jackton1 Dec 17, 2022
fcd7ae2
Updated diff-sha.sh
jackton1 Dec 17, 2022
e8e58a6
Fixed test
jackton1 Dec 17, 2022
8c95fb0
add support for reverting back to detached head state
jackton1 Dec 17, 2022
50b6410
Update to catch error
jackton1 Dec 17, 2022
fb232fe
Update to pull latest commits from the target branch
jackton1 Dec 17, 2022
e42a88c
Update to verify the diff
jackton1 Dec 17, 2022
08b8ee2
Update to verify the diff
jackton1 Dec 17, 2022
60a9d77
Update to verify the diff
jackton1 Dec 17, 2022
283e880
Simplify code
jackton1 Dec 18, 2022
4214c2a
Apply suggestions from code review
jackton1 Dec 18, 2022
a8d56bb
Update diff-sha.sh
jackton1 Dec 18, 2022
703b662
Fixed test
jackton1 Dec 18, 2022
febdf1a
Remove quotes
jackton1 Dec 18, 2022
f53b7e9
Fixed test
jackton1 Dec 18, 2022
845693f
Update diff-sha.sh
jackton1 Dec 18, 2022
2ffae43
Update diff-sha.sh
jackton1 Dec 18, 2022
34375c2
Merge branch 'main' into chore/update-test
jackton1 Dec 18, 2022
fffc9d3
Fixed test
jackton1 Dec 18, 2022
0e24086
Update to change diff type when the previous commit is a merge commit
jackton1 Dec 18, 2022
118e726
Fixed test
jackton1 Dec 18, 2022
603fac5
Merge branch 'main' into chore/update-test
jackton1 Dec 18, 2022
5f0eeb7
Revert change
jackton1 Dec 18, 2022
a5c1a43
Updated to use rev-list
jackton1 Dec 18, 2022
2de79fb
Updated to use the latest commit
jackton1 Dec 18, 2022
65352aa
Merge branch 'main' into chore/update-test
jackton1 Dec 18, 2022
84d2ce6
Updated to use the latest commit
jackton1 Dec 18, 2022
c812b6c
Updated to use the latest commit
jackton1 Dec 18, 2022
13e9787
Updated to use the latest commit
jackton1 Dec 18, 2022
9d94ea1
Updated to use the latest commit
jackton1 Dec 18, 2022
4e8080d
Updated to use the latest commit
jackton1 Dec 18, 2022
40b82be
Updated code
jackton1 Dec 18, 2022
721f2f5
Merge branch 'main' into chore/update-test
jackton1 Dec 18, 2022
d8d060e
Updated to use the first commit.
jackton1 Dec 19, 2022
d42c826
Updated to fetch all PR commits
jackton1 Dec 19, 2022
1274700
Updated to fetch all PR commits
jackton1 Dec 19, 2022
c216a56
Update to use 2dot diff
jackton1 Dec 19, 2022
43ada8a
Updated debug information
jackton1 Dec 19, 2022
4e437e5
Update diff-sha.sh
jackton1 Dec 19, 2022
31e82da
Update action.yml
jackton1 Dec 19, 2022
e29f1ab
Update diff-sha.sh
jackton1 Dec 19, 2022
9bd2f84
Updated to use the last commit as fallback
jackton1 Dec 19, 2022
1aeb40d
Fixed test
jackton1 Dec 19, 2022
7ee4ded
Updated test
jackton1 Dec 19, 2022
b7066b6
fix test
jackton1 Dec 19, 2022
6d11ed9
Exclude merge commits
jackton1 Dec 19, 2022
0bb4353
Update README.md
jackton1 Dec 18, 2022
eedcf22
Update README.md
jackton1 Dec 19, 2022
e7601b2
Update README.md
jackton1 Dec 19, 2022
28c3853
Update README.md
jackton1 Dec 19, 2022
24cfd27
Update README.md
jackton1 Dec 19, 2022
8120d3d
Update README.md
jackton1 Dec 19, 2022
5b64877
Update README.md
jackton1 Dec 19, 2022
74b4115
Removed unused input
jackton1 Dec 19, 2022
027bd85
Merge branch 'main' into chore/update-test
jackton1 Dec 19, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 11 additions & 11 deletions .github/workflows/test.yml
Expand Up @@ -37,7 +37,7 @@ jobs:
fail-fast: false
max-parallel: 2
matrix:
platform: [ubuntu-latest, ubuntu-22.04, windows-latest, macos-latest, macos-11, windows-2022]
platform: [ubuntu-latest]
steps:
- name: Checkout into dir1
uses: actions/checkout@v3
Expand Down Expand Up @@ -94,7 +94,7 @@ jobs:
fail-fast: false
max-parallel: 2
matrix:
platform: [ubuntu-latest, ubuntu-22.04, windows-latest, macos-11, macos-latest, windows-2022]
platform: [ubuntu-latest]

steps:
- name: Checkout to branch
Expand Down Expand Up @@ -149,7 +149,7 @@ jobs:
fail-fast: false
max-parallel: 4
matrix:
platform: [ubuntu-latest, ubuntu-22.04, windows-latest, macos-latest, macos-11, windows-2022]
platform: [ubuntu-latest]

steps:
- name: Checkout to branch
Expand Down Expand Up @@ -184,7 +184,7 @@ jobs:
fail-fast: false
max-parallel: 4
matrix:
platform: [ubuntu-latest, ubuntu-22.04, windows-latest, macos-latest, macos-11, windows-2022]
platform: [ubuntu-latest]

steps:
- name: Checkout to branch
Expand Down Expand Up @@ -212,7 +212,7 @@ jobs:
fail-fast: false
max-parallel: 4
matrix:
platform: [ubuntu-latest, ubuntu-22.04, windows-latest, macos-latest, macos-11, windows-2022]
platform: [ubuntu-latest]
fetch-depth: [1, 2]

steps:
Expand All @@ -238,7 +238,7 @@ jobs:
fail-fast: false
max-parallel: 4
matrix:
platform: [ubuntu-latest, ubuntu-22.04, windows-latest, macos-latest, macos-11, windows-2022]
platform: [ubuntu-latest]

steps:
- name: Checkout to branch
Expand Down Expand Up @@ -290,7 +290,7 @@ jobs:
fail-fast: false
max-parallel: 4
matrix:
platform: [ubuntu-latest, ubuntu-22.04, windows-latest, macos-latest, macos-11, windows-2022]
platform: [ubuntu-latest]

steps:
- name: Checkout to branch
Expand Down Expand Up @@ -945,21 +945,21 @@ jobs:
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v6
if: github.event_name == 'pull_request'
if: github.event_name == 'pull_request' && matrix.fetch-depth == 0
- uses: nrwl/nx-set-shas@v3
id: last_successful_commit
if: github.event_name == 'pull_request' && github.event.action != 'closed'
if: github.event_name == 'pull_request' && github.event.action != 'closed' && matrix.fetch-depth == 0
with:
main-branch-name: ${{ steps.branch-name.outputs.base_ref_branch }}
workflow-id: 'test.yml'
- name: Run changed-files with a custom base sha
if: github.event_name == 'pull_request' && github.event.action != 'closed'
if: github.event_name == 'pull_request' && github.event.action != 'closed' && matrix.fetch-depth == 0
id: changed-files-custom-base-sha
uses: ./
with:
base_sha: ${{ steps.last_successful_commit.outputs.base }}
- name: Show output
if: github.event_name == 'pull_request' && github.event.action != 'closed'
if: github.event_name == 'pull_request' && github.event.action != 'closed' && matrix.fetch-depth == 0
run: |
echo '${{ toJSON(steps.changed-files-custom-base-sha.outputs) }}'
shell:
Expand Down
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -63,6 +63,7 @@ on:
branches:
- main


jobs:
build:
runs-on: ubuntu-latest # windows-latest | macos-latest
Expand Down
10 changes: 4 additions & 6 deletions action.yml
Expand Up @@ -81,13 +81,9 @@ inputs:
required: false
default: "false"
fetch_depth:
description: "Initial depth of the branch history fetched. **NOTE**: This can be adjusted to resolve errors with insufficient history."
description: "Depth of additional branch history fetched. **NOTE**: This can be adjusted to resolve errors with insufficient history."
required: false
default: "50"
max_fetch_depth:
description: "Maximum depth of the branch history fetched. **NOTE**: This can be adjusted to resolve errors with insufficient history."
required: false
default: "9000"
since_last_remote_commit:
description: "Use the last commit on the remote branch as the `base_sha`. Defaults to the last non merge commit on the target branch for pull request events and the previous remote commit of the current branch for push events."
required: true
Expand Down Expand Up @@ -173,6 +169,7 @@ runs:
GITHUB_BASE_REF: ${{ github.base_ref }}
GITHUB_HEAD_REF: ${{ github.head_ref }}
GITHUB_WORKSPACE: ${{ github.workspace }}
GITHUB_EVENT_NUMBER: ${{ github.event.number }}
GITHUB_EVENT_HEAD_REPO_FORK: ${{ github.event.pull_request.head.repo.fork }}
GITHUB_EVENT_PULL_REQUEST_BASE_SHA: ${{ github.event.pull_request.base.sha }}
GITHUB_EVENT_PULL_REQUEST_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
Expand All @@ -188,7 +185,6 @@ runs:
INPUT_UNTIL: ${{ inputs.until }}
INPUT_PATH: ${{ inputs.path }}
INPUT_FETCH_DEPTH: ${{ inputs.fetch_depth }}
INPUT_MAX_FETCH_DEPTH: ${{ inputs.max_fetch_depth }}
INPUT_SINCE_LAST_REMOTE_COMMIT: ${{ inputs.since_last_remote_commit }}
- name: Glob match
uses: tj-actions/glob@v16
Expand All @@ -204,6 +200,7 @@ runs:
working-directory: ${{ inputs.path }}
base-sha: ${{ steps.changed-files-diff-sha.outputs.previous_sha }}
sha: ${{ steps.changed-files-diff-sha.outputs.current_sha }}
diff: ${{ steps.changed-files-diff-sha.outputs.diff }}
include-deleted-files: true
separator: "|"
- run: |
Expand All @@ -223,6 +220,7 @@ runs:
INPUT_CURRENT_SHA: ${{ steps.changed-files-diff-sha.outputs.current_sha }}
INPUT_TARGET_BRANCH: ${{ steps.changed-files-diff-sha.outputs.target_branch }}
INPUT_CURRENT_BRANCH: ${{ steps.changed-files-diff-sha.outputs.current_branch }}
INPUT_DIFF: ${{ steps.changed-files-diff-sha.outputs.diff }}
INPUT_QUOTEPATH: ${{ inputs.quotepath }}
INPUT_INCLUDE_ALL_OLD_NEW_RENAMED_FILES: ${{ inputs.include_all_old_new_renamed_files }}
INPUT_OLD_NEW_SEPARATOR: ${{ inputs.old_new_separator }}
Expand Down
93 changes: 25 additions & 68 deletions diff-sha.sh
Expand Up @@ -13,7 +13,7 @@ if [[ "$GITHUB_REF" == "refs/tags/"* ]]; then
EXTRA_ARGS="--prune --no-recurse-submodules"
fi

if [[ "$GITHUB_EVENT_HEAD_REPO_FORK" == "true" ]]; then
if [[ -z $GITHUB_BASE_REF || "$GITHUB_EVENT_HEAD_REPO_FORK" == "true" ]]; then
DIFF=".."
fi

Expand Down Expand Up @@ -158,36 +158,6 @@ else

echo "Fetching remote refs..."

if [[ "$INPUT_SINCE_LAST_REMOTE_COMMIT" == "false" ]]; then
# shellcheck disable=SC2086
git fetch -u --progress $EXTRA_ARGS --depth="$INPUT_FETCH_DEPTH" origin +refs/heads/"$TARGET_BRANCH":refs/remotes/origin/"$TARGET_BRANCH" 1>/dev/null 2>&1
git branch --track "$TARGET_BRANCH" origin/"$TARGET_BRANCH" 1>/dev/null 2>&1 || true
# shellcheck disable=SC2086
git fetch $EXTRA_ARGS -u --progress --depth=$(( GITHUB_EVENT_PULL_REQUEST_COMMITS + 1 )) origin +"$GITHUB_REF":refs/remotes/origin/"$CURRENT_BRANCH" 1>/dev/null 2>&1

COMMON_ANCESTOR=$(git merge-base --fork-point "$TARGET_BRANCH" HEAD) && exit_status=$? || exit_status=$?

if [[ -z "$COMMON_ANCESTOR" ]]; then
echo "::debug::Unable to locate a common ancestor for the current branch: $CURRENT_BRANCH"
else
echo "::debug::Common ancestor: $COMMON_ANCESTOR"

DATE=$(git show --quiet --date=iso8601 --format=%cd "$COMMON_ANCESTOR")

if [[ -z "$DATE" ]]; then
echo "::error::Unable to locate a date for the common ancestor: $COMMON_ANCESTOR"
exit 1
else
# shellcheck disable=SC2086
git fetch $EXTRA_ARGS --shallow-since="${DATE}" origin +refs/heads/"$TARGET_BRANCH":refs/remotes/origin/"$TARGET_BRANCH" 1>/dev/null 2>&1
echo "::debug::Date: $DATE"
fi
fi
else
# shellcheck disable=SC2086
git fetch $EXTRA_ARGS -u --progress --depth="$INPUT_FETCH_DEPTH" origin +"$GITHUB_REF":refs/remotes/origin/"$CURRENT_BRANCH" 1>/dev/null 2>&1
fi

echo "::debug::Getting HEAD SHA..."
if [[ -n "$INPUT_UNTIL" ]]; then
echo "::debug::Getting HEAD SHA for '$INPUT_UNTIL'..."
Expand All @@ -198,6 +168,9 @@ else
exit 1
fi
else
# shellcheck disable=SC2086
git fetch $EXTRA_ARGS -u --progress --deepen="$INPUT_FETCH_DEPTH" origin "$CURRENT_BRANCH" 1>/dev/null 2>&1

if [[ -z $INPUT_SHA ]]; then
CURRENT_SHA=$(git rev-list -n 1 HEAD) && exit_status=$? || exit_status=$?
else
Expand All @@ -222,21 +195,26 @@ else

if [[ -z $INPUT_BASE_SHA ]]; then
if [[ "$INPUT_SINCE_LAST_REMOTE_COMMIT" == "true" ]]; then
echo "::debug::Fetching remote current branch..."

# shellcheck disable=SC2086
git fetch $EXTRA_ARGS -u --progress --deepen="$INPUT_FETCH_DEPTH" origin "$CURRENT_BRANCH" 1>/dev/null 2>&1
jackton1 marked this conversation as resolved.
Show resolved Hide resolved
Fixed Show fixed Hide fixed
jackton1 marked this conversation as resolved.
Show resolved Hide resolved

PREVIOUS_SHA=$GITHUB_EVENT_BEFORE

if ! git rev-parse --quiet --verify "$PREVIOUS_SHA^{commit}" 1>/dev/null 2>&1; then
PREVIOUS_SHA=$(git rev-parse origin/"$CURRENT_BRANCH")
fi
else
PREVIOUS_SHA=${COMMON_ANCESTOR:-}

if [[ -z "$PREVIOUS_SHA" ]]; then
PREVIOUS_SHA=$GITHUB_EVENT_PULL_REQUEST_BASE_SHA && exit_status=$? || exit_status=$?
fi
echo "::debug::Fetching remote target branch..."
# shellcheck disable=SC2086
git fetch $EXTRA_ARGS -u --progress --deepen="$INPUT_FETCH_DEPTH" origin "$TARGET_BRANCH" 1>/dev/null 2>&1
jackton1 marked this conversation as resolved.
Show resolved Hide resolved
Fixed Show fixed Hide fixed
jackton1 marked this conversation as resolved.
Show resolved Hide resolved

if ! git diff --name-only --ignore-submodules=all "$PREVIOUS_SHA$DIFF$CURRENT_SHA" 1>/dev/null 2>&1; then
PREVIOUS_SHA=$GITHUB_EVENT_PULL_REQUEST_BASE_SHA
fi
echo "::debug::Fetching remote current branch..."
# shellcheck disable=SC2086
git fetch $EXTRA_ARGS -u --progress origin pull/"$GITHUB_EVENT_NUMBER"/head:"$CURRENT_BRANCH" 1>/dev/null 2>&1

PREVIOUS_SHA=$(git merge-base origin/"$TARGET_BRANCH" "$CURRENT_SHA") && exit_status=$? || exit_status=$?
fi

if [[ -z "$PREVIOUS_SHA" || "$PREVIOUS_SHA" == "$CURRENT_SHA" ]]; then
Expand All @@ -247,37 +225,14 @@ else
else
PREVIOUS_SHA=$INPUT_BASE_SHA && exit_status=$? || exit_status=$?
fi

if [[ "$INPUT_SINCE_LAST_REMOTE_COMMIT" == "false" ]]; then
if [[ -f .git/shallow ]]; then
depth=$INPUT_FETCH_DEPTH
max_depth=$INPUT_MAX_FETCH_DEPTH

for ((i=20; i<max_depth; i+=depth)); do
if git diff --name-only --ignore-submodules=all "$PREVIOUS_SHA$DIFF$CURRENT_SHA" 1>/dev/null 2>&1; then
break
fi

if [[ -z "$INPUT_BASE_SHA" ]]; then
NEW_PREVIOUS_SHA=$(git merge-base --fork-point "$TARGET_BRANCH" "$CURRENT_SHA") && exit_status=$? || exit_status=$?

if [[ -n "$NEW_PREVIOUS_SHA" ]]; then
PREVIOUS_SHA=$NEW_PREVIOUS_SHA
fi
fi

echo "Fetching $i commits..."

# shellcheck disable=SC2086
git fetch $EXTRA_ARGS -u --progress --deepen="$i" origin $TARGET_BRANCH $CURRENT_SHA 1>/dev/null 2>&1
done
if ! git diff --name-only --ignore-submodules=all "$PREVIOUS_SHA$DIFF$CURRENT_SHA" 1>/dev/null 2>&1; then
PREVIOUS_SHA=$(git rev-parse origin/"$TARGET_BRANCH") && exit_status=$? || exit_status=$?
DIFF=".."

if ((i > max_depth)); then
echo "::error::Unable to locate a common ancestor between $TARGET_BRANCH and $CURRENT_BRANCH with: $PREVIOUS_SHA$DIFF$CURRENT_SHA"
exit 1
fi
else
echo "::debug::Not a shallow clone, skipping merge-base check."
if ! git diff --name-only --ignore-submodules=all "$PREVIOUS_SHA$DIFF$CURRENT_SHA" 1>/dev/null 2>&1; then
echo "::error::Unable find a diff between $PREVIOUS_SHA and $CURRENT_SHA"
exit 1
fi
fi

Expand Down Expand Up @@ -305,12 +260,14 @@ if [[ -z "$GITHUB_OUTPUT" ]]; then
echo "::set-output name=current_branch::$CURRENT_BRANCH"
echo "::set-output name=previous_sha::$PREVIOUS_SHA"
echo "::set-output name=current_sha::$CURRENT_SHA"
echo "::set-output name=diff::$DIFF"
else
cat <<EOF >> "$GITHUB_OUTPUT"
target_branch=$TARGET_BRANCH
current_branch=$CURRENT_BRANCH
previous_sha=$PREVIOUS_SHA
current_sha=$CURRENT_SHA
diff=$DIFF
EOF
fi

Expand Down
10 changes: 3 additions & 7 deletions get-changed-paths.sh
Expand Up @@ -8,11 +8,7 @@ INPUT_SEPARATOR="${INPUT_SEPARATOR//$'\n'/'%0A'}"
INPUT_SEPARATOR="${INPUT_SEPARATOR//$'\r'/'%0D'}"

GITHUB_OUTPUT=${GITHUB_OUTPUT:-""}
DIFF="..."

if [[ -z $GITHUB_BASE_REF || "$GITHUB_EVENT_HEAD_REPO_FORK" == "true" ]]; then
DIFF=".."
fi
DIFF=$INPUT_DIFF

if [[ $INPUT_QUOTEPATH == "false" ]]; then
git config --global core.quotepath off
Expand Down Expand Up @@ -78,14 +74,14 @@ function get_diff() {
done < <(git submodule | awk '{print $2}')

if [[ "$INPUT_DIR_NAMES" == "true" ]]; then
git diff --diff-filter="$filter" --name-only --ignore-submodules=all "$base$DIFF$sha" | xargs -I {} dirname {} | get_dirname_max_depth | uniq && exit_status=$? || exit_status=$?
git diff --diff-filter="$filter" --name-only --ignore-submodules=all --no-merges "$base$DIFF$sha" | xargs -I {} dirname {} | get_dirname_max_depth | uniq && exit_status=$? || exit_status=$?

if [[ $exit_status -ne 0 ]]; then
echo "::error::Failed to get changed directories between: $base$DIFF$sha"
exit 1
fi
else
git diff --diff-filter="$filter" --name-only --ignore-submodules=all "$base$DIFF$sha" && exit_status=$? || exit_status=$?
git diff --diff-filter="$filter" --name-only --ignore-submodules=all --no-merges "$base$DIFF$sha" && exit_status=$? || exit_status=$?

if [[ $exit_status -ne 0 ]]; then
echo "::error::Failed to get changed files between: $base$DIFF$sha"
Expand Down