scythe/.github/workflows/release.yml

165 lines
5.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/vrec-linux-x86_64
cp target/release/vrec-daemon target/release/vrec-ui dist/vrec-linux-x86_64/
cp packaging/vrec.desktop dist/vrec-linux-x86_64/
tar -czvf dist/vrec-linux-x86_64.tar.gz -C dist vrec-linux-x86_64
- name: Build Debian Package (.deb)
run: |
mkdir -p deb/vrec_0.1.0/DEBIAN deb/vrec_0.1.0/usr/bin deb/vrec_0.1.0/usr/share/applications
cat > deb/vrec_0.1.0/DEBIAN/control << 'EOF'
Package: vrec
Version: 0.1.0
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/vrec-daemon deb/vrec_0.1.0/usr/bin/
cp target/release/vrec-ui deb/vrec_0.1.0/usr/bin/
cp packaging/vrec.desktop deb/vrec_0.1.0/usr/share/applications/
dpkg-deb --build deb/vrec_0.1.0 dist/vrec_0.1.0_amd64.deb
- name: Build RPM Package (.rpm)
run: |
alien --to-rpm --scripts dist/vrec_0.1.0_amd64.deb
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/vrec-ui AppDir/usr/bin/
cp target/release/vrec-daemon AppDir/usr/bin/
cp packaging/vrec.desktop AppDir/usr/share/applications/
cat > AppDir/AppRun << 'EOF'
#!/bin/sh
HERE="$(dirname "$(readlink -f "${0}")")"
exec "${HERE}/usr/bin/vrec-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/vrec.desktop AppDir/vrec.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/vrec-x86_64.AppImage || true
- name: Copy Packaging Blueprints
run: |
cp packaging/aur/PKGBUILD dist/ 2>/dev/null || true
cp packaging/flatpak/com.vrec.Vrec.yaml dist/ 2>/dev/null || 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
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
- name: Build Release Binaries (Windows)
shell: msys2 {0}
run: |
GCC_INC="$(gcc -print-file-name=include)"
export LIBCLANG_PATH="/mingw64/bin"
export BINDGEN_EXTRA_CLANG_ARGS="-I${GCC_INC} -I/mingw64/include"
cargo build --release
- name: Package Windows Zip
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path dist/vrec-windows-x64
Copy-Item target/release/vrec-daemon.exe dist/vrec-windows-x64/
Copy-Item target/release/vrec-ui.exe dist/vrec-windows-x64/
Compress-Archive -Path dist/vrec-windows-x64 -DestinationPath dist/vrec-windows-x64.zip
- name: Upload Windows Artifacts
uses: actions/upload-artifact@v4
with:
name: windows-package
path: dist/vrec-windows-x64.zip
publish-release:
name: Publish GitHub Release
needs: [build-linux, build-windows]
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download all built artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name != 'main' && github.ref_name || 'v0.1.0' }}
name: "vrec ${{ github.ref_name != 'main' && github.ref_name || 'v0.1.0' }}"
files: |
artifacts/linux-packages/*
artifacts/windows-package/*
draft: false
prerelease: false
generate_release_notes: true