ref:42afe6a800b94511df2fd903df4c9040a6688c37

fix: release CI downloads anvil CLI from /runner/download (#8)

## Problem The release step was curling \`/cli/download\` — which doesn't exist on this server. The endpoint returns the standard HTML 404/error page, CI dutifully saved the HTML to \`/usr/local/bin/anvil\` and \`chmod +x\`'d it, and then \`anvil release create\` failed with: /usr/local/bin/anvil: 2: Syntax error: newline unexpected ...when dash tried to interpret \`<html lang=\"en\">\` as shell. Both releases on main (66017f96 and 6a8dd644) hit this, and no CalVer tags have shipped since the anvil/anvil-runner binary was unified. Observed on pipeline run \`c298f4a1a4\` (the release for 6a8dd644, the blob_sizes/3 commit that closed fangorn/ex_git_objectstore#22): View epub docs at \"doc/ex_git_objectstore.epub\" /usr/local/bin/anvil: 2: Syntax error: newline unexpected ## Fix - Switch the URL to \`/runner/download\`, which is the real endpoint for the unified \`anvil\`/\`anvil-runner\` binary (fangorn/anvil#49). - Add \`-f\` to \`curl\` so it fails on HTTP errors. Previously \`-sL\` silently wrote the error response body to the output file, which is how the HTML landed there in the first place. - Add a post-download \`file /usr/local/bin/anvil | grep -q 'ELF'\` sanity check so that if the endpoint regresses again, CI fails loudly with a helpful message instead of crashing at runtime with a dash syntax error. ## Test plan - [x] Only touches \`.anvil.yml\`; no Elixir changes - [ ] CI will re-run on main after merge — if the next release job produces a tag, the fix worked Manually verified that \`/runner/download?os=Linux&arch=aarch64\` returns an 8.7 MB ELF aarch64 binary (\`file\` confirms). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
SHA: 42afe6a800b94511df2fd903df4c9040a6688c37
Author: Anvil <noreply@anvil.fangorn.io>
Date: 2026-04-13 17:54
Parents: 6a8dd64
1 files changed +8 -2
Type
.anvil.yml +8 −2
@@ -85,9 +85,15 @@
exit 0
fi
# Install anvil CLI
curl -sL "https://anvil.fangorn.io/cli/download?os=$(uname -s)&arch=$(uname -m)" -o /usr/local/bin/anvil
# Install anvil CLI. The /runner/download endpoint serves the real
# binary (anvil and anvil-runner are a single binary per the April
# 2026 unification). /cli/download returns an HTML error page on
# this server, which previously got written to /usr/local/bin/anvil
# and crashed with `Syntax error: newline unexpected` at runtime.
# Fail loud if curl ever stops returning an ELF binary.
curl -sSLf "https://anvil.fangorn.io/runner/download?os=$(uname -s)&arch=$(uname -m)" -o /usr/local/bin/anvil
chmod +x /usr/local/bin/anvil
file /usr/local/bin/anvil | grep -q 'ELF' || { echo "anvil download is not an ELF binary"; head -5 /usr/local/bin/anvil; exit 1; }
# Compute CalVer version
VERSION=$(bash ci/release.sh)