Skip to content

Fix targeting and the re-run push, found by the first real submit - #118

Merged
ralyodio merged 1 commit into
mainfrom
fix/distribute-targeting-and-push
Sep 24, 2026
Merged

ralyodio merged 1 commit into
mainfrom
fix/distribute-targeting-and-push

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Publishing Chocolatey for real turned up three things earlier runs could not have shown, because no run had ever reached the submit path.

Asking for one channel ran all of them. The Linux job stripped chocolatey out of the list with sed, so -p chocolatey left the list empty, no -p flags were passed, and submit-packages.mjs falls back to ALL on an empty target list. A dispatch for chocolatey alone therefore also pushed homebrew and scoop. They were idempotent and reported "already current", so nothing was damaged — but the next such dispatch would not be so lucky.

That same sed is why distribution/chocolatey/* was never refreshed in git. Only the Windows job templated those two files, and the Windows job has no commit step. The Linux job now templates every channel, chocolatey included, and the chocolatey submitter skips itself when choco is not on PATH — Windows still packs and pushes. It probes by running the command rather than which/where, which differ between the Linux runner and the Windows one's git-bash.

--force-with-lease was rejected with "stale info". The release checkout is a shallow clone of a single ref, so refs/remotes/origin/<branch> does not exist and the lease has nothing to form against. Fetch the branch first and pass the expected commit explicitly, and it does what it was meant to: overwrite our own earlier attempt, refuse if someone else moved it.

Verified locally: -p chocolatey on Linux templates the manifest and reports that Windows will push it, instead of dying on a missing binary.

🤖 Generated with Claude Code

Publishing chocolatey for real turned up three things the earlier runs could not
have shown, because no run had ever reached the submit path.

Asking for one channel ran all of them. The Linux job stripped chocolatey out of
the list with sed, so `-p chocolatey` left the list empty, no `-p` flags were
passed, and submit-packages.mjs falls back to ALL on an empty target list. A
dispatch for chocolatey alone therefore also pushed homebrew and scoop. They
were idempotent and reported "already current", so nothing was damaged, but the
next such dispatch would not be so lucky.

That sed was also why distribution/chocolatey/* was the one pair of manifests
never refreshed in git: only the Windows job templated them, and the Windows job
has no commit step. The Linux job now templates every channel, chocolatey
included, and the chocolatey submitter skips itself when choco is not on PATH --
Windows still does the packing and pushing. It probes by running the command
rather than which/where, which differ between the Linux runner and the Windows
one's git-bash.

And --force-with-lease was rejected with "stale info" on the re-run. The release
checkout is a shallow clone of a single ref, so refs/remotes/origin/<branch>
does not exist and there is nothing for the lease to form against. Fetch the
branch first and pass the expected commit explicitly, and it does what it was
meant to: overwrite our own earlier attempt, refuse if someone else moved it.

Verified: `-p chocolatey` on Linux now templates the manifest and prints that
Windows will push it, instead of exploding on a missing binary.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

ThreatCrush Security Scan

52 finding(s)

HIGH/CRITICAL: 3 | MEDIUM: 28 | LOW: 21

Severity Rule Location
HIGH py-ssrf-outbound-request apps/desktop/launcher/tron-tor-helper:303
HIGH py-ssrf-outbound-request apps/desktop/launcher/tron-tor-helper:437
HIGH sh-remote-script-execution apps/web/public/install.sh:757
MEDIUM js-open-redirect apps/desktop/extensions/ai-sidebar/install-helper.js:156
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/media.js:34
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/media.js:57
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/newtab.js:237
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/newtab.js:266
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/newtab.js:336
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/options.js:305
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/sidepanel.js:78
MEDIUM js-unescaped-html-sink apps/desktop/extensions/ai-sidebar/sidepanel.js:166
MEDIUM js-unescaped-html-sink apps/extensions/public/store.js:77
MEDIUM js-unescaped-html-sink apps/extensions/public/store.js:227
MEDIUM js-unescaped-html-sink apps/extensions/public/store.js:569
MEDIUM js-unescaped-html-sink apps/web/public/app.js:29
MEDIUM js-unescaped-html-sink apps/web/public/dns.js:54
MEDIUM sh-remote-script-execution apps/web/public/install.sh:164
MEDIUM sh-remote-script-execution apps/web/public/install.sh:169
MEDIUM sh-remote-script-execution apps/web/public/install.sh:282
MEDIUM sh-remote-script-execution apps/web/public/install.sh:300
MEDIUM sh-remote-script-execution apps/web/public/install.sh:813
MEDIUM sh-remote-script-execution apps/web/public/install.sh:864
MEDIUM js-unescaped-html-sink apps/web/public/settings.js:96
MEDIUM js-unescaped-html-sink apps/web/public/settings.js:168
MEDIUM js-dynamic-code-execution packages/sdk/src/mcp/tools.ts:125
MEDIUM js-dynamic-code-execution packages/sdk/src/page.ts:68
MEDIUM js-dynamic-code-execution packages/sdk/src/page.ts:73
MEDIUM sql-template-interpolation services/api/src/store/db.ts:116
MEDIUM js-dynamic-code-execution services/api/src/store/scanner.ts:44
MEDIUM sh-predictable-temp-path start.sh:25
LOW js-dynamic-code-execution apps/desktop/extensions/ai-sidebar/pit-proxy.test.js:8
LOW js-dynamic-code-execution packages/agent-runtime/src/analyze/form-script.test.ts:6
LOW js-unescaped-html-sink packages/agent-runtime/src/analyze/form-script.test.ts:26
LOW js-unescaped-html-sink packages/agent-runtime/src/analyze/form-script.test.ts:49
LOW js-dynamic-code-execution packages/browser-core/src/automation/extract-script.test.ts:6
LOW js-unescaped-html-sink packages/browser-core/src/automation/extract-script.test.ts:16
LOW js-unescaped-html-sink packages/browser-core/src/automation/extract-script.test.ts:45
LOW js-unescaped-html-sink packages/browser-core/src/automation/extract-script.test.ts:57
LOW js-unescaped-html-sink packages/browser-core/src/automation/extract-script.test.ts:80
LOW js-unescaped-html-sink packages/browser-core/src/automation/extract-script.test.ts:99
LOW js-dynamic-code-execution packages/browser-core/src/automation/snapshot-script.test.ts:11
LOW js-unescaped-html-sink packages/browser-core/src/automation/snapshot-script.test.ts:62
LOW js-unescaped-html-sink packages/browser-core/src/automation/snapshot-script.test.ts:101
LOW js-unescaped-html-sink packages/provenance/src/scan.test.ts:47
LOW js-unescaped-html-sink packages/provenance/src/scan.test.ts:170
LOW js-unescaped-html-sink packages/provenance/src/scan.test.ts:216
LOW js-dynamic-code-execution packages/sdk/src/mcp/automate.test.ts:261
LOW secret-generic-api-key packages/storage/src/config.ts:51
LOW secret-generic-credential packages/storage/src/config.ts:51

…and 2 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit a8d9d46 into main Sep 24, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant