#!/usr/bin/env bash
set -euo pipefail
#40
git config --global --add safe.directory /workspace
if [ "${ANVIL_BRANCH:-}" != "main" ] && [ "${ANVIL_BRANCH:-}" != "refs/heads/main" ]; then
echo "Not on main — nothing to publish."
exit 0
fi
if [ -z "${ANVIL_TOKEN:-}" ]; then
echo "ERROR: ANVIL_TOKEN secret not set." >&2
exit 1
fi
VERSION=$(bash ci/release.sh)
if [ -z "$VERSION" ]; then
echo "ERROR: ci/release.sh returned empty version" >&2
exit 1
fi
SERVER="${ANVIL_SERVER_URL:-https://anvil.fangorn.io}"
REPO="fangorn/anvil-cli"
AUTH=(-H "Authorization: Bearer ${ANVIL_TOKEN}")
cleanup_release() {
echo "==> Publish failed — rolling back draft $VERSION" >&2
curl -sf -X DELETE "${AUTH[@]}" "${SERVER}/api/v1/${REPO}/releases/${VERSION}" >&2 || true
}
trap cleanup_release ERR
case "$(uname -m)" in
aarch64 | arm64) NATIVE="anvil_linux_arm64_${VERSION}" ;;
x86_64 | amd64) NATIVE="anvil_linux_amd64_${VERSION}" ;;
*) echo "ERROR: unsupported runner arch $(uname -m)" >&2; exit 1 ;;
esac
echo "==> Bootstrapping anvil CLI from draft asset $NATIVE..."
ASSET_ID=$(curl -sf "${AUTH[@]}" "${SERVER}/api/v1/${REPO}/releases/${VERSION}/assets" \
| jq -r --arg f "$NATIVE" '.assets[] | select(.filename == $f) | .id' | head -1)
if [ -z "$ASSET_ID" ]; then
echo "ERROR: $NATIVE not present on draft $VERSION (did a build job fail to upload?)" >&2
exit 1
fi
curl -sf "${AUTH[@]}" \
"${SERVER}/api/v1/${REPO}/releases/${VERSION}/assets/${ASSET_ID}/download" -o ./anvil
chmod +x ./anvil
ANVIL="$PWD/anvil"
ASSETS="anvil_linux_arm64 anvil_linux_amd64 anvil_macos_arm64 anvil_macos_amd64 anvil_windows_amd64"
echo "==> Downloading built binaries from draft $VERSION..."
mkdir -p dist
FILES=""
for name in $ASSETS; do
asset="${name}_${VERSION}"
"$ANVIL" release download "$VERSION" "$asset" --output "dist/${asset}" --repo fangorn/anvil-cli
FILES="$FILES ${asset}"
done
echo "==> Computing SHA256 checksums..."
(
cd dist
sha256sum $FILES > "SHA256SUMS_${VERSION}"
)
cat "dist/SHA256SUMS_${VERSION}"
"$ANVIL" release upload "$VERSION" "dist/SHA256SUMS_${VERSION}" --repo fangorn/anvil-cli
"$ANVIL" release publish "$VERSION" --repo fangorn/anvil-cli
trap - ERR
echo "==> Published release $VERSION"