=head1 NAME

=encoding UTF-8

go-junit-report - convert Go test output to JUnit XML

=head1 SYNOPSIS

B<go-junit-report> [B<-in> I<file>] [B<-out> I<file>] [I<options...>]

B<go-junit-report> B<-version>

B<go-junit-report> B<-help>

=head1 DESCRIPTION

B<go-junit-report> is a tool that converts B<go test> output to a JUnit
compatible XML report, suitable for use with applications such as Jenkins
or GitLab CI.

By default, B<go-junit-report> reads B<go test -v> output generated by the standard
library testing package from stdin and writes a JUnit XML report to
stdout.

Go build and runtime errors are also supported, but this requires that stderr
is redirected to B<go-junit-report> as well.

Typical use looks like this:

    go test -v 2E<gt>&1 ./... | go-junit-report -set-exit-code E<gt> report.xml

Alternatively, B<go-junit-report> can consume JSON output of B<go test>. In this case,
stderr still needs to be redirected for build errors to be detected.

    go test -json 2E<gt>&1 | go-junit-report -parser gojson E<gt> report.xml

The B<-iocopy> flag copies stdin directly to stdout, which is useful to still be
able to see the B<go test> output.

    go test -v 2E<gt>&1 ./... | go-junit-report -set-exit-code -iocopy -out report.xml

=head1 OPTIONS

=over

=item B<-in> I<file>

Read the log from file. If not specified, stdin is used.

=item B<-out> I<file>

Write XML report to file. If not specified, stdout is used.

=item B<-iocopy>

Copy input to stdout. Can only be used in conjunction with B<-out>.
This is useful if you want to see what was sent to B<go-junit-report>.

=item B<-no-xml-header>

Do not print the XML header.

=item B<-p> I<key>B<=>I<value>

Add a I<key>=I<value> property to generated report. Repeat this flag to add
multiple properties.

=item B<-package-name> I<name>

Specify a default package name to use if test log does not contain a
package name.

=item B<-parser> I<string>

Set input parser type: B<gotest> or B<gojson> (default: B<gotest>).

=item B<-set-exit-code>

Set exit code to 1 if tests failed.

=item B<-subtest-mode> I<mode>

Set subtest mode: B<ignore-parent-results> (subtest parents always pass),
B<exclude-parents> (subtest parents are excluded from the report).

=item B<-help>

Print a summary of command-line options.

=item B<-version>

Print the B<go-junit-report> version.

=item B<-debug.print-events>

print events generated by the go test parser

=item B<-go-version> I<string>

(deprecated, use B<-prop>) the value to use for the go.version
property in the generated XML

=back

=head1 EXIT STATUS

If B<go-junit-report> encounters an error during its operation, or doesn’t understand its command-line options, 2 is returned.

If the input logs indicate the tests failed, and B<-set-exit-code> is specified, 1 is returned.

Otherwise, 0 is returned.

=head1 COPYRIGHT

Copyright (C) 2025 Andrej Shadura.
