Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions .github/workflows/integration-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,110 @@ jobs:
echo "The split tests are not matching"
exit 1
fi

- name: Create simulated JUnit report
run: |
mkdir -p build/reports/test-results
CLASS="de.donnerbart.example.ActionSplit${{ matrix.split-index }}Test"
FILE="build/reports/test-results/TEST-$CLASS.xml"
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $FILE
echo "<testsuite name=\"$CLASS\" tests=\"1\" skipped=\"0\" failures=\"0\" errors=\"0\" timestamp=\"1970-01-01T00:00:00\" hostname=\"foobar\" time=\"23.42\">" >> $FILE
echo " <properties/>" >> $FILE
echo " <testcase name=\"testMethod()\" classname=\"$CLASS\" time=\"23.42\">" >> $FILE
echo " <system-out><![CDATA[00:00:00.000 [Test] INFO Test log for split ${{ matrix.split-index }}" >> $FILE
echo "00:00:00.001 [Test] INFO Done" >> $FILE
echo "]]></system-out>" >> $FILE
echo " <system-err><![CDATA[]]></system-err>" >> $FILE
echo " </testcase>" >> $FILE
echo "</testsuite>" >> $FILE

- name: Upload JUnit report artifact
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
with:
name: junit-xml-reports-${{ matrix.split-index }}
path: build/reports/test-results/*.xml

merge-junit-reports:
name: Merge JUnit reports
runs-on: ubuntu-latest
needs:
- integration-test
permissions:
contents: write
steps:
- name: Checkout split-tests-java-action
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4

- name: Merge JUnit reports
uses: ./merge-junit-reports
with:
git-branch: junit-reports-it-${{ github.sha }}
artifact-name: junit-xml-reports
split-artifact-pattern: junit-xml-reports-*

- name: Checkout JUnit reports
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: junit-reports-assertion
ref: junit-reports-it-${{ github.sha }}

- name: Assert JUnit reports
working-directory: junit-reports-assertion
run: |
for SPLIT_INDEX in {0..3}; do
REPORT_FILE="TEST-de.donnerbart.example.ActionSplit${SPLIT_INDEX}Test.xml"
SEARCH_STRING='name="de.donnerbart.example.ActionSplit'${SPLIT_INDEX}'Test"'
if [[ ! -f "$REPORT_FILE" ]]; then
echo "Error: JUnit report $REPORT_FILE not found!"
ls -l
exit 1
fi
if ! grep -q "$SEARCH_STRING" "$REPORT_FILE"; then
echo "Error: JUnit report $REPORT_FILE does not contain the required string '$SEARCH_STRING'!"
cat $REPORT_FILE
exit 1
fi
echo "JUnit report $REPORT_FILE is valid"
done
FILE_COUNT=$(ls -1 | wc -l)
if [[ "$FILE_COUNT" -ne 4 ]]; then
echo "Error: Expected 4 JUnit reports, but found $FILE_COUNT files!"
ls -l
exit 1
fi

- name: Download JUnit reports artifact
uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4
with:
name: junit-xml-reports
path: junit-reports-artifact-assertion

- name: Assert JUnit reports artifact
working-directory: junit-reports-artifact-assertion
run: |
for SPLIT_INDEX in {0..3}; do
REPORT_FILE="TEST-de.donnerbart.example.ActionSplit${SPLIT_INDEX}Test.xml"
SEARCH_STRING='name="de.donnerbart.example.ActionSplit'${SPLIT_INDEX}'Test"'
if [[ ! -f "$REPORT_FILE" ]]; then
echo "Error: JUnit report $REPORT_FILE not found!"
ls -l
exit 1
fi
if ! grep -q "$SEARCH_STRING" "$REPORT_FILE"; then
echo "Error: JUnit report $REPORT_FILE does not contain the required string '$SEARCH_STRING'!"
cat $REPORT_FILE
exit 1
fi
echo "JUnit report $REPORT_FILE is valid"
done
FILE_COUNT=$(ls -1 | wc -l)
if [[ "$FILE_COUNT" -ne 4 ]]; then
echo "Error: Expected 4 JUnit reports, but found $FILE_COUNT files!"
ls -l
exit 1
fi

- name: Cleanup JUnit reports branch
if: always()
run: |
git push origin --delete junit-reports-it-${{ github.sha }} || true
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ jobs:
debug: true

- name: Run integration tests
run: ./gradlew :integrationTest ${{ steps.split-tests.outputs.test-suite }}
run: ./gradlew :integrationTest ${{ steps.split-tests.outputs.test-suite }}

- name: Upload JUnit report artifact
uses: actions/upload-artifact@v4
Expand Down
24 changes: 20 additions & 4 deletions merge-junit-reports/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,30 @@ runs:
steps:
- name: Set up xmlstarlet
shell: bash
run: sudo apt update && sudo apt install -y xmlstarlet
run: |
sudo apt update
sudo apt install -y xmlstarlet

- name: Checkout JUnit reports
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
path: junit-reports
ref: ${{ inputs.git-branch }}
continue-on-error: true

- name: Create orphaned branch if checkout failed
shell: bash
working-directory: junit-reports
run: |
if git show-ref --verify --quiet refs/remotes/origin/${{ inputs.git-branch }}; then
echo "Switching to branch ${{ inputs.git-branch }}"
git switch ${{ inputs.git-branch }}
else
echo "Creating branch ${{ inputs.git-branch }}"
git switch --orphan ${{ inputs.git-branch }}
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor }}@users.noreply.github.com"
git commit --allow-empty -m "Initial commit for JUnit reports branch"
git push origin --set-upstream ${{ inputs.git-branch }}
fi

- name: Merge JUnit report artifacts
uses: actions/upload-artifact/merge@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
Expand Down