CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

testland/ci-test-job-conventions

Use when designing how tests run in CI on any platform (GitHub Actions, GitLab CI, Jenkins, CircleCI): how many shards, which failures are safe to retry, quarantine, artifact retention, per-PR vs nightly cadence, cancel-on-push, timeouts and secrets. CircleCI config patterns are in its references.

Quality

89%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Overview
Quality
Evals
Security
Files

junit-and-cache-lookups.mdreferences/

CI JUnit and cache-key lookup tables

Deep reference for ci-test-job-conventions SKILL.md. Consult by CI platform and language once the workflow's shard / retry / cadence decisions are made - these tables carry no design decisions, only the concrete mechanism per platform and per language.

JUnit XML reporting (cross-CI standard)

Every modern CI accepts JUnit XML via either a native plugin or a third-party action:

CIJUnit XML support
GitHub Actionsdorny/test-reporter action
GitLab CIartifacts.reports.junit: (native)
Jenkinsjunit '...' (JUnit Plugin; native)
CircleCIstore_test_results: (native; feeds Insights)

Always emit JUnit XML; the same output feeds every CI's reporting and the downstream junit-xml-analysis parser (in the qa-test-reporting plugin).

Per-language standard reporters

LanguageDefault reporterJUnit XML output
JavaScript (Jest)defaultjest-junit (separate package)
TypeScript(same as JS)(same)
Python (pytest)pytestpytest --junitxml=reports/junit.xml
Java (Maven)Surefiretarget/surefire-reports/*.xml (default)
Java (Gradle)Gradle Testbuild/test-results/test/*.xml (default)
.NETdotnet test--logger "junit;LogFilePath=..."
Gogo testgotestsum --junitfile=junit.xml
Ruby (RSpec)RSpec--format RspecJunitFormatter --out junit.xml

The same JUnit XML feeds every CI's reporting + downstream analysis tools.

Per-language cache strategies

Per-language cache key recommendations:

  • Node: cache key on package-lock.json hash
  • Python: cache key on requirements.txt / poetry.lock hash
  • Java (Maven): cache key on pom.xml hash; cache ~/.m2
  • Java (Gradle): cache ~/.gradle
  • Go: cache ~/go/pkg/mod on go.sum hash
  • Rust: cache ~/.cargo on Cargo.lock hash

Benefits: repeat installs are sub-second vs 30s-2min cold. Trade-off: cache eviction when key changes; extra config to manage.

SKILL.md

tile.json