`customParameters` with a quoted value (`-testCategory "a;b"`, as the Unity manual shows) silently runs 0 tests since the CLI delegation
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 68/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- bash, docker, powershell, typescript
調査の方向性
まず dist/platforms/ubuntu/steps/test.sh の220-234行付近から始め、次に build.sh の163行目と build.ps1 の114行目にある同等の分割と比較します。引用符で囲まれた customParameters のケースを再現し、選択した動作が各スクリプト間で一貫していることを確認します。つまり、shell形式の引数の意図を維持するか、既存の契約を明確に文書化します。再現したワークフローが、テスト数0件の実行を成功として暗黙に報告しなくなるか、またはその制限が明示的に示されれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Bug description
The Unity Test Framework command-line reference — which game.ci's own customParameters docs link to — says a semicolon-separated list "should be formatted as a string enclosed in quotation marks", e.g. -testCategory "firstCategory;secondCategory". Those quotes are shell quotes: typed into a terminal, the shell removes them and Unity receives firstCategory;secondCategory.
Through the CLI's Docker path there is no layer that does that removal, so the quotes are delivered to Unity literally. Unity does not strip quotes from argv, the category filter matches nothing, and the run finishes with Test run completed. Exiting with code 0 (Ok). No tests were executed. — a green job that ran zero tests.
This is a behaviour change relative to the pre-CLI actions. unity-test-runner ≤ v4.3 / v5.0.0-beta.1 built the docker run argv with @actions/exec, whose argStringToArray toggles quote state and drops the quote characters, so the container env was already CUSTOM_PARAMETERS=-testCategory !IgnoreCI;!Integration … and the same workflow ran the full suite. Before #257 the CLI path crashed outright on this input (the inner " broke the --env NAME="…" wrapper); #257 correctly made the value reach the container verbatim, which turned the loud failure into this silent one. Escaping was the right fix at that layer — the remaining gap is in how test.sh splits CUSTOM_PARAMETERS.
How to reproduce
- uses: game-ci/[email protected] # → game-ci CLI v0.1.57
with:
customParameters: -testCategory "!IgnoreCI;!Integration" -testHelperScreenshotDirectory /github/workspace/artifacts/Screenshots
Unity's own argv dump in the log (6000.0.44f1, but identical on every version in the matrix):
COMMAND LINE ARGUMENTS:
…
-testCategory
"!IgnoreCI;!Integration"
…
Test run completed. Exiting with code 0 (Ok). No tests were executed.
- CLI v0.1.57, all five jobs green with
total="0": https://github.com/nowsprinting/UnityTestExamples/actions/runs/34415045587 - Same workflow on unity-test-runner v5.0.0-beta.1 (pre-CLI), 210 playmode + 1852 editmode tests executed: https://github.com/nowsprinting/UnityTestExamples/actions/runs/32160674823
Where it happens: dist/platforms/ubuntu/steps/test.sh expands $CUSTOM_PARAMETERS unquoted (v0.1.57 line 234) so it word-splits only — by design no eval, per the comment at lines 220-227. build.sh line 163 does the same, so unity-builder is affected the same way. build.ps1 (line 114) splits on whitespace and has the same limitation.
Expected behavior
Either
-
CUSTOM_PARAMETERSis split shell-style — quote removal, no expansion, no execution — so a value copied from the Unity manual works. One eval-free way: letxargsdo the parsing and only everprintfthe tokens back:mapfile -t customParameters < <(xargs printf '%s\n' <<< "$CUSTOM_PARAMETERS") … "${runTests[@]}" "${COVERAGE_FLAGS[@]}" "${customParameters[@]}"xargshonours single/double quotes and backslashes but never runs a shell, so the injection concern that ruled outevaldoesn't apply. (build.sh/build.ps1would want the same.)
or, if the split-on-whitespace contract is intentional,
- document on
customParametersthat values must not be quoted (the Unity manual's quoting is for interactive shells only), and ideally warn when a"or'is present inCUSTOM_PARAMETERS, since the current outcome — a green run that executed nothing — is the worst failure mode for a CI tool.
Additional details
- Related: #257 (verbatim env values — prerequisite for this to be observable), game-ci/unity-test-runner#310 (CLI delegation).
- The workaround on the user side is simply to drop the quotes (
-testCategory !IgnoreCI;!Integration); inside the container that is word-split into exactly the two argv entries Unity expects, and it also works on the pre-CLI actions.
- 主要言語
- TypeScript
- スター
- 20
- フォーク
- 11
- 平均マージ
- 5時間 28分
- マージ済み PR(30日)
- 4
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
game-ci/cli のほかの issue
-
bug
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
-
難易度 3/5 1〜2日 初心者へのやさしさ 73/100
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 32/100
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
AykutSarac/jsoncrack.com#616 ·
-
nip27: long hashtag swallows the rest of the content, lone # gives an empty hashtag対応中かも @bardrop が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
nbd-wtf/nostr-tools#578 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
backnotprop/plannotator#3427 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
microsoft/Power-CAT-Copilot-Studio-Kit#942 ·
メンテナーはふだん 1 日以内に返信
-
[BUG]: Duplicate preposition in heading and unformatted feedback text on Strengthen Argument pageオープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
AOSSIE-Org/DebateAI#801 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信