name: Release builds # Builds self-contained NeuroSploit binaries for every OS/arch and uploads them # to the matching GitHub Release. Fires automatically on a pushed `v*` tag, or # manually via "Run workflow" (provide the tag). on: push: tags: ["v*"] workflow_dispatch: inputs: tag: description: "Release tag to build & attach (e.g. v3.5.2)" required: true permissions: contents: write jobs: build: name: ${{ matrix.label }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - { os: ubuntu-22.04, label: linux-x64, ext: tar.gz } - { os: ubuntu-24.04-arm, label: linux-arm64, ext: tar.gz } - { os: macos-13, label: macos-x64, ext: tar.gz } - { os: macos-14, label: macos-arm64, ext: tar.gz } - { os: windows-latest, label: windows-x64, ext: zip } steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Cache cargo uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git neurosploit-rs/target key: ${{ matrix.label }}-cargo-${{ hashFiles('neurosploit-rs/Cargo.lock') }} - name: Build (release) working-directory: neurosploit-rs run: cargo build --release - name: Resolve tag id: tag shell: bash run: echo "tag=${{ github.event.inputs.tag || github.ref_name }}" >> "$GITHUB_OUTPUT" - name: Package shell: bash run: | set -e TAG="${{ steps.tag.outputs.tag }}" NAME="neurosploit-${TAG}-${{ matrix.label }}" mkdir -p "dist/$NAME" cp -R agents_md "dist/$NAME/" cat > "dist/$NAME/README.txt" </dev/null) else cp neurosploit-rs/target/release/neurosploit "dist/$NAME/" (cd dist && tar -czf "${NAME}.tar.gz" "$NAME") fi - name: Upload to release shell: bash env: GH_TOKEN: ${{ github.token }} run: | TAG="${{ steps.tag.outputs.tag }}" gh release upload "$TAG" dist/neurosploit-*.${{ matrix.ext }} --clobber