name: Build Release Binaries on: push: tags: - 'v*' workflow_dispatch: inputs: targets: description: 'Targets to build (comma-separated: amd64,arm64,armv7)' required: false default: 'amd64' env: CARGO_TERM_COLOR: always RUSTUP_HOME: /tmp/rustup CARGO_HOME: /tmp/cargo jobs: build-amd64: if: >- github.event_name == 'push' || contains(github.event.inputs.targets, 'amd64') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust and dependencies run: | apt-get update && apt-get install -y curl cmake pkg-config libasound2-dev build-essential curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.85.0 echo "$CARGO_HOME/bin" >> $GITHUB_PATH - name: Build headless binaries run: | export PATH="$CARGO_HOME/bin:$PATH" cargo build --release --bin wzp-relay --bin wzp-client --bin wzp-bench --bin wzp-web - name: Build audio client run: | export PATH="$CARGO_HOME/bin:$PATH" cargo build --release --bin wzp-client --features audio cp target/release/wzp-client target/release/wzp-client-audio cargo build --release --bin wzp-client - name: Run tests run: | export PATH="$CARGO_HOME/bin:$PATH" cargo test --workspace --lib - name: Package run: | mkdir -p dist/wzp-linux-amd64 cp target/release/wzp-relay dist/wzp-linux-amd64/ cp target/release/wzp-client dist/wzp-linux-amd64/ cp target/release/wzp-client-audio dist/wzp-linux-amd64/ cp target/release/wzp-web dist/wzp-linux-amd64/ cp target/release/wzp-bench dist/wzp-linux-amd64/ cp -r crates/wzp-web/static dist/wzp-linux-amd64/ cd dist && tar czf wzp-linux-amd64.tar.gz wzp-linux-amd64/ - name: Upload artifact uses: actions/upload-artifact@v4 with: name: wzp-linux-amd64 path: dist/wzp-linux-amd64.tar.gz build-arm64: if: >- github.event_name == 'push' || contains(github.event.inputs.targets, 'arm64') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust and cross-compilation tools run: | dpkg --add-architecture arm64 apt-get update apt-get install -y curl cmake pkg-config gcc-aarch64-linux-gnu libc6-dev-arm64-cross build-essential curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.85.0 export PATH="$CARGO_HOME/bin:$PATH" rustup target add aarch64-unknown-linux-gnu echo "$CARGO_HOME/bin" >> $GITHUB_PATH - name: Build env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc CC_aarch64_unknown_linux_gnu: aarch64-linux-gnu-gcc run: | export PATH="$CARGO_HOME/bin:$PATH" cargo build --release --target aarch64-unknown-linux-gnu \ --bin wzp-relay --bin wzp-client --bin wzp-bench --bin wzp-web - name: Package run: | mkdir -p dist/wzp-linux-arm64 cp target/aarch64-unknown-linux-gnu/release/wzp-relay dist/wzp-linux-arm64/ cp target/aarch64-unknown-linux-gnu/release/wzp-client dist/wzp-linux-arm64/ cp target/aarch64-unknown-linux-gnu/release/wzp-web dist/wzp-linux-arm64/ cp target/aarch64-unknown-linux-gnu/release/wzp-bench dist/wzp-linux-arm64/ cp -r crates/wzp-web/static dist/wzp-linux-arm64/ cd dist && tar czf wzp-linux-arm64.tar.gz wzp-linux-arm64/ - name: Upload artifact uses: actions/upload-artifact@v4 with: name: wzp-linux-arm64 path: dist/wzp-linux-arm64.tar.gz build-armv7: if: >- github.event_name == 'push' || contains(github.event.inputs.targets, 'armv7') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Rust and cross-compilation tools run: | dpkg --add-architecture armhf apt-get update apt-get install -y curl cmake pkg-config gcc-arm-linux-gnueabihf libc6-dev-armhf-cross build-essential curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.85.0 export PATH="$CARGO_HOME/bin:$PATH" rustup target add armv7-unknown-linux-gnueabihf echo "$CARGO_HOME/bin" >> $GITHUB_PATH - name: Build env: CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc CC_armv7_unknown_linux_gnueabihf: arm-linux-gnueabihf-gcc run: | export PATH="$CARGO_HOME/bin:$PATH" cargo build --release --target armv7-unknown-linux-gnueabihf \ --bin wzp-relay --bin wzp-client --bin wzp-bench --bin wzp-web - name: Package run: | mkdir -p dist/wzp-linux-armv7 cp target/armv7-unknown-linux-gnueabihf/release/wzp-relay dist/wzp-linux-armv7/ cp target/armv7-unknown-linux-gnueabihf/release/wzp-client dist/wzp-linux-armv7/ cp target/armv7-unknown-linux-gnueabihf/release/wzp-web dist/wzp-linux-armv7/ cp target/armv7-unknown-linux-gnueabihf/release/wzp-bench dist/wzp-linux-armv7/ cp -r crates/wzp-web/static dist/wzp-linux-armv7/ cd dist && tar czf wzp-linux-armv7.tar.gz wzp-linux-armv7/ - name: Upload artifact uses: actions/upload-artifact@v4 with: name: wzp-linux-armv7 path: dist/wzp-linux-armv7.tar.gz release: if: startsWith(github.ref, 'refs/tags/v') needs: [build-amd64] runs-on: ubuntu-latest steps: - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Create release uses: softprops/action-gh-release@v2 with: files: artifacts/**/*.tar.gz generate_release_notes: true