mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-25 14:53:34 +00:00
* fix(ci): disambiguate WASM bundle filenames to prevent tool/channel collision When a tool and channel share the same name (e.g. slack, telegram), the CI build produced identical bundle filenames, causing the second to overwrite the first. Both manifests then pointed to the wrong binary. Prefix bundle filenames with the extension kind (tool-slack-... vs channel-slack-...) and parse the prefix when patching manifests, so each manifest receives the correct artifact URL and SHA256. Co-Authored-By: Claude Opus 4.6 <[email protected]> * test(registry): add installer tests for tool/channel name disambiguation Regression tests for the CI artifact collision fix (PR #964). Verifies: - extract_tar_gz rejects archives with wrong wasm name (the collision bug) - Tool bundle extracts slack-tool.wasm correctly - Channel bundle extracts slack.wasm correctly - Tool and channel manifests install to separate directories Co-Authored-By: Claude Opus 4.6 <[email protected]> * fix(ci): add kind validation and filter non-WASM checksum entries - Validate .kind is "tool" or "channel" before using in build-wasm-extensions (hard error) - Filter checksums.txt to *-wasm32-wasip2.tar.gz entries before parsing, avoiding noisy warnings from binary artifact entries in build-local-artifacts - Add kind validation with warning+skip in both checksum-parsing loops Co-Authored-By: Claude Opus 4.6 <[email protected]> * style: fix rustfmt formatting in installer tests Co-Authored-By: Claude Opus 4.6 <[email protected]> --------- Co-authored-by: Claude Opus 4.6 <[email protected]>
61 lines
2.3 KiB
Bash
Executable File
61 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Test that kind-prefixed artifact filenames are parsed correctly into
|
|
# manifest paths. Mirrors the parsing logic in release.yml.
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
PASS=0
|
|
FAIL=0
|
|
|
|
assert_parse() {
|
|
local filename="$1" expected_kind="$2" expected_name="$3"
|
|
local kind name manifest
|
|
|
|
kind=$(echo "$filename" | cut -d'-' -f1)
|
|
name=$(echo "$filename" | sed "s/^${kind}-//" | sed 's/-[0-9].*-wasm32-wasip2\.tar\.gz$//')
|
|
manifest="registry/${kind}s/${name}.json"
|
|
|
|
if [[ "$kind" != "$expected_kind" ]]; then
|
|
echo "FAIL: $filename → kind=$kind, expected $expected_kind"
|
|
FAIL=$((FAIL + 1))
|
|
return
|
|
fi
|
|
if [[ "$name" != "$expected_name" ]]; then
|
|
echo "FAIL: $filename → name=$name, expected $expected_name"
|
|
FAIL=$((FAIL + 1))
|
|
return
|
|
fi
|
|
echo "OK: $filename → $manifest"
|
|
PASS=$((PASS + 1))
|
|
}
|
|
|
|
# Tool and channel with same name must produce different manifest paths
|
|
assert_parse "tool-slack-0.2.1-wasm32-wasip2.tar.gz" "tool" "slack"
|
|
assert_parse "channel-slack-0.2.1-wasm32-wasip2.tar.gz" "channel" "slack"
|
|
|
|
# Same collision case for telegram
|
|
assert_parse "tool-telegram-0.2.2-wasm32-wasip2.tar.gz" "tool" "telegram"
|
|
assert_parse "channel-telegram-0.2.2-wasm32-wasip2.tar.gz" "channel" "telegram"
|
|
|
|
# Hyphenated extension names
|
|
assert_parse "tool-web-search-0.2.0-wasm32-wasip2.tar.gz" "tool" "web-search"
|
|
assert_parse "tool-google-calendar-0.1.0-wasm32-wasip2.tar.gz" "tool" "google-calendar"
|
|
assert_parse "tool-google-docs-0.1.0-wasm32-wasip2.tar.gz" "tool" "google-docs"
|
|
assert_parse "tool-google-drive-0.1.0-wasm32-wasip2.tar.gz" "tool" "google-drive"
|
|
assert_parse "tool-google-sheets-0.1.0-wasm32-wasip2.tar.gz" "tool" "google-sheets"
|
|
assert_parse "tool-google-slides-0.1.0-wasm32-wasip2.tar.gz" "tool" "google-slides"
|
|
|
|
# Simple names
|
|
assert_parse "channel-discord-0.2.0-wasm32-wasip2.tar.gz" "channel" "discord"
|
|
assert_parse "channel-whatsapp-0.1.0-wasm32-wasip2.tar.gz" "channel" "whatsapp"
|
|
assert_parse "tool-github-0.2.0-wasm32-wasip2.tar.gz" "tool" "github"
|
|
assert_parse "tool-gmail-0.1.0-wasm32-wasip2.tar.gz" "tool" "gmail"
|
|
|
|
# Pre-release versions
|
|
assert_parse "tool-slack-0.2.1-alpha.1-wasm32-wasip2.tar.gz" "tool" "slack"
|
|
|
|
echo ""
|
|
echo "Results: $PASS passed, $FAIL failed"
|
|
[[ $FAIL -eq 0 ]] || exit 1
|