Repository navigation
Releases: Cuvara/unity-build-workflows
Releases · Cuvara/unity-build-workflows
Release list
v7.0.3
v7.0.2
v7.0.1
Fixed
- A firebase-storage Production build never reached Google Play.
fastlane android upload_internalpassedrelease_notes:to
upload_to_play_store, which has no such option, so every direct-to-store
upload failed with "Could not find option 'release_notes' in the list of
available options". The step iscontinue-on-error, so the build stayed
green while nothing reached the internal track. The lane now writes the
notes to<metadata_path>/<locale>/changelogs/default.txt, where supply
reads them, but only whenGOOGLE_PLAY_RELEASE_NOTES_LOCALEnames a Play
listing language. Without one, the release goes up without notes rather
than failing on a language the listing lacks.
tests/test_fastfile_play_upload.pychecks everyupload_to_play_store
call against supply's options.
v7.0.0
Removed — BREAKING
- The
unity-build.ymlfamily of reusable workflows (deprecated since
6.23.0):unity-build.yml,unity-build-android.yml,
unity-build-webgl.yml,unity-build-linux.yml,unity-build-ios.yml,
unity-build-gameci.yml,unity-validate.yml,unity-test.yml,
unity-test-ios.yml,unity-nightly.yml,unity-release.ymland
unity-release-ios.yml. Nothing in the current flow or the numbered
consumer templates called them. - The templates
project-workflow.ymlandconsumer-unity-build.yml, and
examples/sample-unity-project-integration/. - The ten composite actions that only those workflows used:
activate-unity,build-ios,build-unity,collect-container-output,
discord-notify,resolve-unity-image,restore-docker-cache,
run-unity-container,upload-build-reportandvalidate-unity-project. docs/ADD_NEW_PROJECT.md(onboarding for the removed flow), replaced by
docs/CONSUMER_SETUP.md.
Migration: docs/MIGRATION_V7.md. A project that
calls only unity-pipeline.yml and pipeline-*-release.yml moves from @v6
to @v7 with no other change. @v6 stays at the last 6.x release for projects that have
not moved. The consumer templates now pin @v7.
Changed
- With the native iOS route gone, every lane's build entry point can be
overridden bybuild-method/UNITY_BUILD_METHOD. The "two iOS routes,
two entry points" inconsistency documented indocs/ARCHITECTURE.mdand
CLAUDE.mdno longer exists.
v6.25.0 — live Unity log in the build step
Changed
- The Unity log is shown live in the build step. On the native lanes
(self-hosted macOS / Windows, the Addressables pre-step, Unity tests and the
Windows docker container) Unity writes only to its-logFile, so "Build
with local Unity" showed justUnity binary: …for the whole build.
scripts/build/run_unity_player.shnow follows the log file into the step
output while Unity runs (tail -F), keeping Unity's exit code; the file is
still written for the steps that parse and upload it. A log left by an
earlier run is removed first so it is not replayed.UNITY_LOG_STREAM=0
turns streaming off. GitHub masks registered secrets in the step output.
Tests
- A failed artifact-manifest or IPA-manifest upload (a full Actions storage
quota) must not block the store uploads: both uploads keep
continue-on-error, run before "Deliver the build", and the delivery step
still receivesjob.status. Pinned intest_firebase_delivery_paths.py.
Upgrade: @v6 now points to this release. Pin @v6.25.0 for an exact version.
Full changelog: v6.24.2...v6.25.0
v6.24.2
Changed
- One SSH submodule fetch for the build and the tests job. The 50-line
"Fetch submodules over SSH" step was copied verbatim into
reusable-build-platform.ymlandreusable-unity-tests.yml. It is now
scripts/common/fetch_submodules_ssh.sh. To run it, both jobs check the
toolkit out right after the project checkout: earlier than before in the
build job, and in the tests job also whensubmodule-authisssh, not
only on the native lanes. - The Windows Git Bash step stays a copy, held identical by a test. It
runs before any checkout, because it setscore.longpathsfor the project
checkout, which would clean away a toolkit checked out first. So it cannot
come from the toolkit.tests/test_shared_job_steps.pyfails when the two
jobs' copies differ. - One way to get the bot token. Seven workflows carried the same ~55
lines of Node.js that signed a GitHub App JWT and exchanged it for an
installation token:auto-merge,auto-release,version-bump,
build-pr-comment,license-rotation,sync-org-variablesand
unity-generate-license. They now useactions/create-github-app-token,
pinned to v3.2.0 by SHA, with the same scope (the whole installation on
the repository owner). It needs no checkout (most of them mint the token
before checking out), masks the token, and revokes it when the job ends.
unity-generate-licensestill skips with a "set it by hand" warning when
APP_ID/APP_PRIVATE_KEYare absent. The action prefersclient-id
over the deprecatedapp-id; switching needs anAPP_CLIENT_IDsecret.
v6.24.1
Changed
- Stage 01's matrix is a script. The ~300-line inline bash of
unity-pipeline.yml's "Resolve build matrix" step is
scripts/common/resolve_build_matrix.sh, unchanged except that it finds
itsmatrix_runner_labels.pyhelper beside itself instead of probing five
candidate paths. The step's env is its whole input, as before. The test
harness runs the file rather than abash -cof the extracted step text.
unity-pipeline.ymlis down to about 1900 lines.
v6.24.0
Changed
- The build leg's result is written by a script. "Set job outputs" in
reusable-build-platform.ymlwas ~100 lines of bash that built the result
JSON withprintf. It is nowscripts/build/write_build_result.py: same
file (pipeline-results/build-<Platform>.json), same fields in the same
order, same outputs (result-jsonstill hex). A blocked iOS leg, which has
no toolkit checkout, still reportsblockedthrough a short bash fallback. - The Windows docker lane's container script is a file. The ~90-line
PowerShell array of bash lines (Unity serial activation, then
run_unity_player.sh) isscripts/build/docker_windows_container.sh, run
from the mounted workspace. It now prints the Editor.log tails when the
build fails, whichset -ehad skipped. - The native test lanes run
run_unity_player.sh --tests. The Windows
(PowerShell) and macOS (bash) "Run tests" steps ofreusable-unity-tests.yml
are one bash step,Run tests (self-hosted).--tests EditMode|PlayMode|All
with--results-dirwrites<dir>/<mode>/results.xmlandEditor.log, as
before, and always exits 0 (the verdict is the parsed results).
Fixed
- A Unity error message could run as shell. The first error from the
Unity log was spliced into the "Set job outputs" script by${{ }}, so a
message containing$(...)or a backtick was executed by bash. Every value
now reaches the script throughenv:and is serialized byjson. - A full artifact storage quota failed an iOS build that had shipped.
"iOS — Upload IPA artifact manifest" had nocontinue-on-error, unlike the
build's own manifest upload, so a run whose IPA was archived, exported and
delivered to Firebase went red. It is nowcontinue-on-error, and "iOS —
Upload signed IPA" matches the build artifact upload (tolerated on
self-hosted runners). - The macOS test lane reported the wrong exit code (
$?of theechoin
its warning);--testsreports Unity's.
v6.23.2
Changed
- The report jobs share one script. Final Report and Notify Discord held
about 400 lines of inline Python over the same build results, and the
"fill missing results from the build outputs" block was copied into both.
That logic is nowscripts/common/pipeline_results.py(fill-missing,
final-report,discord-status,attachable,diagnostics), tested on its
own, and the jobs call it.unity-pipeline.ymldrops from 2708 to about
2200 lines. The report and the Discord message are unchanged.
Fixed
- Discord lost its error and warning counts in v6.23.0. The counts were
grepped fromEditor.login the downloaded log artifacts, and Notify
Discord stopped downloading those when it began downloading only what it
can attach. They now come from each build leg's own log summary (the result
file'serrorCount/warningCount), with a newlogMeasuredfield so a
lane that wrote no Editor log (Docker / game-ci) still shows no count,
instead of a zero nobody measured.summarise_unity_log.pygains a
log-foundoutput.
v6.23.1 — iOS Pods at the project's minimum iOS
Fixed
- iOS archive still failed on Pods below Xcode's minimum (v6.22.6). The
deployment-target read fromUnity-iPhone.xcodeprojcame back empty on the
Mac, so Pods kept 9.0-13.0. The minimum now comes from the project's
Player Settings (iOSTargetOSVersionString, read by "iOS — Find Xcode
project" and passed as the newios-archive-exportinput
deployment-target);xcode_archive.shfalls back to the project file
(parsed withgrep -o, portable) and then to
xcodebuild -showBuildSettings, and its warning now says what it found.
Upgrade: @v6 now points to this release. Pin @v6.23.1 for an exact version.
Full changelog: v6.23.0...v6.23.1