diff --git a/.github/workflows/release-cli.yml b/.github/workflows/release-cli.yml index 715af36..eeeda8c 100644 --- a/.github/workflows/release-cli.yml +++ b/.github/workflows/release-cli.yml @@ -4,53 +4,101 @@ on: push: tags: - '*' + pull_request: + branches: [ main, master ] permissions: contents: write jobs: - make-release: - runs-on: ubuntu-latest - steps: - - uses: actions/create-release@latest - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: ${{ github.ref }} build-all-for-all: runs-on: ubuntu-latest - needs: - - make-release strategy: + fail-fast: false matrix: goos: [linux, freebsd, windows] goarch: [amd64, arm64, riscv64] exclude: - - goarch: arm64 - goos: windows - - goarch: riscv64 - goos: windows - - goarch: arm64 - goos: freebsd + - goarch: arm64 + goos: windows + - goarch: riscv64 + goos: windows + - goarch: arm64 + goos: freebsd + - goarch: riscv64 + goos: freebsd steps: - uses: actions/checkout@v3 - - uses: wangyoucao577/go-release-action@v1.40 + - name: Set up Go + uses: actions/setup-go@v4 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - goos: ${{ matrix.goos }} - goarch: ${{ matrix.goarch }} - ldflags: -X main.version=${{ github. ref_name }} - overwrite: true - md5sum: false - sha256sum: false - compress_assets: false + go-version: 'stable' + - name: Install FUSE dependencies + run: | + sudo apt-get update + sudo apt-get install -y libfuse-dev + - name: Install cross-compilation tools for ARM64 + if: matrix.goarch == 'arm64' && matrix.goos == 'linux' + run: | + sudo apt-get install -y gcc-aarch64-linux-gnu + - name: Install cross-compilation tools for RISC-V + if: matrix.goarch == 'riscv64' && matrix.goos == 'linux' + run: | + sudo apt-get install -y gcc-riscv64-linux-gnu + - name: Install FreeBSD SDK + if: matrix.goos == 'freebsd' + run: | + sudo apt-get update + sudo apt-get install -y clang lld binutils-riscv64-unknown-elf 2>/dev/null || true + mkdir -p /tmp/freebsd-sdk + cd /tmp/freebsd-sdk + # Determine download path based on architecture + case "${{ matrix.goarch }}" in + arm64) DLPATH="arm64" ;; + riscv64) DLPATH="riscv" ;; + *) DLPATH="amd64" ;; + esac + wget -q "https://download.freebsd.org/releases/${DLPATH}/14.3-RELEASE/base.txz" && tar -xf base.txz + # Download and extract libfuse source + mkdir -p libfuse && cd libfuse + wget -q https://github.com/libfuse/libfuse/releases/download/fuse-2.9.9/fuse-2.9.9.tar.gz + tar -xzf fuse-2.9.9.tar.gz --strip-components=1 + mkdir -p /tmp/freebsd-sdk/usr/include + cp include/fuse.h /tmp/freebsd-sdk/usr/include/ + cp include/fuse_*.h /tmp/freebsd-sdk/usr/include/ 2>/dev/null || true + cd /tmp/freebsd-sdk + - name: Set cross-compiler + id: set-cc + run: | + if [ "${{ matrix.goarch }}" = "arm64" ] && [ "${{ matrix.goos }}" = "linux" ]; then + echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV + elif [ "${{ matrix.goarch }}" = "riscv64" ] && [ "${{ matrix.goos }}" = "linux" ]; then + echo "CC=riscv64-linux-gnu-gcc" >> $GITHUB_ENV + elif [ "${{ matrix.goos }}" = "freebsd" ]; then + TRIPLE="x86_64-unknown-freebsd14.3" + [ "${{ matrix.goarch }}" = "arm64" ] && TRIPLE="aarch64-unknown-freebsd14.3" + [ "${{ matrix.goarch }}" = "riscv64" ] && TRIPLE="riscv64-unknown-freebsd14.3" + echo "CC=clang --target=$TRIPLE --sysroot=/tmp/freebsd-sdk" >> $GITHUB_ENV + echo "CGO_CFLAGS=-isystem /tmp/freebsd-sdk/usr/include --target=$TRIPLE" >> $GITHUB_ENV + echo "CGO_LDFLAGS=-L/tmp/freebsd-sdk/usr/lib -L/tmp/freebsd-sdk/lib -L/tmp/freebsd-sdk/usr/lib64 --target=$TRIPLE" >> $GITHUB_ENV + fi + - name: Build binary + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: ${{ matrix.goos == 'windows' && '0' || '1' }} + run: | + go build -ldflags "-X main.version=${{ github.ref_name }}" -o nak-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }} + - name: Upload Release Asset + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v1 + with: + files: ./nak-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }} build-darwin: runs-on: macos-latest - needs: - - make-release strategy: + fail-fast: false matrix: goarch: [amd64, arm64] steps: @@ -65,17 +113,15 @@ jobs: env: GOOS: darwin GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: '1' run: | go build -ldflags "-X main.version=${{ github.ref_name }}" -o nak-${{ github.ref_name }}-darwin-${{ matrix.goarch }} - name: Upload Release Asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets. GITHUB_TOKEN }} + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v1 with: - upload_url: ${{ needs.make-release.outputs.upload_url }} - asset_path: ./nak-${{ github.ref_name }}-darwin-${{ matrix.goarch }} - asset_name: nak-${{ github.ref_name }}-darwin-${{ matrix.goarch }} - asset_content_type: application/octet-stream + files: ./nak-${{ github.ref_name }}-darwin-${{ matrix.goarch }} + smoke-test-linux-amd64: runs-on: ubuntu-latest needs: @@ -131,7 +177,7 @@ jobs: # 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}..." + 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!" @@ -145,7 +191,7 @@ jobs: # test relay operations (with a public relay) echo "testing publishing..." # publish a simple event to a public relay - EVENT_JSON=$(./nak event --sec $SECRET_KEY -c "test from nak smoke test" nos.lol) + EVENT_JSON=$(./nak event --sec $SECRET_KEY -c "test from nak smoke test" nos.lol < /dev/null) EVENT_ID=$(echo $EVENT_JSON | jq -r .id) echo "published event ID: $EVENT_ID" diff --git a/fs_root.go b/fs_root.go index f61ee94..6149cb9 100644 --- a/fs_root.go +++ b/fs_root.go @@ -1,3 +1,5 @@ +//go:build !openbsd + package main import ( diff --git a/go.mod b/go.mod index e1eb7b2..287831b 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,6 @@ module github.com/fiatjaf/nak go 1.25 require ( - fiatjaf.com/lib v0.3.1 fiatjaf.com/nostr v0.0.0-20251230181913-e52ffa631bd6 github.com/AlecAivazis/survey/v2 v2.3.7 github.com/bep/debounce v1.2.1 @@ -12,9 +11,8 @@ require ( github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 github.com/fatih/color v1.16.0 - github.com/json-iterator/go v1.1.12 - github.com/liamg/magic v0.0.1 + github.com/liamg/magic v0.0.1 // indirect github.com/mailru/easyjson v0.9.1 github.com/mark3labs/mcp-go v0.8.3 github.com/markusmobius/go-dateparser v1.2.3 diff --git a/go.sum b/go.sum index a94ebcc..0c00d4a 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -fiatjaf.com/lib v0.3.1 h1:/oFQwNtFRfV+ukmOCxfBEAuayoLwXp4wu2/fz5iHpwA= -fiatjaf.com/lib v0.3.1/go.mod h1:Ycqq3+mJ9jAWu7XjbQI1cVr+OFgnHn79dQR5oTII47g= fiatjaf.com/nostr v0.0.0-20251230181913-e52ffa631bd6 h1:yH+cU9ZNgUdMCRa5eS3pmqTPP/QdZtSmQAIrN/U5nEc= fiatjaf.com/nostr v0.0.0-20251230181913-e52ffa631bd6/go.mod h1:ue7yw0zHfZj23Ml2kVSdBx0ENEaZiuvGxs/8VEN93FU= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= @@ -144,8 +142,6 @@ github.com/hablullah/go-hijri v1.0.2 h1:drT/MZpSZJQXo7jftf5fthArShcaMtsal0Zf/dnm github.com/hablullah/go-hijri v1.0.2/go.mod h1:OS5qyYLDjORXzK4O1adFw9Q5WfhOcMdAKglDkcTxgWQ= github.com/hablullah/go-juliandays v1.0.0 h1:A8YM7wIj16SzlKT0SRJc9CD29iiaUzpBLzh5hr0/5p0= github.com/hablullah/go-juliandays v1.0.0/go.mod h1:0JOYq4oFOuDja+oospuc61YoX+uNEn7Z6uHYTbBzdGc= -github.com/hanwen/go-fuse/v2 v2.9.0 h1:0AOGUkHtbOVeyGLr0tXupiid1Vg7QB7M6YUcdmVdC58= -github.com/hanwen/go-fuse/v2 v2.9.0/go.mod h1:yE6D2PqWwm3CbYRxFXV9xUd8Md5d6NG0WBs5spCswmI= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= @@ -169,8 +165,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/liamg/magic v0.0.1 h1:Ru22ElY+sCh6RvRTWjQzKKCxsEco8hE0co8n1qe7TBM= github.com/liamg/magic v0.0.1/go.mod h1:yQkOmZZI52EA+SQ2xyHpVw8fNvTBruF873Y+Vt6S+fk= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= @@ -200,8 +194,6 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1f github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= -github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= -github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=