Draft: ci: report every Go test suite to the pipeline test report
What
Add --junitfile to every project-owned gotestsum invocation and declare the resulting report, so each Go suite appears in the pipeline's Test report tab.
Why
The tab currently shows two things: go_unittests, whose gotestsum invocation belongs to the golang-build component, and the two OCI/Maven conformance jobs, which wire JUnit because docs/plans/2026-05-15-oci-hosted.md:282 asked them to. On pipeline 2789914450 that is 19,829 unit tests plus 181 conformance tests. Every project-owned integration suite is absent.
That absence is not a decision. !725 (merged) introduced gotestsum across these jobs and scoped itself to console readability; its "Out of scope" section names the fuzz jobs, test:storage-failpoints and go_unittests, and neither the description nor any of its twenty notes mentions JUnit. --junitfile was never weighed.
gotestsum already runs go test -json and holds the parsed results, so --junitfile writes the report from data it has. Nothing re-runs and nothing is re-parsed.
How
--junitfileon all 15 invocations in.gitlab-ci.yml, plusscripts/ci/datastore-test-shard.sh.when: alwayson the artifact blocks. The default,on_success, uploads nothing from a failed job, which would withhold the report in the one case a reviewer opens the tab for. Blocks that already carried acoverage_reportinherit it, so a cobertura artifact now survives a red suite too.- Jobs with no coverage profile share a new
.junit-reportanchor. The rest spell the two keys inline, because a YAML merge key replacesreports:wholesale instead of merging into it, so reusing the anchor beside acoverage_reportwould silently drop the coverage entry.
Interaction with this MR's target branch
Targets dmeshcharakou/751-shard-datastore-integration (!1781), which this MR's changes touch directly:
- The datastore shards get
--junitfile coverage/junit-pg${PG_VERSION}-shard${SHARD}.xml, named per matrix instance for the reason that branch already documents for the coverage profile: the aggregator'sneeds:pulls all twelve instances' artifacts into one workspace, where same-named files overwrite each other. - The shard job's "no
artifacts:reports:here" comment reasoned about the coverage mean. JUnit does not enter that mean, so the comment now says which of the two it rules out and why. test:integration:datastore:coveragemoves off the*cobertura-reportanchor to an explicit cobertura-only block. It runs no tests, so inheriting the anchor'sjunit:would either find no file or, once the shard reports are downloaded there, count every datastore test a second time.
Test plan
CI is the test for a CI change. glab ci lint passes and shellcheck is clean on the shard script. After the pipeline runs, the Test report tab should gain a suite per integration job, named after the job.
Known gap
!1781 branches from a25d29e44, which predates test:lifecycle-failpoints on main. That job does not exist on this base, so it gets no JUnit wiring here and will need it re-applied when !1781 rebases onto main.