Conversation
…erving report generation
…ure indented subtest results
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes applied to all 4 Go workflows (app + lib, pull_requests + push_main):
EXTRA_JUNIT_REPORT input parameter
Allows caller workflows to specify a path to an additional JUnit XML report file (e.g., from Python integration tests running inside Docker containers). Optional, defaults to empty string — no impact on existing
workflows that don't use it.
coverage/e2e directory
Added to the coverage output directories step. Separates coverage from application binaries running inside Docker (hit by external tests like Python) from Go integration test coverage (coverage/int) and unit test
coverage (coverage/unit). Codecov merges all uploads automatically.
Stdout/stderr separation for integration tests
Changed 2>&1 | tee to > >(tee ...) 2> >(tee ... >&2). Go's log.Println (used by testcontainers-go) writes to stderr, but 2>&1 mixed it into stdout. This caused go-junit-report to parse Python test output lines
(like ok (0.003s)) as Go test cases, producing ghost entries in the Integration Test Report. Separating streams keeps only Go test output in integration_test_output.txt.
Grep filter before go-junit-report
Filters integration_test_output.txt to only keep lines matching Go test framework patterns (=== RUN, --- PASS, PASS, FAIL, ok, coverage:, etc.) before passing to go-junit-report. This is a second line of defense
against non-Go output leaking into the JUnit report, since go test -v re-emits all test binary output through its own stdout regardless of stderr separation.
fail-on-error: 'false' on Integration Test Report
The dorny/test-reporter action defaults to failing the job when it detects test failures in the JUnit XML. With mixed Go/Python output, go-junit-report could produce false failures that would block the entire CI
pipeline. Setting this to false is safe because the go test step itself already fails the job via exit code if tests actually fail. The reporter is purely for display purposes.
Extra Test Report steps
Two new steps that run when EXTRA_JUNIT_REPORT is set: dorny/test-reporter (displays results as a GitHub check with individual test names) and codecov-action@v5 (uploads results to Codecov test analytics). Both
use success() || failure() condition so they run even if the Integration Test Report step fails.
E2e coverage build + upload steps
Converts coverage data from coverage/e2e/ (collected from Docker containers built with -cover) to text format and uploads to Codecov with the e2e flag. This keeps e2e coverage separate from the combined
unit+integration coverage upload, giving visibility into how much code is exercised by external tests vs. Go tests.
Coverage flags and integration test coverage collection (push_main)
Added INTEGRATION_COVERAGE=true, -cover, and -test.gocoverdir flags to integration test runs that were missing them. This ensures integration test coverage is collected on push-to-main, not just on pull requests.