Skip to main content
Version: v4 (current)

Structured Build Output System

Orchestrator supports multiple build output types with structured manifests, per-type post-processing pipelines, and first-class GitHub integration.

Overview

Production Unity workflows produce many output types beyond a single build artifact — test results, screenshots, server builds, exported data, metrics, and logs. Each type needs different handling: storage, processing, reporting, and retention. The output system provides a structured way to declare, collect, process, and report on all of these.

Declaring Output Types

Specify which output types a build produces:

- uses: game-ci/unity-builder@v4
with:
targetPlatform: StandaloneLinux64
outputTypes: build,test-results,metrics,images

Built-in Output Types

TypeDefault PathDescription
build./Builds/{platform}/Standard game build artifact
test-results./TestResults/NUnit/JUnit XML test results
server-build./Builds/{platform}-server/Dedicated server build
data-export./Exports/Exported data files (CSV, JSON, binary)
images./Captures/Screenshots, render captures, atlas previews
logs./Logs/Structured build and test logs
metrics./Metrics/Build performance metrics, asset statistics
coverage./Coverage/Code coverage reports

Output Manifest

Every build produces a JSON manifest describing all outputs:

{
"buildGuid": "abc-123",
"timestamp": "2024-01-15T10:30:00Z",
"outputs": [
{
"type": "build",
"path": "./Builds/StandaloneLinux64/",
"size": 524288000,
"hash": "sha256:abc...",
"metadata": {
"platform": "StandaloneLinux64",
"scripting": "IL2CPP"
}
},
{
"type": "test-results",
"path": "./TestResults/editmode-results.xml",
"format": "nunit3",
"summary": {
"total": 342,
"passed": 340,
"failed": 1,
"skipped": 1
}
},
{
"type": "images",
"path": "./Captures/",
"files": ["main-menu.png", "gameplay-01.png"]
},
{
"type": "metrics",
"path": "./Metrics/build-metrics.json",
"metadata": {
"compileTime": 45.2,
"assetCount": 12500,
"buildSize": 524288000
}
}
]
}

Control manifest output with:

outputManifestPath: ./build-manifest.json

Post-Processing Pipelines

Each output type has a configurable processing pipeline that runs after the build:

Test Results

Parse test result XML files and report to GitHub:

outputPipelines:
test-results:
- parse: nunit3
- report: github-checks
- archive: s3

Test results appear as inline annotations on pull request files, showing exactly where failures occurred.

Image Captures

Thumbnail, diff against baselines, and attach to PRs:

outputPipelines:
images:
- thumbnail: { maxWidth: 256 }
- diff: { baseline: ./Baselines/ }
- report: github-pr-comment

Provide a baseline directory for visual regression testing:

imageBaselinePath: ./Tests/Baselines/

Build Metrics

Aggregate metrics and track trends across builds:

outputPipelines:
metrics:
- aggregate: { groupBy: platform }
- trend: { history: 30 }
- report: github-check-summary

Set the number of historical builds to retain for trend analysis:

metricsHistory: 30

Custom Output Types

Register project-specific output types:

customOutputTypes:
- name: addressables-catalog
path: ./ServerData/
postProcess:
- validate: json-schema
- upload: cdn
- name: localization-export
path: ./Exports/Localization/
postProcess:
- validate: csv
- archive: s3

Custom types can also be defined in a file at .game-ci/output-types.yml.

GitHub Integration

Output types automatically integrate with GitHub CI surfaces:

Output TypeGitHub Surface
Test resultsCheck annotations — inline failure markers on PR diffs
ImagesPR comment — image grid with baseline diffs
MetricsCheck summary — trend charts and delta tables
CoveragePR comment — coverage percentage and delta
Build artifactsCheck run — download links

Combining with Test Suites

The output system works with the Test Workflow Engine to provide structured test results per suite run:

- uses: game-ci/unity-builder@v4
with:
testSuitePath: .game-ci/test-suites/pr-suite.yml
testResultFormat: both # junit + json
testResultPath: ./TestResults/
outputTypes: test-results,metrics,coverage

Each test suite run produces its own output entries in the manifest.

Combining with Hot Runners

Hot runners can produce multiple output types per job. The output manifest is returned as part of the job result:

- uses: game-ci/unity-builder@v4
with:
editorMode: persistent
outputTypes: build,test-results,images,metrics

Inputs Reference

InputDescription
outputTypesComma-separated output types to collect
outputManifestPathPath for the output manifest JSON file
outputPipelinesYAML defining per-type post-processing pipelines
customOutputTypesYAML defining project-specific output types
imageBaselinePathPath to baseline images for visual regression diffing
metricsHistoryNumber of historical builds for trend tracking