The Debian package declared libgtk-3-0 and libgtk-layer-shell0, which belonged to the retired GTK backend, and omitted FFmpeg entirely. The binary links libavcodec, libavformat, libavutil, libswresample and libswscale directly, so a clean machine would have installed the package and then failed to start it. The dependency list is now taken from the dynamic section of the actual build output: libavcodec60, libavformat60, libavutil58, libswresample4, libswscale7, libpipewire-0.3-0, libxcb1, libasound2 and libva2. XCB needs no extra package. The xcb crate marshals the SHM protocol in Rust, so only libxcb.so.1 is linked and there is no libxcb-shm.so.0 load at runtime. The RPM spec still said version 0.1.0 and required gtk3 and gtk-layer-shell. It now tracks the Cargo.toml version, drops the GTK packages, and adds the VAAPI, ALSA and XCB requirements it actually needs. The AUR PKGBUILD installed target/release/scythe-daemon and target/release/scythe-ui, which no longer exist as build targets, so any AUR build would have failed at the install step. It now installs the single unified binary and points the compatibility names at it. MSYS2 no longer installs gtk3 for the Windows build.
209 lines
7.9 KiB
YAML
209 lines
7.9 KiB
YAML
name: Release & Packaging
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build-linux:
|
|
name: Build Linux Packages (.tar.gz, .deb, .rpm, .AppImage)
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install System Dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
pkg-config clang libva-dev \
|
|
libavcodec-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev \
|
|
libavfilter-dev libavdevice-dev \
|
|
libpipewire-0.3-dev libgtk-3-dev libgtk-layer-shell-dev libxcb1-dev libasound2-dev \
|
|
rpm alien wget
|
|
|
|
- name: Setup Rust toolchain
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Build Release Binaries
|
|
run: cargo build --release
|
|
|
|
- name: Package Linux Tarball (Unified Binary)
|
|
run: |
|
|
mkdir -p dist/scythe-linux-x86_64
|
|
cp target/release/scythe dist/scythe-linux-x86_64/
|
|
ln -sf scythe dist/scythe-linux-x86_64/scythe-daemon
|
|
ln -sf scythe dist/scythe-linux-x86_64/scythe-ui
|
|
ln -sf scythe dist/scythe-linux-x86_64/vrec-daemon
|
|
ln -sf scythe dist/scythe-linux-x86_64/vrec-ui
|
|
ln -sf scythe dist/scythe-linux-x86_64/vrec
|
|
cp packaging/scythe.desktop dist/scythe-linux-x86_64/
|
|
tar -czvf dist/scythe-linux-x86_64.tar.gz -C dist scythe-linux-x86_64
|
|
|
|
- name: Build Debian Package (.deb)
|
|
run: |
|
|
VERSION="${GITHUB_REF_NAME#v}"
|
|
if [ -z "$VERSION" ] || [ "$VERSION" = "main" ]; then
|
|
VERSION=$(grep '^version' Cargo.toml | head -n1 | cut -d '"' -f2)
|
|
fi
|
|
echo "Packaging Debian version: ${VERSION}"
|
|
mkdir -p "deb/scythe_${VERSION}/DEBIAN" "deb/scythe_${VERSION}/usr/bin" "deb/scythe_${VERSION}/usr/share/applications"
|
|
cat > "deb/scythe_${VERSION}/DEBIAN/control" << EOF
|
|
Package: scythe
|
|
Provides: vrec
|
|
Version: ${VERSION}
|
|
Section: video
|
|
Priority: optional
|
|
Architecture: amd64
|
|
Maintainer: oiupoyt
|
|
Description: High-performance GPU hardware screen recorder and instant replay overlay
|
|
Depends: libavcodec60, libavformat60, libavutil58, libswresample4, libswscale7, libpipewire-0.3-0, libxcb1, libasound2, libva2
|
|
EOF
|
|
cp target/release/scythe "deb/scythe_${VERSION}/usr/bin/scythe"
|
|
ln -sf scythe "deb/scythe_${VERSION}/usr/bin/scythe-daemon"
|
|
ln -sf scythe "deb/scythe_${VERSION}/usr/bin/scythe-ui"
|
|
ln -sf scythe "deb/scythe_${VERSION}/usr/bin/vrec-daemon"
|
|
ln -sf scythe "deb/scythe_${VERSION}/usr/bin/vrec-ui"
|
|
ln -sf scythe "deb/scythe_${VERSION}/usr/bin/vrec"
|
|
cp packaging/scythe.desktop "deb/scythe_${VERSION}/usr/share/applications/"
|
|
dpkg-deb --build "deb/scythe_${VERSION}" "dist/scythe_${VERSION}_amd64.deb"
|
|
|
|
- name: Build RPM Package (.rpm)
|
|
run: |
|
|
DEB_FILE=$(ls dist/*.deb | head -n 1)
|
|
alien --to-rpm --scripts "$DEB_FILE"
|
|
mv *.rpm dist/
|
|
|
|
- name: Package Standalone AppImage
|
|
run: |
|
|
mkdir -p AppDir/usr/bin AppDir/usr/share/applications AppDir/usr/share/icons/hicolor/scalable/apps
|
|
cp target/release/scythe AppDir/usr/bin/
|
|
ln -sf scythe AppDir/usr/bin/scythe-ui
|
|
ln -sf scythe AppDir/usr/bin/scythe-daemon
|
|
ln -sf scythe AppDir/usr/bin/vrec-ui
|
|
ln -sf scythe AppDir/usr/bin/vrec-daemon
|
|
ln -sf scythe AppDir/usr/bin/vrec
|
|
cp packaging/scythe.desktop AppDir/usr/share/applications/
|
|
|
|
cat > AppDir/AppRun << 'EOF'
|
|
#!/bin/sh
|
|
HERE="$(dirname "$(readlink -f "${0}")")"
|
|
exec "${HERE}/usr/bin/scythe" "$@"
|
|
EOF
|
|
chmod +x AppDir/AppRun
|
|
|
|
touch AppDir/usr/share/icons/hicolor/scalable/apps/media-record.svg
|
|
touch AppDir/media-record.svg
|
|
ln -s usr/share/applications/scythe.desktop AppDir/scythe.desktop
|
|
|
|
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O appimagetool
|
|
chmod +x appimagetool
|
|
./appimagetool --appimage-extract-and-run AppDir dist/scythe-x86_64.AppImage || true
|
|
|
|
- name: Upload Linux Artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-packages
|
|
path: dist/*
|
|
|
|
build-windows:
|
|
name: Build Windows Binaries (.exe)
|
|
runs-on: windows-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup MSYS2
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: MINGW64
|
|
update: true
|
|
path-type: minimal
|
|
install: >-
|
|
mingw-w64-x86_64-toolchain
|
|
mingw-w64-x86_64-rust
|
|
mingw-w64-x86_64-ffmpeg
|
|
mingw-w64-x86_64-pkg-config
|
|
mingw-w64-x86_64-clang
|
|
mingw-w64-x86_64-ntldd
|
|
python3
|
|
|
|
- name: Build Release Binaries (Windows)
|
|
shell: msys2 {0}
|
|
env:
|
|
LIBCLANG_PATH: /mingw64/bin
|
|
BINDGEN_EXTRA_CLANG_ARGS: "--target=x86_64-w64-windows-gnu"
|
|
run: |
|
|
cargo build --release
|
|
mkdir -p dist/bundle
|
|
cp target/release/scythe.exe dist/bundle/
|
|
python3 packaging/windows/bundle_deps.py dist/bundle
|
|
strip dist/bundle/*.exe || true
|
|
strip --strip-unneeded dist/bundle/*.dll || true
|
|
|
|
- name: Package Windows Standalone (.exe), Installer, and Zip
|
|
shell: pwsh
|
|
run: |
|
|
if (!(Get-Command makensis -ErrorAction SilentlyContinue)) {
|
|
if (Test-Path "C:\Program Files (x86)\NSIS\makensis.exe") {
|
|
$env:Path += ";C:\Program Files (x86)\NSIS"
|
|
} else {
|
|
choco install nsis -y --no-progress
|
|
$env:Path += ";C:\Program Files (x86)\NSIS"
|
|
}
|
|
}
|
|
makensis packaging/windows/scythe-installer.nsi
|
|
makensis packaging/windows/scythe-standalone.nsi
|
|
Compress-Archive -Path dist/bundle/* -DestinationPath dist/scythe-windows-x86_64.zip -Force
|
|
|
|
- name: Upload Windows Artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-packages
|
|
path: |
|
|
dist/scythe-setup.exe
|
|
dist/scythe.exe
|
|
dist/scythe-windows-x86_64.zip
|
|
|
|
publish-release:
|
|
name: Publish GitHub Release
|
|
needs: [build-linux, build-windows]
|
|
if: always() && !cancelled() && (needs.build-linux.result == 'success' || needs.build-windows.result == 'success')
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Download all built artifacts
|
|
uses: actions/download-artifact@v4
|
|
continue-on-error: true
|
|
with:
|
|
path: artifacts
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ github.ref_name }}
|
|
name: "Scythe ${{ github.ref_name }}"
|
|
body: |
|
|
High-performance GPU hardware screen recorder and instant replay overlay for Linux and Windows.
|
|
|
|
### Packages
|
|
- **Windows**: `scythe-setup.exe` (Official installer with Start Menu & Desktop shortcuts)
|
|
- **Windows Portable**: `scythe.exe` (Standalone portable launcher)
|
|
- **Windows Archive**: `scythe-windows-x86_64.zip` (Portable zip archive)
|
|
- **Universal Linux**: `scythe-x86_64.AppImage`
|
|
- **Debian / Ubuntu / Mint**: `scythe_*_amd64.deb`
|
|
- **Fedora / RHEL / openSUSE**: `*.rpm`
|
|
- **Generic Linux**: `scythe-linux-x86_64.tar.gz`
|
|
files: |
|
|
artifacts/linux-packages/*
|
|
artifacts/windows-packages/*
|
|
draft: false
|
|
prerelease: false
|
|
generate_release_notes: false
|