diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-01-20 20:36:37 +0900 |
|---|---|---|
| committer | Sho Sakuma <me@m1sk9.dev> | 2026-01-20 20:36:37 +0900 |
| commit | ba9353d7cd4e26526aa7f1850b4ccac60d5746a5 (patch) | |
| tree | ca018374f7ba040b87b9888bc4f28365c7a38d3f /.github/scripts/post-test-results.sh | |
| parent | 6e4a53b97891e3b2a69050936a182c0fe55b72d6 (diff) | |
| download | LunaticChat-ba9353d7cd4e26526aa7f1850b4ccac60d5746a5.tar.gz LunaticChat-ba9353d7cd4e26526aa7f1850b4ccac60d5746a5.tar.bz2 LunaticChat-ba9353d7cd4e26526aa7f1850b4ccac60d5746a5.zip | |
ci: Add Test workflow
Diffstat (limited to '.github/scripts/post-test-results.sh')
| -rw-r--r-- | .github/scripts/post-test-results.sh | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/.github/scripts/post-test-results.sh b/.github/scripts/post-test-results.sh new file mode 100644 index 0000000..a973db9 --- /dev/null +++ b/.github/scripts/post-test-results.sh @@ -0,0 +1,104 @@ +#!/bin/bash +set -e + +MARKER="<!-- test-results-comment -->" + +TEST_RESULTS_DIR="build/test-results/test" +TOTAL_TESTS=0 +PASSED_TESTS=0 +FAILED_TESTS=0 +SKIPPED_TESTS=0 +FAILED_TEST_NAMES="" + +if [ -d "$TEST_RESULTS_DIR" ]; then + for xml_file in "$TEST_RESULTS_DIR"/*.xml; do + if [ -f "$xml_file" ]; then + tests=$(sed -n 's/.*tests="\([0-9]*\)".*/\1/p' "$xml_file" | head -n1) + failures=$(sed -n 's/.*failures="\([0-9]*\)".*/\1/p' "$xml_file" | head -n1) + skipped=$(sed -n 's/.*skipped="\([0-9]*\)".*/\1/p' "$xml_file" | head -n1) + + tests=${tests:-0} + failures=${failures:-0} + skipped=${skipped:-0} + + TOTAL_TESTS=$((TOTAL_TESTS + tests)) + FAILED_TESTS=$((FAILED_TESTS + failures)) + SKIPPED_TESTS=$((SKIPPED_TESTS + skipped)) + + if [ "$failures" -gt 0 ]; then + failed_names=$(sed -n 's/.*<testcase name="\([^"]*\)".*<failure.*/\1/p' "$xml_file" || echo "") + if [ -n "$failed_names" ]; then + FAILED_TEST_NAMES="${FAILED_TEST_NAMES}${failed_names}\n" + fi + fi + fi + done + + PASSED_TESTS=$((TOTAL_TESTS - FAILED_TESTS - SKIPPED_TESTS)) +fi + +if [ "$FAILED_TESTS" -gt 0 ]; then + STATUS="❌ Failed" + STATUS_EMOJI="❌" +else + STATUS="✅ Passed" + STATUS_EMOJI="✅" +fi + +COMMENT_BODY="${MARKER} +## ${STATUS_EMOJI} Test Results + +| Status | Count | +|--------|-------| +| ✅ Passed | ${PASSED_TESTS} | +| ❌ Failed | ${FAILED_TESTS} | +| ⏭️ Skipped | ${SKIPPED_TESTS} | +| **Total** | **${TOTAL_TESTS}** | + +**Overall Status:** ${STATUS} +" + +if [ "$FAILED_TESTS" -gt 0 ] && [ -n "$FAILED_TEST_NAMES" ]; then + COMMENT_BODY="${COMMENT_BODY} + +<details> +<summary>❌ Failed Tests</summary> + +$(echo -e "$FAILED_TEST_NAMES" | sed 's/^/- /') + +</details> +" +fi + +COMMENT_BODY="${COMMENT_BODY} + +--- +*Updated at $(date -u '+%Y-%m-%d %H:%M:%S UTC')*" + +echo "$COMMENT_BODY" > /tmp/test-comment.md + +PR_NUMBER="${GITHUB_REF#refs/pull/}" +PR_NUMBER="${PR_NUMBER%/merge}" + +if [ -z "$PR_NUMBER" ] || [ "$PR_NUMBER" = "$GITHUB_REF" ]; then + echo "Not a pull request, skipping comment" + exit 0 +fi + +EXISTING_COMMENT_ID=$(gh api \ + "repos/$GITHUB_REPOSITORY/issues/${PR_NUMBER}/comments" \ + --jq ".[] | select(.body | contains(\"$MARKER\")) | .id" \ + | head -n 1 || echo "") + +if [ -n "$EXISTING_COMMENT_ID" ]; then + echo "Updating existing comment (ID: $EXISTING_COMMENT_ID)" + gh api \ + "repos/$GITHUB_REPOSITORY/issues/comments/${EXISTING_COMMENT_ID}" \ + -X PATCH \ + -f body="$(cat /tmp/test-comment.md)" +else + echo "Creating new comment" + gh pr comment "$PR_NUMBER" --body-file /tmp/test-comment.md +fi + +echo "Test results comment posted successfully" |
