{"id":28541440,"url":"https://github.com/zestia/junit-results-aggregator","last_synced_at":"2026-05-15T21:07:01.530Z","repository":{"id":144843448,"uuid":"474063579","full_name":"zestia/junit-results-aggregator","owner":"zestia","description":"GitHub Action for aggregating JUnit XML reports from multiple jobs","archived":false,"fork":false,"pushed_at":"2025-03-11T14:59:59.000Z","size":2393,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-08-18T09:49:32.103Z","etag":null,"topics":["actions","ci","github-actions","junit","testing-tools"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zestia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-25T15:25:23.000Z","updated_at":"2025-03-11T14:59:01.000Z","dependencies_parsed_at":"2024-01-29T17:06:50.106Z","dependency_job_id":"e3b8ce89-2d82-4026-871d-947da2f023df","html_url":"https://github.com/zestia/junit-results-aggregator","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/zestia/junit-results-aggregator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zestia%2Fjunit-results-aggregator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zestia%2Fjunit-results-aggregator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zestia%2Fjunit-results-aggregator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zestia%2Fjunit-results-aggregator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zestia","download_url":"https://codeload.github.com/zestia/junit-results-aggregator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zestia%2Fjunit-results-aggregator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33080434,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","ci","github-actions","junit","testing-tools"],"created_at":"2025-06-09T20:08:32.174Z","updated_at":"2026-05-15T21:07:01.525Z","avatar_url":"https://github.com/zestia.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JUnit Results Aggregator\n\nGitHub action that aggregates JUnit results published from multiple jobs using\n[zestia/junit-results-toolkit][junit-results-toolkit].\n\n[junit-results-toolkit]: https://github.com/zestia/junit-results-toolkit\n\n## Usage\n\nGiven the following workflow:\n\n```yaml\njobs:\n  java-build:\n    steps:\n      # ... test steps omitted ...\n      - name: Parse Test Results\n        uses: zestia/junit-results-toolkit@v2\n        id: test-results\n        if: ${{ always() }}\n        with:\n          files: '**/TEST-*.xml'\n\n  jest-build:\n    # ... test steps omitted ...\n    - name: Parse Test Results\n      uses: zestia/junit-results-toolkit@v2\n      id: test-results\n      if: ${{ always() }}\n      with:\n        files: 'junit.xml'\n```\n\nThe results from the two jobs can be aggregated using:\n\n```yaml\njobs:\n  java-build:\n    # ...\n  jest-build:\n    # ...\n\n  reporting:\n    needs:\n      - java-build\n      - jest-build\n    if: ${{ always() }}\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: zestia/junit-results-aggregator@v2\n        id: test-results\n\n      - name: Echo Aggregate Results\n        run: |\n          echo \"Aggregated Test Results:\"\n          echo \"  Suites:  ${{ fromJson(steps.test-results.summary.test.results).passed }}\"\n          echo \"  Passed:  ${{ fromJson(steps.test-results.outputs.test.results).passed }}\"\n          echo \"  Failed:  ${{ fromJson(steps.test-results.outputs.test.results).failed }}\"\n          echo \"  Skipped: ${{ fromJson(steps.test-results.outputs.test.results).skipped }}\"\n```\n\n**Note:** it is important to add an `if` clause to ensure that the test results are always aggregated.\n\nA new artifact called `summary-test-report` will be created containing the following:\n\n- `test-report.html` - HTML report summarising the results of each project.\n- `project-summary.json` - JSON summary of the projects (see [test-results](#test-results) for contents).\n- `java-build-report.html` - HTML report fetched from the `java-build` job.\n- `jest-build-report.html` - HTML report fetched from the `jest-build` job.\n\n## Options\n\n| Name             | Description                                                                     | Default                               |\n| ---------------- | ------------------------------------------------------------------------------- | ------------------------------------- |\n| `retention-days` | Number of days to retain the report artifact.                                   | Repository default (usually 90 days). |\n| `upload-report`  | If `true` then an HTML report will be generated \u0026 uploaded to `$artifact-name`. | `true`                                |\n| `artifact-name`  | Name of the artifact to use when uploading HTML report.                         | `summary-test-report`                 |\n\n## Outputs\n\n### `test-results`\n\nSummary of test results in JSON format.\n\nFor example:\n\n```json\n{\n  \"name\": \"CI\",\n  \"projects\": [\n    {\n      \"name\": \"java-build\",\n      \"summary\": {\n        \"startTime\": 1648221085000,\n        \"duration\": 0.032,\n        \"passed\": 2,\n        \"failed\": 0,\n        \"skipped\": 0,\n        \"tests\": 2\n      },\n      \"suites\": [\n        {\n          \"startTime\": 1648221085000,\n          \"duration\": 0.017,\n          \"tests\": 1,\n          \"passed\": 1,\n          \"failed\": 0,\n          \"skipped\": 0\n        },\n        {\n          \"startTime\": 1648221085000,\n          \"duration\": 0.015,\n          \"tests\": 1,\n          \"passed\": 1,\n          \"failed\": 0,\n          \"skipped\": 0\n        }\n      ]\n    },\n    {\n      \"name\": \"jest-build\",\n      \"summary\": {\n        \"startTime\": 1648221058000,\n        \"duration\": 0.005,\n        \"passed\": 0,\n        \"failed\": 1,\n        \"skipped\": 0,\n        \"tests\": 1\n      },\n      \"suites\": [\n        {\n          \"startTime\": 1648221058000,\n          \"duration\": 0.005,\n          \"tests\": 1,\n          \"passed\": 0,\n          \"failed\": 1,\n          \"skipped\": 0\n        }\n      ]\n    }\n  ],\n  \"summary\": {\n    \"startTime\": 1648221058000,\n    \"duration\": 0.037,\n    \"tests\": 3,\n    \"passed\": 2,\n    \"failed\": 1,\n    \"skipped\": 0\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzestia%2Fjunit-results-aggregator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzestia%2Fjunit-results-aggregator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzestia%2Fjunit-results-aggregator/lists"}