Package #41
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Package | |
on: | |
workflow_dispatch: | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }}-latest | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- os: ubuntu | |
arch: i386 | |
target: i686-unknown-linux-gnu | |
- os: ubuntu | |
arch: armhf | |
target: armv7-unknown-linux-gnueabihf | |
- os: ubuntu | |
arch: amd64 | |
target: x86_64-unknown-linux-gnu | |
- os: ubuntu | |
arch: arm64 | |
target: aarch64-unknown-linux-gnu | |
- os: macos | |
arch: amd64 | |
target: x86_64-apple-darwin | |
- os: macos | |
arch: arm64 | |
target: aarch64-apple-darwin | |
- os: windows | |
arch: i386 | |
target: i686-pc-windows-msvc | |
- os: windows | |
arch: amd64 | |
target: x86_64-pc-windows-msvc | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
if: ${{ matrix.os == 'windows' }} | |
env: | |
NPCAP_OEM_URL: ${{ secrets.NPCAP_OEM_URL }} | |
shell: powershell | |
run: | | |
Write-Host "::group::Npcap SDK" | |
$ARCH = "${{ matrix.arch }}" | |
Invoke-WebRequest -Uri "https://npcap.com/dist/npcap-sdk-1.13.zip" -OutFile "$env:TEMP\npcap-sdk.zip" -Verbose | |
Expand-Archive -LiteralPath "$env:TEMP\npcap-sdk.zip" -DestinationPath "$env:TEMP\npcap-sdk" -Verbose | |
$LibPath = switch ($ARCH) | |
{ | |
"i386" { "Lib" } | |
"amd64" { "Lib\x64" } | |
default { throw "$ARCH is not supported!" } | |
} | |
Add-Content -Path "$env:GITHUB_ENV" -Value "LIB=$env:TEMP\npcap-sdk\$LibPath" | |
Write-Host "::endgroup::" | |
Write-Host "::group::Npcap DLL" | |
Invoke-WebRequest -Uri "$env:NPCAP_OEM_URL" -OutFile "$env:TEMP\npcap-oem.exe" -Verbose | |
Start-Process -FilePath "$env:TEMP\npcap-oem.exe" -ArgumentList "/S" -Wait | |
Write-Host "::endgroup::" | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install Cross | |
if: ${{ matrix.os == 'ubuntu' }} | |
run: cargo install cross --git https://github.com/cross-rs/cross | |
- name: Build binary | |
if: ${{ matrix.os == 'ubuntu' }} | |
run: cross build --release --target ${{ matrix.target }} | |
- name: Build binary | |
if: ${{ matrix.os == 'macos' || matrix.os == 'windows' }} | |
run: cargo build --release --target ${{ matrix.target }} | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build-${{ matrix.os }}-${{ matrix.target }} | |
path: | | |
target/*/release/sniffnet | |
target/*/release/sniffnet.exe | |
if-no-files-found: error | |
deb: | |
runs-on: ubuntu-latest | |
container: | |
image: debian:latest | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- target: i686-unknown-linux-gnu | |
arch: i386 | |
- target: armv7-unknown-linux-gnueabihf | |
arch: armhf | |
- target: x86_64-unknown-linux-gnu | |
arch: amd64 | |
- target: aarch64-unknown-linux-gnu | |
arch: arm64 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: apt update -y && apt install -y curl build-essential | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install packaging tools | |
run: cargo install cargo-deb | |
- uses: actions/download-artifact@v4 | |
with: | |
name: build-ubuntu-${{ matrix.target }} | |
path: target/ | |
- name: Package for Debian-based Linux distros | |
shell: bash | |
run: | | |
mkdir artifacts | |
cargo deb --no-build --no-strip --target ${{ matrix.target }} | |
mv target/${{ matrix.target }}/debian/*.deb artifacts/Sniffnet_LinuxDEB_${{ matrix.arch }}.deb | |
- name: Upload package artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: deb-${{ matrix.arch }} | |
path: artifacts/ | |
if-no-files-found: error | |
rpm: | |
runs-on: ubuntu-latest | |
container: | |
image: fedora:latest | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- arch: x86_64 | |
target: x86_64-unknown-linux-gnu | |
- arch: aarch64 | |
target: aarch64-unknown-linux-gnu | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: dnf update -y && dnf install -y @development-tools patchelf | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install packaging tools | |
run: cargo install cargo-generate-rpm | |
- uses: actions/download-artifact@v4 | |
with: | |
name: build-ubuntu-${{ matrix.target }} | |
path: target/ | |
- name: Package for RPM-based Linux distros | |
shell: bash | |
run: | | |
mkdir artifacts | |
patchelf --replace-needed libpcap.so.0.8 libpcap.so.1 target/${{ matrix.target }}/release/sniffnet | |
cargo generate-rpm --target ${{ matrix.target }} | |
mv target/${{ matrix.target }}/generate-rpm/*.rpm artifacts/Sniffnet_LinuxRPM_${{ matrix.arch }}.rpm | |
- name: Upload package artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rpm-${{ matrix.arch }} | |
path: artifacts/ | |
if-no-files-found: error | |
dmg: | |
runs-on: macos-latest | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- arch: Intel | |
target: x86_64-apple-darwin | |
- arch: AppleSilicon | |
target: aarch64-apple-darwin | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install packaging tools | |
run: | | |
cargo install toml-cli | |
brew install create-dmg | |
- uses: actions/download-artifact@v4 | |
with: | |
name: build-macos-${{ matrix.target }} | |
path: target/ | |
- name: Package for macOS | |
shell: bash | |
run: | | |
VERSION=$(toml get Cargo.toml package.version --raw) | |
sed -i'.bak' -e "s/0\.0\.0/${VERSION}/g" -e "s/fffffff/${GITHUB_SHA:0:7}/g" resources/packaging/macos/Info.plist | |
mkdir artifacts | |
mkdir -p target/release/bundle/osx/Sniffnet.app/Contents/{MacOS,Resources} | |
cp resources/packaging/macos/Info.plist \ | |
target/release/bundle/osx/Sniffnet.app/Contents/ | |
cp resources/packaging/macos/graphics/sniffnet.icns \ | |
target/release/bundle/osx/Sniffnet.app/Contents/Resources/ | |
chmod +x target/${{ matrix.target }}/release/sniffnet | |
cp target/${{ matrix.target }}/release/sniffnet \ | |
target/release/bundle/osx/Sniffnet.app/Contents/MacOS/ | |
cp resources/packaging/macos/wrapper.sh \ | |
target/release/bundle/osx/Sniffnet.app/Contents/MacOS/ | |
create-dmg \ | |
--volname "Sniffnet Installer" \ | |
--background "resources/packaging/macos/graphics/dmg_bg.png" \ | |
--window-pos 200 120 \ | |
--window-size 900 450 \ | |
--icon-size 100 \ | |
--app-drop-link 620 240 \ | |
--icon "Sniffnet.app" 300 240 \ | |
--hide-extension "Sniffnet.app" \ | |
"artifacts/Sniffnet_macOS_${{ matrix.arch }}.dmg" \ | |
"target/release/bundle/osx/" | |
- name: Upload package artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dmg-${{ matrix.arch }} | |
path: artifacts/ | |
if-no-files-found: error | |
msi: | |
runs-on: windows-latest | |
needs: build | |
strategy: | |
fail-fast: true | |
matrix: | |
include: | |
- arch: 32-bit | |
target: i686-pc-windows-msvc | |
- arch: 64-bit | |
target: x86_64-pc-windows-msvc | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
shell: powershell | |
run: | | |
Write-Host "::group::WiX Toolset" | |
Invoke-WebRequest ` | |
-Uri "https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip" ` | |
-OutFile "$env:TEMP\wix-binaries.zip" -Verbose | |
Expand-Archive -LiteralPath "$env:TEMP\wix-binaries.zip" -DestinationPath "$env:TEMP\wix" -Verbose | |
Set-Item -Path env:Path -Value "$env:Path;$env:TEMP\wix" | |
Write-Host "::endgroup::" | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install packaging tools | |
run: cargo install cargo-wix | |
- uses: actions/download-artifact@v4 | |
with: | |
name: build-windows-${{ matrix.target }} | |
path: target/ | |
- name: Package for Microsoft Windows | |
shell: powershell | |
run: | | |
New-Item -ItemType Directory -Path artifacts | |
cargo wix --no-build --nocapture --target ${{ matrix.target }} | |
Move-Item -Path target\wix\sniffnet*.msi -Destination .\artifacts\Sniffnet_Windows_${{ matrix.arch }}.msi | |
- name: Upload package artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: msi-${{ matrix.arch }} | |
path: artifacts/ | |
if-no-files-found: error |