#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "${ROOT}" tmp_dir="$(mktemp -d)" cleanup() { rm -rf "${tmp_dir}" } trap cleanup EXIT check_node() { local file for file in "$@"; do node --check "${file}" done } git diff --check git ls-files --cached --error-unmatch \ docker/web-search/patch-mcp-web-search.mjs \ docker/web-search/overrides/bing.js \ docker/docs/constraints.txt \ scripts/smoke-web-search.mjs \ scripts/release-check >/dev/null bash -n bin/context-kit bash -n scripts/release-check sh -n docker/docs/entrypoint.sh check_node docker/web-search/patch-mcp-web-search.mjs docker/web-search/overrides/bing.js scripts/smoke-web-search.mjs node -e 'const fs=require("node:fs"); JSON.parse(fs.readFileSync("snippets/opencode.json", "utf8")); JSON.parse(fs.readFileSync("snippets/claude.mcp.json", "utf8"));' bin/context-kit install opencode > "${tmp_dir}/opencode.json" bin/context-kit install opencode --absolute > "${tmp_dir}/opencode-absolute.json" bin/context-kit install claude > "${tmp_dir}/claude.json" bin/context-kit install claude --absolute > "${tmp_dir}/claude-absolute.json" node -e 'const fs=require("node:fs"); for (const file of process.argv.slice(1)) JSON.parse(fs.readFileSync(file, "utf8"));' \ "${tmp_dir}/opencode.json" \ "${tmp_dir}/opencode-absolute.json" \ "${tmp_dir}/claude.json" \ "${tmp_dir}/claude-absolute.json" bin/context-kit redaction-check docker compose -p context-kit -f compose.yml config >/dev/null bin/context-kit build bin/context-kit doctor node scripts/smoke-web-search.mjs bin/context-kit web-search printf 'pass release-check\n'