From a4c8a7d68b6b4464aedf45dea7d05104a8e45936 Mon Sep 17 00:00:00 2001 From: Gigi Date: Fri, 7 Nov 2025 14:45:42 +0100 Subject: [PATCH] feat: add script to publish markdown test files to Nostr using nak --- scripts/publish-markdown.sh | 146 ++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100755 scripts/publish-markdown.sh diff --git a/scripts/publish-markdown.sh b/scripts/publish-markdown.sh new file mode 100755 index 00000000..2fdfc3c1 --- /dev/null +++ b/scripts/publish-markdown.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +# Script to publish markdown files from test/markdown/ to Nostr using nak +# Usage: +# ./scripts/publish-markdown.sh [filename] [relay1] [relay2] ... +# ./scripts/publish-markdown.sh # Interactive mode +# ./scripts/publish-markdown.sh tables.md # Publish specific file +# ./scripts/publish-markdown.sh tables.md wss://relay.example.com # With relay + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +MARKDOWN_DIR="$PROJECT_ROOT/test/markdown" + +# Check if nak is installed +if ! command -v nak &> /dev/null; then + echo "Error: nak is not installed or not in PATH" + echo "Install from: https://github.com/fiatjaf/nak" + exit 1 +fi + +# Function to publish a markdown file +publish_file() { + local file_path="$1" + shift # Remove first argument, rest are relay URLs + local relays=("$@") + local filename=$(basename "$file_path") + local identifier="${filename%.md}" # Remove .md extension + + echo "📝 Publishing: $filename" + echo " Identifier: $identifier" + + # Read the markdown content + local content=$(cat "$file_path") + + # Extract title from first H1 if available, otherwise use filename + local title=$(echo "$content" | grep -m 1 "^# " | sed 's/^# //' || echo "$identifier") + + # Build nak command + local nak_cmd="nak event -k 30023 -d \"$identifier\" -t \"title=\\\"$title\\\"\" --content -" + + # Add relays if provided + if [ ${#relays[@]} -gt 0 ]; then + nak_cmd="$nak_cmd ${relays[*]}" + echo " Relays: ${relays[*]}" + else + echo " Note: No relays specified. Event will be created but not published." + echo " Add relay URLs as arguments to publish, e.g.: wss://relay.example.com" + fi + + # Publish as kind 30023 (NIP-23 blog post) + # The "d" tag is required for replaceable events (kind 30023) + # Using the filename (without extension) as the identifier + echo "$content" | eval "$nak_cmd" + + if [ $? -eq 0 ]; then + echo "✅ Successfully published: $filename" + else + echo "❌ Failed to publish: $filename" + return 1 + fi +} + +# Check for NOSTR_SECRET_KEY +if [ -z "$NOSTR_SECRET_KEY" ]; then + echo "⚠️ Warning: NOSTR_SECRET_KEY environment variable not set" + echo " You can set it with: export NOSTR_SECRET_KEY=your_key_here" + echo " Or use --prompt-sec flag (nak will prompt for key)" + echo "" +fi + +# Main logic +if [ $# -eq 0 ]; then + # No arguments: list all markdown files and let user choose + echo "Available markdown files:" + echo "" + + files=("$MARKDOWN_DIR"/*.md) + if [ ! -e "${files[0]}" ]; then + echo "No markdown files found in $MARKDOWN_DIR" + exit 1 + fi + + # Display files with numbers + declare -a file_array + i=1 + for file in "${files[@]}"; do + filename=$(basename "$file") + echo " $i) $filename" + file_array[$i]="$file" + ((i++)) + done + + echo "" + echo "Enter file number(s) to publish (space-separated), or 'all' for all files:" + read -r selection + + echo "" + echo "Enter relay URLs (space-separated, or press Enter to skip):" + read -r relay_input + + # Parse relay URLs + relays=() + if [ -n "$relay_input" ]; then + read -ra relays <<< "$relay_input" + fi + + if [ "$selection" = "all" ]; then + # Publish all files + for file in "${files[@]}"; do + publish_file "$file" "${relays[@]}" + echo "" + done + else + # Publish selected files + for num in $selection; do + if [ -n "${file_array[$num]}" ]; then + publish_file "${file_array[$num]}" "${relays[@]}" + echo "" + else + echo "⚠️ Invalid selection: $num" + fi + done + fi +else + # Argument provided: publish specific file + filename="$1" + shift # Remove filename, rest are relay URLs + relays=("$@") + + # If filename doesn't end with .md, add it + if [[ ! "$filename" =~ \.md$ ]]; then + filename="${filename}.md" + fi + + file_path="$MARKDOWN_DIR/$filename" + + if [ ! -f "$file_path" ]; then + echo "Error: File not found: $file_path" + exit 1 + fi + + publish_file "$file_path" "${relays[@]}" +fi +