2026-10-08 09:36:03 +02:00
#!/usr/bin/env bash
# Send one prepared post (pr-hall-of-helix/posts/<file>.yaml) through a
# short-lived local adapter, then stop it.
#
# Run it yourself, logged in to OpenBao (BAO_ADDR/BAO_TOKEN set). The bot token
# goes from OpenBao straight into the adapter's environment and is never
# printed. The adapter's store is in memory, so idempotency on post_id holds
# only within one run: do not re-run for a post that already went out.
#
# scripts/send-post.sh ~/pr-hall-of-helix/posts/2026-10-08-test-outlet-parametrization.yaml test
set -euo pipefail
post = $( realpath " $1 " )
channel = ${ 2 :- test }
spec = ${ SPEC :- $HOME /pr-hall-of-helix/presence/telegram.yaml }
port = ${ PORT :- 18089 }
cd " $( dirname " $0 " ) /.. "
read -r want reviewed < <( python3 -c '
import sys, yaml
d = yaml.safe_load( open( sys.argv[ 1] ) )
print( d[ "channel" ] , d[ "request" ] .get( "reviewed_by" ) or "-" ) ' " $post " )
[ " $want " = " $channel " ] || { echo " post is for channel ' $want ', not ' $channel ' " >& 2; exit 2; }
[ " $reviewed " != "-" ] || { echo "request.reviewed_by is empty; a person reviews before sending" >& 2; exit 2; }
TELEGRAM_CHANNEL_ID = $( go run ./cmd/provision adapter-config --spec " $spec " --channel " $channel " \
| sed -n 's/^TELEGRAM_CHANNEL_ID=//p' )
[ -n " $TELEGRAM_CHANNEL_ID " ] || { echo " no chat id for channel ' $channel ' " >& 2; exit 2; }
tmp = $( mktemp -d)
go build -o " $tmp /adapter " ./cmd/adapter
2026-10-08 09:41:50 +02:00
# Read the KV v2 data path directly: `bao kv get` first queries
# sys/internal/ui/mounts, which a workload-scoped token may not be allowed to.
token = $( bao read -format= json \
platform/data/workloads/infotech/fluid-telegram/hall-of-helix/bot-token \
| python3 -c 'import sys, json; print(json.load(sys.stdin)["data"]["data"]["token"])' ) \
|| { rm -rf " $tmp " ; echo "could not read the bot token from OpenBao (logged in? read on platform/data/workloads/infotech/fluid-telegram/hall-of-helix/*?)" >& 2; exit 2; }
2026-10-08 09:36:03 +02:00
TELEGRAM_BOT_TOKEN = $token TELEGRAM_CHANNEL_ID = $TELEGRAM_CHANNEL_ID \
ADAPTER_LISTEN_ADDR = 127.0.0.1:$port " $tmp /adapter " &
pid = $!
unset token
trap 'kill $pid 2>/dev/null; rm -rf "$tmp"' EXIT
for _ in $( seq 50) ; do
curl -s -o /dev/null " http://127.0.0.1: $port / " && break
sleep 0.1
done
python3 -c 'import sys, yaml, json; print(json.dumps(yaml.safe_load(open(sys.argv[1]))["request"]))' " $post " \
| curl -sS -w '\nHTTP %{http_code}\n' -X POST -H 'Content-Type: application/json' \
--data-binary @- " http://127.0.0.1: $port /v1/channel-posts "