mirror of
https://github.com/GyulyVGC/sniffnet.git
synced 2025-12-23 14:21:28 -05:00
410 lines
13 KiB
YAML
410 lines
13 KiB
YAML
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
|
|
- os: windows
|
|
arch: arm64
|
|
target: aarch64-pc-windows-msvc
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Install Linux dependencies
|
|
if: matrix.os == 'ubuntu'
|
|
run: sudo apt-get update -y && sudo apt-get install -y libpcap-dev libasound2-dev libgtk-3-dev
|
|
|
|
- name: Install Windows 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" }
|
|
"arm64" { "Lib\ARM64" }
|
|
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: Check crate
|
|
if: matrix.os == 'macos' || matrix.os == 'windows' || matrix.os == 'ubuntu' && matrix.arch == 'amd64'
|
|
run: cargo publish --dry-run --target ${{ matrix.target }}
|
|
|
|
- name: Clippy (release mode)
|
|
run: cargo clippy --release -- -D warnings
|
|
|
|
- name: Test (release mode)
|
|
if: matrix.os == 'macos' || matrix.os == 'ubuntu' || matrix.os == 'windows' && matrix.arch == 'amd64'
|
|
run: |
|
|
cargo test --release --verbose -- --nocapture &&
|
|
cargo clean
|
|
|
|
- name: Install Cross
|
|
if: matrix.os == 'ubuntu'
|
|
run: cargo install cross --git https://github.com/cross-rs/cross
|
|
|
|
- name: Build binary (Linux)
|
|
if: matrix.os == 'ubuntu'
|
|
run: cross build --release --target ${{ matrix.target }}
|
|
|
|
- name: Build binary (macOS/Windows)
|
|
if: matrix.os == 'macos' || matrix.os == 'windows'
|
|
run: cargo build --release --target ${{ matrix.target }}
|
|
|
|
- name: Upload build artifacts
|
|
uses: actions/upload-artifact@v6
|
|
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@v6
|
|
|
|
- name: Install dependencies
|
|
run: apt-get update -y && apt-get 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@v7
|
|
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@v6
|
|
with:
|
|
name: deb-${{ matrix.arch }}
|
|
path: artifacts/
|
|
if-no-files-found: error
|
|
|
|
appimage:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: debian:latest
|
|
options: --privileged
|
|
needs: deb
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
include:
|
|
- arch: amd64
|
|
appimgarch: x86_64
|
|
- arch: arm64
|
|
appimgarch: aarch64
|
|
- arch: i386
|
|
appimgarch: i686
|
|
- arch: armhf
|
|
appimgarch: armhf
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Install dependencies
|
|
run: apt-get update -y && apt-get install -y git build-essential graphicsmagick-imagemagick-compat wget file desktop-file-utils libfuse2
|
|
|
|
- name: Download Debian package
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: deb-${{ matrix.arch }}
|
|
path: /target/
|
|
|
|
- name: Download pkg2appimage
|
|
shell: bash
|
|
run: git clone https://github.com/AppImageCommunity/pkg2appimage.git
|
|
|
|
- name: Replace placeholders
|
|
shell: bash
|
|
run: |
|
|
sed -i -e 's/REPLACE_TAG/Sniffnet_LinuxDEB_${{ matrix.arch }}.deb/g' resources/packaging/linux/AppImage/sniffnet.yml
|
|
sed -i -e 's/binary-${arch}/binary-${{ matrix.arch }}/g' pkg2appimage/functions.sh
|
|
|
|
- name: Repackage for AppImage
|
|
shell: bash
|
|
run: |
|
|
cd pkg2appimage
|
|
ARCH=${{ matrix.appimgarch }} FUNCTIONS_SH=$(pwd)/functions.sh ./pkg2appimage ../resources/packaging/linux/AppImage/sniffnet.yml
|
|
mkdir /out
|
|
mv out/*.AppImage /out/Sniffnet_LinuxAppImage_${{ matrix.arch }}.AppImage
|
|
|
|
- name: Upload package artifacts
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: appimage-${{ matrix.arch }}
|
|
path: /out/
|
|
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@v6
|
|
|
|
- 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@v7
|
|
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@v6
|
|
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@v6
|
|
|
|
- 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@v7
|
|
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@v6
|
|
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: x86
|
|
target: i686-pc-windows-msvc
|
|
- arch: x64
|
|
target: x86_64-pc-windows-msvc
|
|
- arch: arm64
|
|
target: aarch64-pc-windows-msvc
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- 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@v7
|
|
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 unsigned package artifacts
|
|
id: upload-unsigned-artifact
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: msi-${{ matrix.arch }}
|
|
path: artifacts/
|
|
if-no-files-found: error
|
|
|
|
- name: Sign package artifacts
|
|
uses: signpath/github-action-submit-signing-request@v2.0
|
|
with:
|
|
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
|
|
organization-id: '3b533e02-73c3-4908-a018-d09a34498a6a'
|
|
project-slug: 'sniffnet'
|
|
signing-policy-slug: 'release-signing'
|
|
github-artifact-id: '${{ steps.upload-unsigned-artifact.outputs.artifact-id }}'
|
|
wait-for-completion: true
|
|
output-artifact-directory: './artifacts'
|
|
|
|
- name: Upload signed package artifacts (overwrite unsigned)
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: msi-${{ matrix.arch }}
|
|
path: artifacts/
|
|
if-no-files-found: error
|
|
overwrite: true
|