mikepenz/action-junit-report

Reports junit test results as GitHub Pull Request Check

TypeScript

429

1,462 commits

updated Oct 19, 2026

See the code

README

action-junit-report

... reports JUnit test results as GitHub pull request check.

CI Marketplace OpenSSF Scorecard License

action-junit-report: JUnit XML reports become a pull request check with pass/fail counts and an inline annotation on the failing line

Quickstart πŸ› οΈ β€’ Showcase πŸ–₯️ β€’ Inputs β€’ Outputs β€’ Reference πŸ“– β€’ License πŸ““

βœ… A check on the pull requestOne check run per report, with the failure annotated on the line that failed
πŸ“Š Summaries where you lookjob_summary, detailed_summary, flaky_summary β€” and comment: true to post them on the PR
🧩 Parses what other tools emit<failure> and <error>, nested suites, retries via check_retries, any language
πŸ” No checks: write? Still worksannotate_only: true annotates forks and read-only tokens without a check run
🏷️ Titles you controlcheck_title_template with {{BREAD_CRUMB}}, {{SUITE_NAME}}, {{TEST_NAME}}, {{CLASS_NAME}}
πŸ“ˆ Counts as outputstotal, passed, failed, skipped, retried, report_url for downstream steps

Quickstart πŸ› οΈ

1. Add the action after your test step, and let it run even when the tests failed:

- name: Publish Test Report
  id: report
  uses: mikepenz/action-junit-report@v6
  if: success() || failure() # always run even if the previous step fails
  with:
    report_paths: '**/build/test-results/test/TEST-*.xml'

2. Give the workflow permission to create the check:

permissions:
  checks: write
  pull-requests: write # only required if `comment: true` was enabled

3. Optionally read the counts back out β€” see Action outputs:

- run: echo "${{ steps.report.outputs.failed }} of ${{ steps.report.outputs.total }} tests failed"

[!TIP] Running from a workflow_run workflow, or from a fork? See PR run permissions.

Showcase πŸ–₯️

The failure is annotated inline, on the line the test failed on:

A pull request diff showing two check failures annotated inline on the failing lines of EmailAddressTest.java

...and collected on the check run, one entry per failed test case:

The Annotations panel of a check run listing 13 errors and 1 warning with file and line references


Reference

Topic
What's includedThe short feature list
Configure the workflowThe full workflow example
InputsEvery input the action accepts
Common Configurationsreport_paths per build tool, Node heap tuning
Action outputstotal, passed, failed, summary, report_url, …
PR run permissionsForks, workflow_run, and annotate_only
ContributeBuild and test the action locally

What's included πŸš€

  • Flexible JUnit parser with wide support
  • Supports both <failure> and <error> test case results
  • Supports nested test suites
  • Blazingly fast execution
  • Lighweight
  • Rich build log output

This action processes JUnit XML test reports on pull requests and shows the result as a PR check with summary and annotations.

Based on action for Surefire Reports by ScaCap

Setup

Configure the workflow

name: build
on:
  pull_request:

jobs:
  build:
    name: Build and Run Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
      - name: Build and Run Tests
        run: # execute your tests generating test results
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v6
        if: success() || failure() # always run even if the previous step fails
        with:
          report_paths: '**/build/test-results/test/TEST-*.xml'

Inputs

InputDescription
report_pathsOptional. Glob expression to junit report paths. Defaults to: **/junit-reports/TEST-*.xml.
tokenOptional. GitHub token for creating a check run. Set to ${{ github.token }} by default.
group_reportsOptional. Defines if different reports found by a single report_paths glob expression are grouped together. Defaults to true.
test_files_prefixOptional. Prepends the provided prefix to test file paths within the report when annotating on GitHub.
exclude_sourcesOptional. Provide , or newline separated list of folders to ignore for source lookup. Defaults to: /build/,/__pycache__/
check_nameOptional. Check name to use when creating a check run. The default is JUnit Test Report.
suite_regexREMOVED (as of v5). Instead use check_title_template and configure: {{BREAD_CRUMB}}{{SUITE_NAME}}/{{TEST_NAME}}
commitOptional. The commit SHA to update the status. This is useful when you run it with workflow_run.
fail_on_failureOptional. Fail the build in case of a test failure.
fail_on_parse_errorOptional. Fail the build if the test report file cannot be parsed.
require_testsOptional. Fail if no test are found.
require_passed_testsOptional. Fail if no passed test are found. (This is stricter than require_tests, which accepts skipped tests).
include_passedOptional. By default the action will skip passed items for the annotations. Enable this flag to include them.
include_skippedOptional. Controls whether skipped tests are included in the detailed summary table. Defaults to true.
check_retriesOptional. If a testcase is retried, ignore the original failure.
check_title_templateOptional. Template to configure the title format. Placeholders: {{FILE_NAME}}, {{SUITE_NAME}}, {{TEST_NAME}}, {{CLASS_NAME}}, {{BREAD_CRUMB}}.
bread_crumb_delimiterOptional. Defines the delimiter characters between the breadcrumb elements. Defaults to: /.
summaryOptional. Additional text to summary output
check_annotationsOptional. Defines if the checks will include annotations. If disabled skips all annotations for the check. (This does not affect annotate_only, which uses no checks).
update_checkOptional. Uses an alternative API to update checks, use for cases with more than 50 annotations. Default: false.
annotate_onlyOptional. Will only annotate the results on the files, won't create a check run. Defaults to false.
transformersOptional. Array of Transformers offering the ability to adjust the fileName. Defaults to: [{"searchValue":"::","replaceValue":"/"}]
job_summaryOptional. Enables the publishing of the job summary for the results. Defaults to true. May be required to disable Enterprise Server
job_summary_textOptional. Additional text to include in the job summary prior to the tables. Defaults to empty string.
detailed_summaryOptional. Include table with all test results in the summary (Also applies to comment). Defaults to false.
failed_summaryOptional. Include the failed tests in the detailed summary, when false they are removed from it (Also applies to comment). Requires detailed_summary. Defaults to true.
failed_summary_logsOptional. Show failed tests as collapsible blocks with the error message and stack trace after the table, instead of rows in the table. Requires detailed_summary and failed_summary. When false, failed tests stay in the table. Defaults to false.
flaky_summaryOptional. Include table with all flaky results in the summary (Also applies to comment). Defaults to false.
verbose_summaryOptional. Detail table will note if there were no test annotations for a test suite (Also applies to comment). Defaults to true.
skip_success_summaryOptional. Skips the summary table if only successful tests were detected (Also applies to comment). Defaults to false.
include_empty_in_summaryOptional. Include entries in summaries that have 0 count. Defaults to true.
include_time_in_summaryOptional. Include spent time in summaries. Defaults to false.
simplified_summaryOptional. Use icons instead of text to indicate status in summary. Defaults to false.
group_suiteOptional. If enabled, will group the testcases by test suite in the detailed_summary. Defaults to false.
commentOptional. Enables a comment being added to the PR with the summary tables (Respects the summary configuration flags). Defaults to false.
updateCommentOptional. If a prior action run comment exists, it is updated. If disabled, new comments are creted for each run. Defaults to true.
annotate_noticeOptional. Annotate passed test results along with warning/failed ones. Defaults to false. (Changed in v3.5.0)
follow_symlinkOptional. Enables to follow symlinks when searching test files via the globber. Defaults to false.
job_nameOptional. Specify the name of a check to update
annotations_limitOptional. Specify the limit for annotations. This will also interrupt parsing all test-suites if the limit is reached. Defaults to: No Limit.
skip_annotationsOptional. Setting this flag will result in no annotations being added to the run. Defaults to false.
truncate_stack_tracesOptional. Truncate stack traces from test output to 2 lines in annotations. Defaults to true.
resolve_ignore_classnameOptional. Force ignore test case classname from the xml report (This can help fix issues with some tools/languages). Defaults to false.
skip_comment_without_testsOptional. Disable commenting if no tests are detected. Defaults to false.
pr_idOptional. PR number to comment on (useful for workflow_run contexts where the action runs outside the PR context). When provided, overrides the automatic PR detection.

Common Configurations

Common report_paths

  • Surefire: **/target/surefire-reports/TEST-*.xml
  • sbt: **/target/test-reports/*.xml

If you observe out-of-memory errors, follow the below configuration suggestion.

[!TIP] FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

Increase Node Heap Memory

If you encounter an out-of-memory from Node, such as

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

you can increase the memory allocation by setting an environment variable

- name: Publish Test Report
  uses: mikepenz/action-junit-report@v6
  env:
    NODE_OPTIONS: "--max-old-space-size=4096"
  if: success() || failure() # always run even if the previous step fails
  with:
    report_paths: '**/build/test-results/test/TEST-*.xml'

Action outputs

After action execution it will return the test counts as output.

# ${{steps.{CHANGELOG_STEP_ID}.outputs.total}}

A full set list of possible output values for this action.

OutputDescription
outputs.totalThe total number of test cases covered by this test-step.
outputs.passedThe number of passed test cases.
outputs.skippedThe number of skipped test cases.
outputs.retriedThe number of retried test cases.
outputs.failedThe number of failed test cases.
outputs.summaryThe short summary of the junit report. In html format (as also constructed by GitHub for the summary).
outputs.detailed_summaryThe detailed summary in HTML, including a table and optional collapsible failed-test logs.
outputs.flaky_summaryThe full table with all flaky results in a summary. In html format (as also constructed by GitHub for the summary).
outputs.report_urlThe URL(s) to the test report(s). If multiple reports are created, they are separated by newlines.

PR run permissions

The action requires write permission on the checks. If the GA token is read-only (this is a repository configuration) please enable write permission via:

permissions:
  checks: write
  pull-requests: write # only required if `comment: true` was enabled

Additionally for security reasons, the github token used for pull_request workflows is marked as read-only. If you want to post checks to a PR from an external repository, you will need to use a separate workflow which has a read/write token, or use a PAT with elevated permissions.

Example

name: build
on:
  pull_request:

jobs:
  build:
    name: Build and Run Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3
      - name: Build and Run Tests
        run: # execute your tests generating test results
      - name: Upload Test Report
        uses: actions/upload-artifact@v3
        if: always() # always run even if the previous step fails
        with:
          name: junit-test-results
          path: '**/build/test-results/test/TEST-*.xml'
          retention-days: 1

---
name: report
on:
  workflow_run:
    workflows: [ build ]
    types: [ completed ]

permissions:
  checks: write

jobs:
  checks:
    runs-on: ubuntu-latest
    steps:
      - name: Download Test Report
        uses: dawidd6/action-download-artifact@v2
        with:
          name: junit-test-results
          workflow: ${{ github.event.workflow.id }}
          run_id: ${{ github.event.workflow_run.id }}
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v6
        with:
          commit: ${{github.event.workflow_run.head_sha}}
          report_paths: '**/build/test-results/test/TEST-*.xml'
          # Optional: if you want to add PR comments from workflow_run context  
          # comment: true
          # pr_id: ${{ github.event.workflow_run.pull_requests[0].number }}

This will securely post the check results from the privileged workflow onto the PR's checks report.

[!TIP] When running from workflow_run context, use the pr_id parameter to enable PR comments: pr_id: ${{ github.event.workflow_run.pull_requests[0].number }}

In environments that do not allow checks: write, the action can be configured to leverage the annotate_only option.

Example

name: pr

on:
  pull_request:

jobs:
  unit_test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Build and Run Tests
        run: # execute your tests generating test results

      - name: Write out Unit Test report annotation for forked repo
        if: ${{ failure() &&  (github.event.pull_request.head.repo.full_name != github.repository) }}
        uses: mikepenz/action-junit-report@v6
        with:
          annotate_only: true # forked repo cannot write to checks so just do annotations

This will selectively use different methods for forked and unforked repos.

## Contribute 🧬
# Install the dependencies  
$ npm install

# Verify lint is happy
$ npm run lint -- --fix

# Format
$ npm run format

# Build the typescript and package it for distribution
$ npm run build && npm run package

# Run the tests, use to debug, and test it out
$ npm test

Credits

Original idea and GitHub Actions by: https://github.com/ScaCap/action-surefire-report

Other actions

License

Copyright (C) 2025 Mike Penz

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
actions
automation
cd
ci
github-actions
hacktoberfest
junit
test
test-automation
workflow

mikepenz/action-junit-report

Reports junit test results as GitHub Pull Request Check

TypeScript

429

1,462 commits

updated Oct 19, 2026

See the code

README

action-junit-report

... reports JUnit test results as GitHub pull request check.

CI Marketplace OpenSSF Scorecard License

action-junit-report: JUnit XML reports become a pull request check with pass/fail counts and an inline annotation on the failing line

Quickstart πŸ› οΈ β€’ Showcase πŸ–₯️ β€’ Inputs β€’ Outputs β€’ Reference πŸ“– β€’ License πŸ““

βœ… A check on the pull requestOne check run per report, with the failure annotated on the line that failed
πŸ“Š Summaries where you lookjob_summary, detailed_summary, flaky_summary β€” and comment: true to post them on the PR
🧩 Parses what other tools emit<failure> and <error>, nested suites, retries via check_retries, any language
πŸ” No checks: write? Still worksannotate_only: true annotates forks and read-only tokens without a check run
🏷️ Titles you controlcheck_title_template with {{BREAD_CRUMB}}, {{SUITE_NAME}}, {{TEST_NAME}}, {{CLASS_NAME}}
πŸ“ˆ Counts as outputstotal, passed, failed, skipped, retried, report_url for downstream steps

Quickstart πŸ› οΈ

1. Add the action after your test step, and let it run even when the tests failed:

- name: Publish Test Report
  id: report
  uses: mikepenz/action-junit-report@v6
  if: success() || failure() # always run even if the previous step fails
  with:
    report_paths: '**/build/test-results/test/TEST-*.xml'

2. Give the workflow permission to create the check:

permissions:
  checks: write
  pull-requests: write # only required if `comment: true` was enabled

3. Optionally read the counts back out β€” see Action outputs:

- run: echo "${{ steps.report.outputs.failed }} of ${{ steps.report.outputs.total }} tests failed"

[!TIP] Running from a workflow_run workflow, or from a fork? See PR run permissions.

Showcase πŸ–₯️

The failure is annotated inline, on the line the test failed on:

A pull request diff showing two check failures annotated inline on the failing lines of EmailAddressTest.java

...and collected on the check run, one entry per failed test case:

The Annotations panel of a check run listing 13 errors and 1 warning with file and line references


Reference

Topic
What's includedThe short feature list
Configure the workflowThe full workflow example
InputsEvery input the action accepts
Common Configurationsreport_paths per build tool, Node heap tuning
Action outputstotal, passed, failed, summary, report_url, …
PR run permissionsForks, workflow_run, and annotate_only
ContributeBuild and test the action locally

What's included πŸš€

  • Flexible JUnit parser with wide support
  • Supports both <failure> and <error> test case results
  • Supports nested test suites
  • Blazingly fast execution
  • Lighweight
  • Rich build log output

This action processes JUnit XML test reports on pull requests and shows the result as a PR check with summary and annotations.

Based on action for Surefire Reports by ScaCap

Setup

Configure the workflow

name: build
on:
  pull_request:

jobs:
  build:
    name: Build and Run Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
      - name: Build and Run Tests
        run: # execute your tests generating test results
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v6
        if: success() || failure() # always run even if the previous step fails
        with:
          report_paths: '**/build/test-results/test/TEST-*.xml'

Inputs

InputDescription
report_pathsOptional. Glob expression to junit report paths. Defaults to: **/junit-reports/TEST-*.xml.
tokenOptional. GitHub token for creating a check run. Set to ${{ github.token }} by default.
group_reportsOptional. Defines if different reports found by a single report_paths glob expression are grouped together. Defaults to true.
test_files_prefixOptional. Prepends the provided prefix to test file paths within the report when annotating on GitHub.
exclude_sourcesOptional. Provide , or newline separated list of folders to ignore for source lookup. Defaults to: /build/,/__pycache__/
check_nameOptional. Check name to use when creating a check run. The default is JUnit Test Report.
suite_regexREMOVED (as of v5). Instead use check_title_template and configure: {{BREAD_CRUMB}}{{SUITE_NAME}}/{{TEST_NAME}}
commitOptional. The commit SHA to update the status. This is useful when you run it with workflow_run.
fail_on_failureOptional. Fail the build in case of a test failure.
fail_on_parse_errorOptional. Fail the build if the test report file cannot be parsed.
require_testsOptional. Fail if no test are found.
require_passed_testsOptional. Fail if no passed test are found. (This is stricter than require_tests, which accepts skipped tests).
include_passedOptional. By default the action will skip passed items for the annotations. Enable this flag to include them.
include_skippedOptional. Controls whether skipped tests are included in the detailed summary table. Defaults to true.
check_retriesOptional. If a testcase is retried, ignore the original failure.
check_title_templateOptional. Template to configure the title format. Placeholders: {{FILE_NAME}}, {{SUITE_NAME}}, {{TEST_NAME}}, {{CLASS_NAME}}, {{BREAD_CRUMB}}.
bread_crumb_delimiterOptional. Defines the delimiter characters between the breadcrumb elements. Defaults to: /.
summaryOptional. Additional text to summary output
check_annotationsOptional. Defines if the checks will include annotations. If disabled skips all annotations for the check. (This does not affect annotate_only, which uses no checks).
update_checkOptional. Uses an alternative API to update checks, use for cases with more than 50 annotations. Default: false.
annotate_onlyOptional. Will only annotate the results on the files, won't create a check run. Defaults to false.
transformersOptional. Array of Transformers offering the ability to adjust the fileName. Defaults to: [{"searchValue":"::","replaceValue":"/"}]
job_summaryOptional. Enables the publishing of the job summary for the results. Defaults to true. May be required to disable Enterprise Server
job_summary_textOptional. Additional text to include in the job summary prior to the tables. Defaults to empty string.
detailed_summaryOptional. Include table with all test results in the summary (Also applies to comment). Defaults to false.
failed_summaryOptional. Include the failed tests in the detailed summary, when false they are removed from it (Also applies to comment). Requires detailed_summary. Defaults to true.
failed_summary_logsOptional. Show failed tests as collapsible blocks with the error message and stack trace after the table, instead of rows in the table. Requires detailed_summary and failed_summary. When false, failed tests stay in the table. Defaults to false.
flaky_summaryOptional. Include table with all flaky results in the summary (Also applies to comment). Defaults to false.
verbose_summaryOptional. Detail table will note if there were no test annotations for a test suite (Also applies to comment). Defaults to true.
skip_success_summaryOptional. Skips the summary table if only successful tests were detected (Also applies to comment). Defaults to false.
include_empty_in_summaryOptional. Include entries in summaries that have 0 count. Defaults to true.
include_time_in_summaryOptional. Include spent time in summaries. Defaults to false.
simplified_summaryOptional. Use icons instead of text to indicate status in summary. Defaults to false.
group_suiteOptional. If enabled, will group the testcases by test suite in the detailed_summary. Defaults to false.
commentOptional. Enables a comment being added to the PR with the summary tables (Respects the summary configuration flags). Defaults to false.
updateCommentOptional. If a prior action run comment exists, it is updated. If disabled, new comments are creted for each run. Defaults to true.
annotate_noticeOptional. Annotate passed test results along with warning/failed ones. Defaults to false. (Changed in v3.5.0)
follow_symlinkOptional. Enables to follow symlinks when searching test files via the globber. Defaults to false.
job_nameOptional. Specify the name of a check to update
annotations_limitOptional. Specify the limit for annotations. This will also interrupt parsing all test-suites if the limit is reached. Defaults to: No Limit.
skip_annotationsOptional. Setting this flag will result in no annotations being added to the run. Defaults to false.
truncate_stack_tracesOptional. Truncate stack traces from test output to 2 lines in annotations. Defaults to true.
resolve_ignore_classnameOptional. Force ignore test case classname from the xml report (This can help fix issues with some tools/languages). Defaults to false.
skip_comment_without_testsOptional. Disable commenting if no tests are detected. Defaults to false.
pr_idOptional. PR number to comment on (useful for workflow_run contexts where the action runs outside the PR context). When provided, overrides the automatic PR detection.

Common Configurations

Common report_paths

  • Surefire: **/target/surefire-reports/TEST-*.xml
  • sbt: **/target/test-reports/*.xml

If you observe out-of-memory errors, follow the below configuration suggestion.

[!TIP] FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

Increase Node Heap Memory

If you encounter an out-of-memory from Node, such as

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

you can increase the memory allocation by setting an environment variable

- name: Publish Test Report
  uses: mikepenz/action-junit-report@v6
  env:
    NODE_OPTIONS: "--max-old-space-size=4096"
  if: success() || failure() # always run even if the previous step fails
  with:
    report_paths: '**/build/test-results/test/TEST-*.xml'

Action outputs

After action execution it will return the test counts as output.

# ${{steps.{CHANGELOG_STEP_ID}.outputs.total}}

A full set list of possible output values for this action.

OutputDescription
outputs.totalThe total number of test cases covered by this test-step.
outputs.passedThe number of passed test cases.
outputs.skippedThe number of skipped test cases.
outputs.retriedThe number of retried test cases.
outputs.failedThe number of failed test cases.
outputs.summaryThe short summary of the junit report. In html format (as also constructed by GitHub for the summary).
outputs.detailed_summaryThe detailed summary in HTML, including a table and optional collapsible failed-test logs.
outputs.flaky_summaryThe full table with all flaky results in a summary. In html format (as also constructed by GitHub for the summary).
outputs.report_urlThe URL(s) to the test report(s). If multiple reports are created, they are separated by newlines.

PR run permissions

The action requires write permission on the checks. If the GA token is read-only (this is a repository configuration) please enable write permission via:

permissions:
  checks: write
  pull-requests: write # only required if `comment: true` was enabled

Additionally for security reasons, the github token used for pull_request workflows is marked as read-only. If you want to post checks to a PR from an external repository, you will need to use a separate workflow which has a read/write token, or use a PAT with elevated permissions.

Example

name: build
on:
  pull_request:

jobs:
  build:
    name: Build and Run Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3
      - name: Build and Run Tests
        run: # execute your tests generating test results
      - name: Upload Test Report
        uses: actions/upload-artifact@v3
        if: always() # always run even if the previous step fails
        with:
          name: junit-test-results
          path: '**/build/test-results/test/TEST-*.xml'
          retention-days: 1

---
name: report
on:
  workflow_run:
    workflows: [ build ]
    types: [ completed ]

permissions:
  checks: write

jobs:
  checks:
    runs-on: ubuntu-latest
    steps:
      - name: Download Test Report
        uses: dawidd6/action-download-artifact@v2
        with:
          name: junit-test-results
          workflow: ${{ github.event.workflow.id }}
          run_id: ${{ github.event.workflow_run.id }}
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v6
        with:
          commit: ${{github.event.workflow_run.head_sha}}
          report_paths: '**/build/test-results/test/TEST-*.xml'
          # Optional: if you want to add PR comments from workflow_run context  
          # comment: true
          # pr_id: ${{ github.event.workflow_run.pull_requests[0].number }}

This will securely post the check results from the privileged workflow onto the PR's checks report.

[!TIP] When running from workflow_run context, use the pr_id parameter to enable PR comments: pr_id: ${{ github.event.workflow_run.pull_requests[0].number }}

In environments that do not allow checks: write, the action can be configured to leverage the annotate_only option.

Example

name: pr

on:
  pull_request:

jobs:
  unit_test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Build and Run Tests
        run: # execute your tests generating test results

      - name: Write out Unit Test report annotation for forked repo
        if: ${{ failure() &&  (github.event.pull_request.head.repo.full_name != github.repository) }}
        uses: mikepenz/action-junit-report@v6
        with:
          annotate_only: true # forked repo cannot write to checks so just do annotations

This will selectively use different methods for forked and unforked repos.

## Contribute 🧬
# Install the dependencies  
$ npm install

# Verify lint is happy
$ npm run lint -- --fix

# Format
$ npm run format

# Build the typescript and package it for distribution
$ npm run build && npm run package

# Run the tests, use to debug, and test it out
$ npm test

Credits

Original idea and GitHub Actions by: https://github.com/ScaCap/action-surefire-report

Other actions

License

Copyright (C) 2025 Mike Penz

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
actions
automation
cd
ci
github-actions
hacktoberfest
junit
test
test-automation
workflow

Project health

Overall

7.7/10

Maintained

10/10

Code review

1/10

Contributors

10/10
OpenSSF Scorecard

Significant stargazers

Aurelia Molzer

141 followers Β· starred Feb 2021

David J. M. Karlsen

205 followers Β· starred Mar 2021

Yingchun Lai

142 followers Β· starred Dec 2023

Sam

823 followers Β· starred Jan 2023