Menu
Public repository / 3082333cc0978c9d741fae10597435a386a8ecea
AkurAI-VPN / .github/workflows/ci.yml
Latest change 3082333cc0978c9d741fae10597435a386a8ecea - ci: build desktop node --release + upload macOS/Windows binaries as artifacts by Claude Code
name: ci
on:
push:
branches: [main]
workflow_dispatch:
jobs:
# The cryptographic + transport + protocol core is pure-std and must build AND
# pass its tests on every desktop OS — this is the cross-platform foundation a
# macOS/Windows client is built on.
portable-core:
name: portable core (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: build core crates
run: cargo build -p akurai-crypto -p akurai-transport -p akurai-common -p akurai-dns
- name: test core crates
run: cargo test -p akurai-crypto -p akurai-transport -p akurai-common -p akurai-dns
# Full workspace (incl. control plane + relay + Linux node) on Linux.
linux-full:
name: linux full workspace
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- run: cargo fmt --all --check
- run: cargo clippy --workspace --all-targets
- run: cargo build --workspace
- run: cargo test --workspace
# Desktop node — builds the client daemon on macOS + Windows on real runners.
# macOS has a real utun data plane; Windows compiles (Wintun data plane pending).
# This is now a hard gate: a regression in the cross-platform build fails CI.
desktop-node:
name: desktop node (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: build node (release)
run: cargo build --release -p akurai-node
# Publish the built client so it can be downloaded and runtime-tested on
# real Mac/Windows hardware (CI runners can't create a TUN/utun to test it).
- name: upload client binary
uses: actions/upload-artifact@v4
with:
name: akurai-node-${{ matrix.os }}
path: |
target/release/akurai-node
target/release/akurai-node.exe
if-no-files-found: warn