Files
Jyotisha/deploy/prepare-staging-model-provider-env.sh
T
Jesse_Chen 508f3db9c6
Staging Backend Quality Gate / validate (push) Successful in 17m40s
Staging Backend Quality Gate / publish (push) Successful in 23m46s
fix(staging): bootstrap database model key
2026-08-07 20:10:27 +08:00

40 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
set +x
ENV_FILE="${1:-.env.staging}"
if [ ! -f "$ENV_FILE" ] || [ -L "$ENV_FILE" ]; then
echo "staging environment file is missing or unsafe: $ENV_FILE" >&2
exit 1
fi
legacy_pattern='^(OPENAI_API_KEY|ANTHROPIC_API_KEY|DEEPSEEK_API_KEY|LLM_API_KEY|LLM_MODELS_JSON|LLM_BASE_URL|LLM_MODEL|LLM_DEFAULT_MODEL_ID|LLM_PROVIDER_ID|MASTRA_MODEL|MODEL_PROVIDER_[A-Z0-9_]+_API_KEY)='
key_count="$(grep -Ec '^MODEL_PROVIDER_CONFIG_ENCRYPTION_KEY=' "$ENV_FILE" || true)"
if [ "$key_count" -gt 1 ]; then
echo "duplicate staging model provider encryption key" >&2
exit 1
fi
if mode="$(stat -c '%a' "$ENV_FILE" 2>/dev/null)"; then
owner="$(stat -c '%u' "$ENV_FILE")"
group="$(stat -c '%g' "$ENV_FILE")"
else
mode="$(stat -f '%Lp' "$ENV_FILE")"
owner="$(stat -f '%u' "$ENV_FILE")"
group="$(stat -f '%g' "$ENV_FILE")"
fi
temporary="$(mktemp "${ENV_FILE}.tmp.XXXXXX")"
trap 'rm -f -- "$temporary"' EXIT
grep -Ev "$legacy_pattern" "$ENV_FILE" > "$temporary" || true
if [ "$key_count" -eq 0 ]; then
key="$(openssl rand -base64 32 | tr -d '\n')"
[[ "$key" =~ ^[A-Za-z0-9+/]{43}=$ ]] || exit 1
printf 'MODEL_PROVIDER_CONFIG_ENCRYPTION_KEY=%s\n' "$key" >> "$temporary"
fi
chmod "$mode" "$temporary"
chown "$owner:$group" "$temporary"
mv -f -- "$temporary" "$ENV_FILE"
trap - EXIT