#!/bin/sh set -eu cd "$(dirname "$0")/.." version=$(cat VERSION) case "$version" in beta\ [0-9]*.[0-9]*.[0-9]*.[0-9][0-9][0-9][0-9]) ;; *) echo "VERSION must match: beta X.Y.Z.MMDD" >&2 exit 1 ;; esac grep -Fq "release = \"$version\"" pyproject.toml grep -Fq "$version" README.md grep -Fq "## $version" CHANGELOG.md for path in \ config/README.md \ config/templates/default/manifest.toml \ config/templates/default/components/bot.toml \ config/templates/default/components/providers.toml \ config/templates/default/components/runtime.toml \ config/templates/default/components/debug.toml \ config/templates/default/components/notification.toml \ config/templates/default/components/deployment.toml \ config/templates/default/context/people.json \ config/templates/default/secrets/runtime.env \ config/templates/default/overrides/runtime.env \ config/templates/default/overrides/root.env \ config/schemas/profile-manifest.schema.json \ config/schemas/private-context.schema.json \ config/schemas/incident.schema.json \ config/schemas/debug-event.schema.json \ docs/configuration-guide.md \ docs/configuration-inventory.md do test -f "$path" done temporary=$(mktemp -d) trap 'rm -rf "$temporary"' EXIT HUP INT TERM PYTHONPATH=packages/jwebot-config/src \ python3 tools/jwebot-config.py validate \ --path config/templates/default \ --config-root "$temporary/config" \ --state-root "$temporary/state" >/dev/null python3 - config/schemas/*.json <<'PY' import json import sys from pathlib import Path for value in sys.argv[1:]: parsed = json.loads(Path(value).read_text(encoding="utf-8")) if not isinstance(parsed, dict) or "$schema" not in parsed: raise SystemExit(f"invalid schema: {value}") PY if grep -E '^(JWEBOT|WECHAT)_[A-Z0-9_]*(KEY|TOKEN|PASSWORD|SECRET)=.+' \ config/templates/default/secrets/runtime.env >/dev/null then echo "Default profile contains a populated secret" >&2 exit 1 fi for value in \ JWEBOT_CONFIG_ROOT \ JWEBOT_CONFIG_STATE_ROOT \ JWEBOT_BOT_MENTION \ JWEBOT_PRIVATE_CONTEXT_FILE \ JWEBOT_EDGE_DEEPSEEK_API_KEY \ JWEBOT_EDGE_STEAM_API_KEY \ JWEBOT_EDGE_STEAM_ID64 \ JWEBOT_EDGE_STEAM_PROXY_URL \ JWEBOT_DEBUG_INCIDENT_ROOT \ JWEBOT_DEBUG_SESSION_ROOT \ JWEBOT_HEALTH_NOTIFICATION_CONFIG \ JWEBOT_RUNTIME_USER \ JWEBOT_RUNTIME_HOME \ JWEBOT_RUNTIME_PYTHON \ JWEBOT_PRODUCTION_BACKUP_ROOT do grep -Fq "$value" docs/configuration-guide.md done rm -rf "$temporary" trap - EXIT HUP INT TERM