Skip to content

fix(ci): build the release asset upload URI correctly - #11

Merged
BowMonk merged 1 commit into
BrainEchoLab:devfrom
sdiebolt:fix/release-asset-upload
Sep 30, 2026
Merged

BowMonk merged 1 commit into
BrainEchoLab:devfrom
sdiebolt:fix/release-asset-upload

Conversation

@sdiebolt

@sdiebolt sdiebolt commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Problem

The v1.1 release-binaries run built and packaged successfully on all 12 matrix legs, but every leg then failed on the upload step:

Invoke-RestMethod: .github/workflows/scripts/upload-release-assets.ps1:32
Invalid URI: The hostname could not be parsed.

"?" is a legal PowerShell variable-name character, so "$uploadUrl?name=$name" was parsed as a single undefined variable named uploadUrl?name. The URI became =build_CUDA_12.8_MATLAB_2024a.zip — no scheme, no host — and the POST never left the runner.

This is not platform-specific: all 6 Windows and all 6 Linux legs failed identically on the same line, since both runners execute pwsh.

Fix

  • Expand through braces ("${uploadUrl}?name=$name") so the expansion stops at the variable.
  • Validate the result is an absolute URI before posting, so this class of failure reports the malformed URI instead of a parser error.
  • Make the API base a parameter so the script can be driven against a local stub.

Testing

pwsh -NoProfile -File .github/workflows/scripts/test-upload-release-assets.ps1

New regression test runs the script against a local HttpListener stub of the release API — no network or token needed. It covers the upload path, the existing-asset guard, the overwrite delete-then-upload branch, and an empty asset directory.

8/8 pass on this branch; 4 assertions fail against the previous interpolation.

Note

workflow_dispatch still requires this workflow to exist on the default branch (main); it currently lives on dev only. Dispatching a re-run therefore needs dev merged into main first, or a fresh pre-release tag to re-fire the published event.

PowerShell treats "?" as a legal variable-name character, so
"$uploadUrl?name=$name" parsed as a single undefined variable and expanded
to "=build_...zip". The upload POST then failed on every matrix leg with
"Invalid URI: The hostname could not be parsed", on both the Windows and
Linux runners.

Expand the variable through braces and check the result is an absolute URI
before posting, so a malformed URI names itself rather than surfacing as a
parser error. The API base is now a parameter so the script can be driven
against a local stub.

Add a regression test covering the upload path, the existing-asset guard,
and the overwrite branch. It fails on the previous interpolation.
@BowMonk
BowMonk merged commit 7a90f81 into BrainEchoLab:dev Sep 30, 2026
4 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.

2 participants