microcks / microcks/microcks-cli

feat: add JUnit XML output format and --output-file flag for CI/CD test reporting

Open
#386 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
52
Forks
68
Avg merge
6h 54m
Merged PRs (30d)
10

Description

Context:
Maintainer @Harsh4902 raised in #301: "can we store this output at a particular location for further usage?" — this issue directly addresses that question.

CI/CD platforms natively consume JUnit XML for test reporting:

  • GitHub Actions: renders test results in PR summaries via junit-reporter
  • Jenkins: JUnit plugin reads XML natively, no extra config
  • GitLab CI: artifacts: reports: junit: picks it up automatically
  • CircleCI: store_test_results uses JUnit XML

Currently microcks test only outputs to stdout. There is no way to :

  1. Write results to a file for artifact upload or downstream tooling
  2. Produce JUnit XML that CI dashboards can render natively

This forces teams to parse text output with fragile regex, defeating the purpose of structured CI integration.

Description :
Two additive features, cleanly separated :

  1. --output-file=<path> flag
    Write test results to a file instead of (or in addition to) stdout.
    Enables GitHub Actions artifact uploads, local file caching, and script pipelines without output redirection hacks.
microcks test ... --output json --output-file results.json
microcks test ... --output junit --output-file results.xml
  1. junit output format
    A new format value for the --output flag (building on #371's pkg/output Formatter interface) :

Non-breaking: both flags are opt-in. Default behavior (text to stdout) unchanged.
Builds on #371: reuses the pkg/output Formatter interface — JUnit is just another Formatter implementation.

Implementation ideas:

  1. Add --output-file= to cmd/test.go — open the file, pass an io.Writer to the formatter :

var out io.Writer = os.Stdout
if outputFile != "" {
f, err := os.Create(outputFile)
if err != nil { ... }
defer f.Close()
out = f
}

  1. Add JUnitFormatter to pkg/output/ implementing the Formatter interface from #371:

type JUnitFormatter struct{}

func (f *JUnitFormatter) Format(result *TestResult, w io.Writer) error {
// marshal to encoding/xml JUnit structs
}

  1. JUnit XML structs (stdlib encoding/xml — zero new dependencies) :

type JUnitTestSuites struct {
XMLName xml.Name xml:"testsuites"
Suites []JUnitTestSuite xml:"testsuite"
}
type JUnitTestSuite struct {
Name string xml:"name,attr"
Tests int xml:"tests,attr"
Failures int xml:"failures,attr"
Cases []JUnitTestCase xml:"testcase"
}

no new dependencies — uses only stdlib encoding/xml.

happy to implement once the pkg/output foundation from #371 lands.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in cmd/test.go and review the pkg/output Formatter interface from #371 before choosing the integration points. Define the JUnit structures in pkg/output using Go's encoding/xml, support --output-file for formatter output, and verify that default stdout behavior remains unchanged while JSON and JUnit files contain the expected results.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
cli, testing
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.