| Development of this project is entirely funded by the community. Consider donating to support! |
GitHub Actions Test Logger is an extension for VSTest and Microsoft.Testing.Platform that reports test results to GitHub Actions. It lists failed tests in job annotations, highlights them in code diffs, and produces detailed job summaries about the executed test runs.
Terms of use[?]
By using this project or its source code, for any purpose and in any shape or form, you grant your implicit agreement to all the following statements:
- You condemn Russia and its military aggression against Ukraine
- You recognize that Russia is an occupant that unlawfully invaded a sovereign state
- You support Ukraine's territorial integrity, including its claims over temporarily occupied territories of Crimea and Donbas
- You reject false narratives perpetuated by Russian state propaganda
To learn more about the war and how you can help, click here. Glory to Ukraine! πΊπ¦
- π¦ NuGet:
dotnet add package GitHubActionsTestLogger
GitHub Actions Test Logger is available for both the classic VSTest test runner and the newer Microsoft.Testing.Platform.
Install the package in your test project and the provided test reporter will be detected and registered automatically.
The reporter is enabled by default when running in a GitHub Actions environment.
You can also enable it manually by adding the --report-github option when running tests:
name: main
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install .NET
uses: actions/setup-dotnet@v4
- name: Build & test
# Can also use with `dotnet run` or `dotnet exec`, depending on your setup.
# For .NET 9 and lower, add an extra empty double dash sequence (--) before reporter options.
run: dotnet test --configuration Release --report-githubImportant
If you are using Microsoft.Testing.Platform with xUnit v3, then make sure to replace the xunit.v3 package reference with xunit.v3.mtp-v2.
The base xunit.v3 package relies on MTP v1, which is incompatible with this extension.
Important
The extension has a peer dependency on the Microsoft.Testing.Platform package when used in this mode.
It is highly recommended to install the latest version of this package in your test project to ensure compatibility.
Warning
When used with Microsoft.Testing.Platform, do not mark the package reference to GitHubActionsTestLogger as private or exclude it from the build output.
If you are upgrading from older versions of the extension, make sure to remove PrivateAssets="all" from the package reference.
Install the package in your test project and enable the reporter by adding the --logger GitHubActions option when running tests:
name: main
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install .NET
uses: actions/setup-dotnet@v4
- name: Build & test
run: dotnet test --configuration Release --logger GitHubActionsImportant
If you are using VSTest with xUnit v3, then make sure to replace the xunit.v3 package reference with xunit.v3.mtp-off.
The base xunit.v3 package has a built-in dependency on MTP, which may cause conflicts with this extension.
Important
The extension has a peer dependency on the Microsoft.NET.Test.Sdk package when used in this mode.
It is highly recommended to install the latest version of this package in your test project to ensure compatibility.
Important
If you are using .NET SDK v2.2 or lower, you need to set the <CopyLocalLockFileAssemblies> property to true in your test project.
Note
When used with VSTest, the package reference to GitHubActionsTestLogger can be marked as private by adding PrivateAssets="all" to the package reference.
GitHub Actions Test Logger can leverage source information to link reported test results to the locations in the source code where the corresponding tests are defined. By default, VSTest does not collect source information, so the extension relies on stack traces to extract it manually. This approach only works for failed tests, and even then may not always be fully accurate.
To instruct the runner to collect source information, add the RunConfiguration.CollectSourceInformation=true argument to the command as shown below:
jobs:
build:
runs-on: ubuntu-latest
steps:
# ...
- name: Build & test
# Note that the space after the last double dash (--) is intentional
run: >
dotnet test
--configuration Release
--logger GitHubActions
--
RunConfiguration.CollectSourceInformation=trueNote
This option can also be enabled by setting the corresponding property in a .runsettings file instead.
Warning
Source information collection may not work properly with the legacy .NET Framework.
You can customize the behavior of GitHub Actions Test Logger by passing additional options when running tests. The format of these options differs slightly between Microsoft.Testing.Platform and VSTest.
With Microsoft.Testing.Platform, the options are prefixed with --report-github- and can be specified as separate arguments on the command line:
jobs:
build:
runs-on: ubuntu-latest
steps:
# ...
- name: Build & test
run: >
dotnet test
--configuration Release
--report-github
--report-github-annotations-title @test
--report-github-annotations-message @errorWith VSTest, the options don't have a prefix and are specified as part of the reporter configuration string, delimited by semicolons:
jobs:
build:
runs-on: ubuntu-latest
steps:
# ...
- name: Build & test
run: >
dotnet test
--configuration Release
--logger "GitHubActions;annotations-title=@test;annotations-message=@error"Use the [--report-github-]annotations-title option to specify the annotation title format used for reporting test failures.
The following replacement tokens are available:
@testβ replaced with the display name of the test.@errorβ replaced with the error message.@traceβ replaced with the stack trace.@frameworkβ replaced with the target framework.
Default: @test.
Examples:
@testβMyTests.Test1@test (@framework)βMyTests.Test1 (.NETCoreApp,Version=v6.0)
Use the [--report-github-]annotations-message option to specify the annotation message format used for reporting test failures.
Supports the same replacement tokens as the title format.
Default: @error.
Examples:
@errorβAssertionException: Expected 'true' but found 'false'@error\n@traceβAssertionException: Expected 'true' but found 'false', followed by stacktrace on the next line
Use the [--report-github-]summary-allow-empty option to specify whether empty test runs should be included in the summary.
Default: false.
Use the [--report-github-]summary-include-passed option to specify whether passed tests should be included in the summary.
Default: true.
Warning
If your test suite is really large, enabling this option may cause the summary to exceed the maximum allowed size.
Use the [--report-github-]summary-include-skipped option to specify whether skipped tests should be included in the summary.
Default: true.
Warning
If your test suite is really large, enabling this option may cause the summary to exceed the maximum allowed size.

