@@ -49,40 +49,67 @@ runs:
4949 name : ${{ inputs.artifact-name }}
5050 path : ${{ inputs.artifact-path }}
5151
52+ - name : Checkout repository
53+ uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
54+ with :
55+ path : ${{ inputs.path }}
56+
5257 - name : Check JUnit reports SHA
5358 id : junit-reports-sha
5459 shell : bash
5560 run : |
5661 echo "Checking JUnit reports SHA"
5762 UPLOAD_SHA_ARTIFACT=${{ inputs.upload-artifact }}
5863 CHECKOUT_REF=${{ inputs.git-branch }}
59- if [ -d ${{ inputs.artifact-path }} ]; then
60- cd ${{ inputs.artifact-path }}
61- if [ -f junit-reports-sha.txt ]; then
64+ # Check if we have a SHA artifact AND it's for the same branch we're requesting
65+ if [ -d ${{ inputs.artifact-path }} ] && [ -f ${{ inputs.artifact-path }}/junit-reports-sha.txt ]; then
66+ # We have a SHA artifact, but only use it if we're requesting the same branch
67+ # For non-existent branches, we should not use the cached SHA
68+ SAVED_SHA=$(cat ${{ inputs.artifact-path }}/junit-reports-sha.txt)
69+ cd ${{ inputs.path }}
70+ # Check if the requested branch exists
71+ if git ls-remote --exit-code --heads origin $CHECKOUT_REF; then
72+ echo "Branch $CHECKOUT_REF exists, checking if saved SHA is current"
73+ git fetch --quiet
74+ git switch $CHECKOUT_REF
75+ CURRENT_SHA=$(git rev-parse HEAD)
76+ if [ "$CURRENT_SHA" == "$SAVED_SHA" ]; then
77+ echo "Using saved SHA $SAVED_SHA for branch $CHECKOUT_REF (no changes)"
78+ UPLOAD_SHA_ARTIFACT=false
79+ else
80+ # Branch has been updated, we should update the SHA artifact if we're split-index 0
81+ echo "Branch has been updated from $SAVED_SHA to $CURRENT_SHA, will update SHA artifact"
82+ fi
83+ else
84+ echo "Branch $CHECKOUT_REF does not exist, ignoring saved SHA and staying on default branch"
6285 UPLOAD_SHA_ARTIFACT=false
63- CHECKOUT_REF=$(cat junit-reports-sha.txt)
6486 fi
6587 else
66- mkdir ${{ inputs.artifact-path }} || true
88+ # No SHA artifact, handle branch checkout normally
89+ if [ ! -d ${{ inputs.artifact-path }} ]; then
90+ mkdir ${{ inputs.artifact-path }} || true
91+ fi
92+ cd ${{ inputs.path }}
93+ if git ls-remote --exit-code --heads origin $CHECKOUT_REF; then
94+ echo "Switching to existing branch: $CHECKOUT_REF"
95+ git fetch --quiet
96+ git switch $CHECKOUT_REF
97+ else
98+ echo "Branch $CHECKOUT_REF does not exist, staying on default branch"
99+ UPLOAD_SHA_ARTIFACT=false
100+ fi
67101 fi
68102 if [ "$UPLOAD_SHA_ARTIFACT" == "true" ]; then
69- echo "Checking out JUnit reports from branch $CHECKOUT_REF"
103+ echo "Will upload JUnit reports SHA for branch $CHECKOUT_REF"
70104 else
71- echo "Checking out JUnit reports from previously used SHA $CHECKOUT_REF "
105+ echo "Will not upload JUnit reports SHA"
72106 fi
73107 # we can only upload the artifact once, so only do this on the first split
74108 if [ "${{ inputs.split-index }}" != "0" ]; then
75109 echo "Skipping upload of JUnit reports SHA on this index"
76110 UPLOAD_SHA_ARTIFACT=false
77111 fi
78112 echo "upload-artifact=${UPLOAD_SHA_ARTIFACT}" >> "$GITHUB_OUTPUT"
79- echo "ref=${CHECKOUT_REF}" >> "$GITHUB_OUTPUT"
80-
81- - name : Checkout repository
82- uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
83- with :
84- path : ${{ inputs.path }}
85- ref : ${{ steps.junit-reports-sha.outputs.ref }}
86113
87114 - name : Save JUnit reports SHA
88115 if : ${{ steps.junit-reports-sha.outputs.upload-artifact == 'true' }}
0 commit comments