Skip to content

nodeget-agent-build #136

nodeget-agent-build

nodeget-agent-build #136

Workflow file for this run

name: nodeget-agent-build
on:
workflow_dispatch:
merge_group:
pull_request:
paths-ignore:
- "docs/**"
- "README.md"
push:
branches:
- main
- dev
paths-ignore:
- "docs/**"
- "README.md"
jobs:
agent-release:
name: Build - ${{ matrix.platform.release_for }}
strategy:
fail-fast: false
matrix:
platform:
# x86_64
- release_for: linux_x86_64_musl
target: x86_64-unknown-linux-musl
binary_name: nodeget-agent-linux-x86_64-musl
- release_for: linux_x86_64_gnu
target: x86_64-unknown-linux-gnu
binary_name: nodeget-agent-linux-x86_64-gnu
# i686
- release_for: linux_i686_gnu
target: i686-unknown-linux-gnu
binary_name: nodeget-agent-linux-i686-gnu
- release_for: linux_i686_musl
target: i686-unknown-linux-musl
binary_name: nodeget-agent-linux-i686-musl
# aarch64
- release_for: linux_aarch64_gnu
target: aarch64-unknown-linux-gnu
binary_name: nodeget-agent-linux-aarch64-gnu
- release_for: linux_aarch64_musl
target: aarch64-unknown-linux-musl
binary_name: nodeget-agent-linux-aarch64-musl
# arm (generic)
- release_for: linux_arm_gnueabi
target: arm-unknown-linux-gnueabi
binary_name: nodeget-agent-linux-arm-gnueabi
- release_for: linux_arm_gnueabihf
target: arm-unknown-linux-gnueabihf
binary_name: nodeget-agent-linux-arm-gnueabihf
- release_for: linux_arm_musleabi
target: arm-unknown-linux-musleabi
binary_name: nodeget-agent-linux-arm-musleabi
- release_for: linux_arm_musleabihf
target: arm-unknown-linux-musleabihf
binary_name: nodeget-agent-linux-arm-musleabihf
# armv7
- release_for: linux_armv7_gnueabi
target: armv7-unknown-linux-gnueabi
binary_name: nodeget-agent-linux-armv7-gnueabi
- release_for: linux_armv7_gnueabihf
target: armv7-unknown-linux-gnueabihf
binary_name: nodeget-agent-linux-armv7-gnueabihf
- release_for: linux_armv7_musleabi
target: armv7-unknown-linux-musleabi
binary_name: nodeget-agent-linux-armv7-musleabi
- release_for: linux_armv7_musleabihf
target: armv7-unknown-linux-musleabihf
binary_name: nodeget-agent-linux-armv7-musleabihf
# thumbv7neon (ARMv7 with NEON SIMD)
- release_for: linux_thumbv7neon_gnueabihf
target: thumbv7neon-unknown-linux-gnueabihf
binary_name: nodeget-agent-linux-thumbv7neon-gnueabihf
# riscv64
- release_for: linux_riscv64gc_gnu
target: riscv64gc-unknown-linux-gnu
binary_name: nodeget-agent-linux-riscv64gc-gnu
no_upx: true
# powerpc
- release_for: linux_powerpc64_gnu
target: powerpc64-unknown-linux-gnu
binary_name: nodeget-agent-linux-powerpc64-gnu
no_upx: true
- release_for: linux_powerpc64le_gnu
target: powerpc64le-unknown-linux-gnu
binary_name: nodeget-agent-linux-powerpc64le-gnu
no_upx: true
# s390x (IBM Z)
- release_for: linux_s390x_gnu
target: s390x-unknown-linux-gnu
binary_name: nodeget-agent-linux-s390x-gnu
no_upx: true
# sparc64
- release_for: linux_sparc64_gnu
target: sparc64-unknown-linux-gnu
binary_name: nodeget-agent-linux-sparc64-gnu
no_upx: true
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust
uses: ./.github/actions/setup-system
with:
toolchain: stable
components: clippy
- name: Install Cross
run: cargo install cross --git https://github.com/cross-rs/cross
- name: Build binary
working-directory: ./agent
run: cargo clean && cross build --target ${{ matrix.platform.target }} --profile minimal --jobs 32
env:
CROSS_NO_WARNINGS: 0
- name: Compress binary
if: ${{ !matrix.platform.no_upx }}
run: upx --brute ./target/${{ matrix.platform.target }}/minimal/nodeget-agent
- name: Rename binary
run: cp ./target/${{ matrix.platform.target }}/minimal/nodeget-agent ./target/${{ matrix.platform.target }}/minimal/${{ matrix.platform.binary_name }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: agent-${{ matrix.platform.target }}
path: target/${{ matrix.platform.target }}/minimal/${{ matrix.platform.binary_name }}
if-no-files-found: error
release-dev:
name: Release Dev
needs: [ agent-release, agent-windows, agent-macos ]
if: github.event_name == 'push' && github.ref == 'refs/heads/dev'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
pattern: agent-*
path: artifacts
merge-multiple: true
- name: Upload to dev release
uses: softprops/action-gh-release@v2
with:
tag_name: dev
name: "Dev Build (Latest)"
prerelease: true
make_latest: false
body: "Automated dev build from `${{ github.sha }}`"
files: artifacts/*
release-main:
name: Release Main
needs: [ agent-release, agent-windows, agent-macos ]
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get version from nodeget-lib
id: version
run: |
VERSION=$(grep '^version' nodeget-lib/Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=v$VERSION" >> "$GITHUB_OUTPUT"
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
pattern: agent-*
path: artifacts
merge-multiple: true
- name: Upload to release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.tag }}
name: "NodeGet ${{ steps.version.outputs.tag }}"
make_latest: true
files: artifacts/*
agent-windows:
name: Build - ${{ matrix.platform.release_for }}
strategy:
fail-fast: false
matrix:
platform:
- release_for: windows_x86_64
target: x86_64-pc-windows-msvc
binary_name: nodeget-agent-windows-x86_64.exe
- release_for: windows_i686
target: i686-pc-windows-msvc
binary_name: nodeget-agent-windows-i686.exe
- release_for: windows_aarch64
target: aarch64-pc-windows-msvc
binary_name: nodeget-agent-windows-aarch64.exe
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: ${{ matrix.platform.target }}
- name: Build binary
working-directory: ./agent
run: cargo build --target ${{ matrix.platform.target }} --profile minimal
- name: Rename binary
run: copy target\${{ matrix.platform.target }}\minimal\nodeget-agent.exe target\${{ matrix.platform.target }}\minimal\${{ matrix.platform.binary_name }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: agent-${{ matrix.platform.target }}
path: target/${{ matrix.platform.target }}/minimal/${{ matrix.platform.binary_name }}
if-no-files-found: error
agent-macos:
name: Build - ${{ matrix.platform.release_for }}
strategy:
fail-fast: false
matrix:
platform:
- release_for: macos_aarch64
target: aarch64-apple-darwin
binary_name: nodeget-agent-macos-aarch64
runner: macos-latest
runs-on: ${{ matrix.platform.runner }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: ${{ matrix.platform.target }}
- name: Build binary
working-directory: ./agent
run: cargo build --target ${{ matrix.platform.target }} --profile minimal
- name: Rename binary
run: cp target/${{ matrix.platform.target }}/minimal/nodeget-agent target/${{ matrix.platform.target }}/minimal/${{ matrix.platform.binary_name }}
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: agent-${{ matrix.platform.target }}
path: target/${{ matrix.platform.target }}/minimal/${{ matrix.platform.binary_name }}
if-no-files-found: error