scythe/.github/workflows/release.yml

209 lines
8.7 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 (Generic Binaries)
run: |
mkdir -p dist/scythe-linux-x86_64
cp target/release/scythe-daemon target/release/scythe-ui dist/scythe-linux-x86_64/
ln -sf scythe-daemon dist/scythe-linux-x86_64/vrec-daemon
ln -sf scythe-ui dist/scythe-linux-x86_64/vrec-ui
ln -sf scythe-ui dist/scythe-linux-x86_64/scythe
ln -sf scythe-ui 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: libgtk-3-0, libgtk-layer-shell0, libpipewire-0.3-0, libva2, libasound2
EOF
cp target/release/scythe-daemon "deb/scythe_${VERSION}/usr/bin/"
cp target/release/scythe-ui "deb/scythe_${VERSION}/usr/bin/"
ln -sf scythe-daemon "deb/scythe_${VERSION}/usr/bin/vrec-daemon"
ln -sf scythe-ui "deb/scythe_${VERSION}/usr/bin/vrec-ui"
ln -sf scythe-ui "deb/scythe_${VERSION}/usr/bin/scythe"
ln -sf scythe-ui "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-ui AppDir/usr/bin/
cp target/release/scythe-daemon AppDir/usr/bin/
ln -sf scythe-ui AppDir/usr/bin/scythe
ln -sf scythe-ui AppDir/usr/bin/vrec-ui
ln -sf scythe-daemon AppDir/usr/bin/vrec-daemon
cp packaging/scythe.desktop AppDir/usr/share/applications/
cat > AppDir/AppRun << 'EOF'
#!/bin/sh
HERE="$(dirname "$(readlink -f "${0}")")"
exec "${HERE}/usr/bin/scythe-ui" "$@"
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-gtk3
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-daemon.exe dist/bundle/
cp target/release/scythe-ui.exe dist/bundle/
python3 packaging/windows/bundle_deps.py dist/bundle
- 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
- name: Upload Windows Artifacts
uses: actions/upload-artifact@v4
with:
name: windows-packages
path: dist/scythe-setup.exe
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 != 'main' && github.ref_name || 'v0.2.1' }}
name: "Scythe ${{ github.ref_name != 'main' && github.ref_name || 'v0.2.1' }}"
body: |
High-performance GPU hardware screen recorder and instant replay overlay for Linux and Windows.
### What's New in v0.2.1
- **Windows Setup Installer (`scythe-setup.exe`)**: Fixed DXGI adapter initialization and DirectX 11 hardware capture pipeline on Windows. Full Windows NSIS installer with desktop/start menu integration.
- **System Autostart Options**: Toggle automatic startup on system login for both the overlay HUD and background replay buffer.
- **Clean Sequential Trimmer Exports**: Cleaned export naming to `clip_trimmed.mp4`, `clip_trimmed_1.mp4` avoiding repetitive suffixes.
- **Settings UI Organization**: Dedicated grouped sections for System & Startup, Storage & File Naming with real-time pattern preview, and hotkey defaults reset.
- **Auto-Update System**: Integrated background release checker with voluntary update notifications in the HUD and dedicated settings manager.
- **Standardized Datetime Filenames**: Clips and replays now save with clear human-readable timestamps (`Replay-HH-MM-SS_DD-MM-YYYY.mp4` / `Recording-HH-MM-SS_DD-MM-YYYY.mp4`).
- **NVIDIA ShadowPlay Toast Overlay**: Sleek, non-intrusive floating toast notifications in the top-right corner for Replay Saved, Recording Started/Stopped, and Mouse Cursor toggle.
### Packages
- Windows: `scythe-setup.exe` (Official installer with Start Menu & Desktop shortcuts)
- 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: true