Skip to content

Commit fc8c870

Browse files
committed
fix: sync-secrets wrote "-" as the value of every secret it synced
`gh secret set` reads the value from stdin only when --body is NOT passed. `--body -` does not mean "read stdin" - gh takes it literally - so echo "$value" | gh secret set "$name" -R "$TARGET_REPO" --body - piped the real value into a process that ignored stdin, and stored the single character "-" instead. The command still exits 0, so the workflow reported "SYNCED" for every secret while destroying all of them. Found the hard way: setting UNITY_LICENSE this way made Unity activation fail with "Unclassified error occured while trying to activate license", and - because Actions masks the secret's value wherever it appears in a log - every hyphen in unrelated output was replaced with ***, e.g. Unable to find image 'unityci/editor:ubuntu***2022.3.7f1***linux***il2cpp***3' which is what made the real cause obvious. Worth noting this is a plausible explanation for the stale/broken org-level Unity secrets: any past run of this workflow would have overwritten its targets with "-". Passes the value via --body directly. Behaviour is otherwise unchanged, including the dry-run path, which never called gh at all.
1 parent c8afce7 commit fc8c870

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

.github/workflows/sync-secrets.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,14 @@ jobs:
7070
if [ "$DRY_RUN" = "true" ]; then
7171
echo "🔍 DRY RUN: would sync $name → $TARGET_REPO"
7272
else
73-
if echo "$value" | gh secret set "$name" -R "$TARGET_REPO" --body - 2>/dev/null; then
73+
# `gh secret set` reads the value from stdin only when --body is
74+
# NOT passed. `--body -` does not mean "read stdin" - gh takes it
75+
# literally, so this wrote the single character "-" as the value
76+
# of every secret it synced, silently destroying them. (A secret
77+
# whose value is "-" also makes Actions mask every hyphen in the
78+
# logs, which mangles unrelated output like image tags:
79+
# "unityci/editor:ubuntu***2022.3.7f1***linux***il2cpp***3".)
80+
if gh secret set "$name" -R "$TARGET_REPO" --body "$value" 2>/dev/null; then
7481
echo "✅ SYNCED: $name → $TARGET_REPO"
7582
else
7683
echo "⚠️ FAILED: $name → $TARGET_REPO (continuing)"

0 commit comments

Comments
 (0)