diff --git a/.github/workflows/smoke-test-release.yml b/.github/workflows/smoke-test-release.yml new file mode 100644 index 0000000..bc40a65 --- /dev/null +++ b/.github/workflows/smoke-test-release.yml @@ -0,0 +1,93 @@ +name: Smoke test the binary + +on: + push: + branches: + - master + +jobs: + smoke-test-linux-amd64: + runs-on: ubuntu-latest + steps: + - name: Download and smoke test latest binary + run: | + set -eo pipefail # Exit on error, and on pipe failures + + echo "Downloading nak binary from releases" + RELEASE_URL="https://api.github.com/repos/fiatjaf/nak/releases/latest" + wget $(wget -q -O - ${RELEASE_URL} | jq -r '.assets[] | select(.name | contains("linux-amd64")) | .browser_download_url') -O nak -nv + chmod +x nak + + echo "Running basic tests..." + ./nak --version + + # Generate and manipulate keys + echo "Testing key operations..." + SECRET_KEY=$(./nak key generate) + PUBLIC_KEY=$(echo $SECRET_KEY | ./nak key public) + echo "Generated key pair: $PUBLIC_KEY" + + # Create events + echo "Testing event creation..." + ./nak event -c "hello world" + ./nak event --ts "2 days ago" -c "event with timestamp" + ./nak event -k 1 -t "t=test" -c "event with tag" + + # Test NIP-19 encoding/decoding + echo "Testing NIP-19 encoding/decoding..." + NSEC=$(echo $SECRET_KEY | ./nak encode nsec) + echo "Encoded nsec: $NSEC" + ./nak encode npub 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 + NOTE_ID="5ae731bbc7711f78513da14927c48cc7143a91e6cad0565fdc4d73b8967a7d59" + NOTE1=$(./nak encode note $NOTE_ID) + echo "Encoded note1: $NOTE1" + ./nak decode $NOTE1 + ./nak decode npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 + + # Test event verification + echo "Testing event verification..." + # Create an event and verify it + VERIFY_EVENT=$(./nak event -c "verify me") + echo $VERIFY_EVENT | ./nak verify + + # Test PoW + echo "Testing PoW..." + ./nak event -c "testing pow" --pow 8 + + # Test NIP-49 key encryption/decryption + echo "Testing NIP-49 key encryption/decryption..." + ENCRYPTED_KEY=$(./nak key encrypt $SECRET_KEY "testpassword") + echo "Encrypted key: ${ENCRYPTED_KEY:0:20}..." + DECRYPTED_KEY=$(./nak key decrypt $ENCRYPTED_KEY "testpassword") + if [ "$DECRYPTED_KEY" != "$SECRET_KEY" ]; then + echo "NIP-49 encryption/decryption test failed!" + exit 1 + fi + + # Test multi-value tags + echo "Testing multi-value tags..." + ./nak event --ts "yesterday" -t "e=f59911b561c37c90b01e9e5c2557307380835c83399756f4d62d8167227e420a;wss://relay.example.com;root" -c "Testing multi-value tags" + + # Test relay operations (with a public relay) + echo "Testing relay operations..." + # Publish a simple event to a public relay + EVENT_JSON=$(./nak event --sec $SECRET_KEY -c "Test from nak smoke test" nos.lol) + EVENT_ID=$(echo $EVENT_JSON | jq -r .id) + echo "Published event ID: $EVENT_ID" + + # Wait a moment for propagation + sleep 2 + + # Fetch the event we just published + ./nak req -i $EVENT_ID nos.lol + + # Test serving (just start and immediately kill) + echo "Testing serve command..." + timeout 2s ./nak serve || true + + # Test filesystem mount (just start and immediately kill) + echo "Testing fs mount command..." + mkdir -p /tmp/nostr-mount + timeout 2s ./nak fs --sec $SECRET_KEY /tmp/nostr-mount || true + + echo "All tests passed"