commit 94e9180bc325d93b415cd9350645d48b164a9c5b
parent fd044665ff2ceb5566842274862f677373e2f637
Author: Joris Hartog <jorishartog@hotmail.com>
Date: Sun, 26 Jul 2026 23:45:51 +0200
Add release builds and fix Pages setup
Diffstat:
3 files changed, 145 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
@@ -25,8 +25,6 @@ jobs:
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v5
- with:
- enablement: true
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
@@ -0,0 +1,104 @@
+name: Build Release
+
+on:
+ push:
+ tags:
+ - "v*"
+ workflow_dispatch:
+
+permissions:
+ contents: write
+
+jobs:
+ build:
+ name: Build ${{ matrix.platform }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - os: ubuntu-latest
+ platform: linux-x86_64
+ exe: ""
+ archive: tar.gz
+ - os: macos-13
+ platform: macos-x86_64
+ exe: ""
+ archive: tar.gz
+ - os: macos-14
+ platform: macos-aarch64
+ exe: ""
+ archive: tar.gz
+ - os: windows-latest
+ platform: windows-x86_64
+ exe: ".exe"
+ archive: zip
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Install Rust
+ shell: bash
+ run: |
+ rustup toolchain install stable --profile minimal
+ rustup default stable
+
+ - name: Build
+ run: cargo build --release --locked
+
+ - name: Package Unix
+ if: matrix.archive == 'tar.gz'
+ shell: bash
+ run: |
+ tag="${GITHUB_REF_NAME:-manual}"
+ package="iuna-${tag}-${{ matrix.platform }}"
+ mkdir -p "dist/${package}"
+ cp "target/release/iuna" "dist/${package}/"
+ cp README.md LICENSE "dist/${package}/"
+ tar -C dist -czf "dist/${package}.tar.gz" "${package}"
+
+ - name: Package Windows
+ if: matrix.archive == 'zip'
+ shell: pwsh
+ run: |
+ $tag = if ($env:GITHUB_REF_NAME) { $env:GITHUB_REF_NAME } else { "manual" }
+ $package = "iuna-$tag-${{ matrix.platform }}"
+ New-Item -ItemType Directory -Force -Path "dist/$package" | Out-Null
+ Copy-Item "target/release/iuna${{ matrix.exe }}" "dist/$package/"
+ Copy-Item "README.md", "LICENSE" "dist/$package/"
+ Compress-Archive -Path "dist/$package" -DestinationPath "dist/$package.zip" -Force
+
+ - name: Upload build artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: iuna-${{ github.ref_name }}-${{ matrix.platform }}
+ path: dist/iuna-${{ github.ref_name }}-${{ matrix.platform }}.*
+ if-no-files-found: error
+
+ release:
+ name: Publish GitHub Release
+ needs: build
+ runs-on: ubuntu-latest
+ if: startsWith(github.ref, 'refs/tags/')
+ steps:
+ - name: Download artifacts
+ uses: actions/download-artifact@v4
+ with:
+ path: dist
+ merge-multiple: true
+
+ - name: Write checksums
+ run: |
+ cd dist
+ sha256sum * > SHA256SUMS
+
+ - name: Create or update release
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ if gh release view "${GITHUB_REF_NAME}" >/dev/null 2>&1; then
+ gh release upload "${GITHUB_REF_NAME}" dist/* --clobber
+ else
+ gh release create "${GITHUB_REF_NAME}" dist/* --title "${GITHUB_REF_NAME}" --generate-notes
+ fi
diff --git a/README.md b/README.md
@@ -4,20 +4,42 @@ iuna is a low-energy currency devnet where blocks are finalized by burning IUNA,
It is not a mainnet and not money yet. The goal right now is simple: run a small real network, learn where the protocol and software bend, and make it pleasant enough that friends can help test it.
-## Run A Node
+## Download
-You need Rust installed. Then start a node:
+Download the latest build for your platform from the [GitHub Releases](https://github.com/iuna-labs/iuna/releases) page. You do not need Rust or Cargo to run a node.
+
+Release archives are published for:
+
+- Linux x86_64
+- macOS x86_64
+- macOS Apple Silicon
+- Windows x86_64
+
+Unpack the archive and run the `iuna` binary from a terminal.
+
+On macOS or Linux:
```sh
-cargo run -- --http 127.0.0.1:18661 --p2p 0.0.0.0:9445
+chmod +x ./iuna
+./iuna --http 127.0.0.1:18661 --p2p 0.0.0.0:9445
```
+On Windows PowerShell:
+
+```powershell
+.\iuna.exe --http 127.0.0.1:18661 --p2p 0.0.0.0:9445
+```
+
+For the commands below, use `.\iuna.exe` instead of `./iuna` on Windows.
+
Open `http://127.0.0.1:18661`, set a local password, and back up the recovery phrase. The wallet seed is encrypted on disk. Keep the management UI on `127.0.0.1`; only the P2P port should be reachable by other nodes.
-To join an existing devnet, ask for a seed node address and start with `--join`:
+## Join A Devnet
+
+Ask for a seed node address and start iuna with `--join`:
```sh
-cargo run -- --data-dir .iuna --http 127.0.0.1:18661 --p2p 0.0.0.0:9445 --join seed.example:9444
+./iuna --data-dir .iuna --http 127.0.0.1:18661 --p2p 0.0.0.0:9445 --join seed.example:9444
```
After the node syncs, you can receive IUNA, send transactions, burn for block finalization, or enable PoW mine actions from the Mining screen.
@@ -27,7 +49,7 @@ After the node syncs, you can receive IUNA, send transactions, burn for block fi
Only the first operator of a devnet needs genesis mode:
```sh
-cargo run -- --genesis --http 127.0.0.1:18661 --p2p 0.0.0.0:9444
+./iuna --genesis --http 127.0.0.1:18661 --p2p 0.0.0.0:9444
```
Genesis requires a fresh wallet and an empty chain database. It creates the starter chain, measures an initial VDF delay, and leaves the starter wallet with spendable IUNA for early testing.
@@ -37,7 +59,7 @@ Genesis requires a fresh wallet and an empty chain database. It creates the star
iuna can expose a Stratum V1 endpoint for SHA-256 ASIC miners such as a Bitaxe:
```sh
-cargo run -- --data-dir .iuna --stratum 0.0.0.0:3333
+./iuna --data-dir .iuna --stratum 0.0.0.0:3333
```
Use your iuna wallet address as the worker username. Accepted shares become PoW mine actions in the node mempool and are gossiped to peers.
@@ -56,7 +78,7 @@ The current devnet targets 60-second blocks, uses local wallet encryption, store
Contributions are welcome. Useful help includes running nodes, testing joins/restarts, improving P2P behavior, reviewing protocol incentives, cleaning up UI flows, and adding focused tests.
-Before sending changes, run:
+Contributors need Rust and Cargo. Before sending changes, run:
```sh
cargo fmt -- --check
@@ -77,6 +99,17 @@ git config core.hooksPath .githooks
chmod +x .githooks/pre-commit
```
+## Release Builds
+
+Maintainers publish binaries by pushing a version tag:
+
+```sh
+git tag v0.1.0
+git push origin v0.1.0
+```
+
+The release workflow builds platform archives, writes `SHA256SUMS`, and attaches everything to the GitHub Release for that tag.
+
## License
iuna is licensed under the Apache License 2.0. See `LICENSE`.