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 (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
|
|
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
|