diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 2562d68d..4e274b9e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -52,6 +52,91 @@ jobs: echo Within 'CMakeLists.txt' change "project(Sunshine [VERSION $cmakelists_version]" to "project(Sunshine [VERSION ${{ needs.check_changelog.outputs.next_version_bare }}]" exit 1 + build_linux_aur: + name: Linux AUR + runs-on: ubuntu-latest + needs: check_changelog + strategy: + fail-fast: false + matrix: + include: + - aur_pkg: sunshine + - aur_pkg: sunshine-git + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Dependencies Linux AUR + run: | + sudo apt-get update -y + sudo apt-get install -y \ + cmake + + - name: Configure PKGBUILD files + run: | + mkdir -p artifacts + mkdir -p build + + cd build + cmake -DSUNSHINE_CONFIGURE_AUR=ON -DSUNSHINE_CONFIGURE_ONLY=ON -DSUNSHINE_AUR_PKG=${{ matrix.aur_pkg }} .. + cd .. + + mv ./build/PKGBUILD ./artifacts/ + # mv ./build/.SRCINFO ./artifacts/ + + # mv ./packaging/linux/aur/tmp/* ./artifacts/ + + ls artifacts + + - name: Validate package + uses: hapakaien/archlinux-package-action@v2 + with: + path: artifacts + flags: '--syncdeps --noconfirm' + namcap: true + srcinfo: true + aur: true # workaround mirror problem + + - name: Test artifacts + run: | + ls artifacts + +# - name: PKGBUILD AUR +# uses: sunshinestream/pkgbuild-aur@sunshine-fix +# with: +# pkg-name: artifacts + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: sunshine-linux-aur-${{ matrix.aur_pkg }} + path: artifacts/ + + - name: Setup Publish AUR Variables + if: ${{ github.event_name == 'push' }} + run: | + if [ ${{ github.ref == 'refs/heads/master' && matrix.aur_pkg == 'sunshine' }} ] + then + echo "aur_publish=true" >> $GITHUB_ENV + elif [ ${{ github.ref == 'refs/heads/nightly' && matrix.aur_pkg == 'sunshine-git' }} ] + then + echo "aur_publish=true" >> $GITHUB_ENV + else + echo "aur_publish=false" >> $GITHUB_ENV + fi + + - name: Publish AUR package + if: ${{ env.aur_publish }} + uses: KSXGitHub/github-actions-deploy-aur@v2.2.5 + with: + pkgname: ${{ env.aur_pkgname }} + pkgbuild: ./artifacts/PKGBUILD + commit_username: ${{ secrets.AUR_USERNAME }} + commit_email: ${{ secrets.AUR_EMAIL }} + ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} + commit_message: Autoupdate from GitHub + build_linux_flatpak: name: Linux Flatpak runs-on: ubuntu-18.04 diff --git a/CMakeLists.txt b/CMakeLists.txt index d37fc1fd..520524ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,12 +6,16 @@ project(Sunshine VERSION 0.14.0 ) option(SUNSHINE_CONFIGURE_APPIMAGE "Configure files required for AppImage." OFF) +option(SUNSHINE_CONFIGURE_AUR "Configure files required for AUR." OFF) option(SUNSHINE_CONFIGURE_FLATPAK "Configure files required for Flatpak." OFF) option(SUNSHINE_CONFIGURE_PORTFILE "Configure MacOS Portfile." OFF) option(SUNSHINE_CONFIGURE_ONLY "Configure special files only, then exit." OFF) if(${SUNSHINE_CONFIGURE_APPIMAGE}) configure_file(packaging/linux/sunshine.desktop sunshine.desktop @ONLY) +elseif(${SUNSHINE_CONFIGURE_AUR}) + configure_file(packaging/linux/aur/${SUNSHINE_AUR_PKG}/.SRCINFO .SRCINFO @ONLY) + configure_file(packaging/linux/aur/${SUNSHINE_AUR_PKG}/PKGBUILD PKGBUILD @ONLY) elseif(${SUNSHINE_CONFIGURE_FLATPAK}) configure_file(packaging/linux/flatpak/com.github.sunshinestream.sunshine.yml com.github.sunshinestream.sunshine.yml @ONLY) elseif(${SUNSHINE_CONFIGURE_PORTFILE}) diff --git a/packaging/linux/aur/sunshine-git/.SRCINFO b/packaging/linux/aur/sunshine-git/.SRCINFO new file mode 100644 index 00000000..490be198 --- /dev/null +++ b/packaging/linux/aur/sunshine-git/.SRCINFO @@ -0,0 +1,35 @@ +pkgbase = sunshine-git + pkgdesc = Open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield + pkgver = 0.13.0.957.4b658cd + pkgrel = 1 + url = https://github.com/SunshineStream/sunshine + install = sunshine.install + arch = x86_64 + arch = i686 + license = GPL3 + makedepends = git + makedepends = cmake + makedepends = boost + makedepends = make + depends = boost-libs + depends = ffmpeg4.4 + depends = openssl + depends = libpulse + depends = opus + depends = libxtst + depends = libx11 + depends = libxfixes + depends = libevdev + depends = libxcb + depends = libxrandr + depends = udev + provides = sunshine + conflicts = sunshine + source = sunshine-git::git+https://github.com/SunshineStream/sunshine.git + source = systemd-user-config.patch + source = udev.rules + sha256sums = SKIP + sha256sums = 1642eb8672b137e94aa16e4aadde37f68bf1920dfadd1325cca480d7731f38c9 + sha256sums = 5ce01689247cb01d3f119cac32c731607d99bb875dcdd39c92b547f76d2befa0 + +pkgname = sunshine-git \ No newline at end of file diff --git a/packaging/linux/aur/sunshine-git/PKGBUILD b/packaging/linux/aur/sunshine-git/PKGBUILD new file mode 100644 index 00000000..a590177b --- /dev/null +++ b/packaging/linux/aur/sunshine-git/PKGBUILD @@ -0,0 +1,92 @@ +# Maintainer: Jacek Szafarkiewicz +# Contributor: Levente Polyak + +pkgname=sunshine-git +pkgver=0.13.0.957.4b658cd +pkgrel=1 +pkgdesc="Open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield" +url="https://github.com/SunshineStream/sunshine" +arch=('x86_64' 'i686') +license=('GPL3') + +depends=('boost-libs' 'ffmpeg4.4' 'openssl' 'libpulse' 'opus' 'libxtst' 'libx11' 'libxfixes' 'libevdev' 'libxcb' 'libxrandr' 'udev') +makedepends=('git' 'cmake' 'boost' 'make') + +provides=('sunshine') +conflicts=("sunshine") + +# source=("$pkgname::git+https://github.com/SunshineStream/sunshine.git" +# "systemd-user-config.patch" +# "udev.rules") +source=("$pkgname::git+https://github.com/SunshineStream/sunshine.git") +# sha256sums=('SKIP' +# '1642eb8672b137e94aa16e4aadde37f68bf1920dfadd1325cca480d7731f38c9' +# '5ce01689247cb01d3f119cac32c731607d99bb875dcdd39c92b547f76d2befa0') +sha256sums=('SKIP') +# install=sunshine.install + +_assets_path=/usr/share/sunshine + +pkgver() { + cd "$pkgname" + printf "%s.%s.%s" "$(git describe --tags $(git rev-list --tags --max-count=1) | sed 's/^v//')" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +prepare() { + cd "$pkgname" + git submodule update --recursive --init + + # patch -p1 < ../systemd-user-config.patch +} + +build() { + export CFLAGS="${CFLAGS/-Werror=format-security/}" + export CXXFLAGS="${CXXFLAGS/-Werror=format-security/}" + + cmake \ + -S "$pkgname" \ + -B build \ + -Wno-dev \ + -D SUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \ + -D SUNSHINE_ASSETS_DIR="$_assets_path" \ + \ + -D LIBAVCODEC_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVCODEC_LIBRARIES=/usr/lib/ffmpeg4.4/libavcodec.so \ + -D LIBAVDEVICE_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVDEVICE_LIBRARIES=/usr/lib/ffmpeg4.4/libavdevice.so \ + -D LIBAVFORMAT_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVFORMAT_LIBRARIES=/usr/lib/ffmpeg4.4/libavformat.so \ + -D LIBAVUTIL_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVUTIL_LIBRARIES=/usr/lib/ffmpeg4.4/libavutil.so \ + -D LIBSWSCALE_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVUTIL_LIBRARIES=/usr/lib/ffmpeg4.4/libavutil.so \ + -D LIBSWSCALE_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBSWSCALE_LIBRARIES=/usr/lib/ffmpeg4.4/libswscale.so + + make -C build +} + +package() { + pushd "$pkgname/assets" + install -Dvm644 sunshine.conf "$pkgdir/$_assets_path/sunshine.conf" + install -Dvm644 apps_linux.json "$pkgdir/$_assets_path/apps_linux.json" + + find web shaders/opengl -type f -print0 | xargs -0 -I {} install -Dvm644 {} "$pkgdir/$_assets_path/{}" + popd + + pushd build + install -Dvm755 sunshine "$pkgdir/usr/bin/sunshine" + install -Dvm644 sunshine.service "$pkgdir/usr/lib/systemd/user/sunshine.service" + popd + + # install -Dvm644 udev.rules "$pkgdir/usr/lib/udev/rules.d/85-sunshine.rules" +} + +post_install() { + if ! getent group input > /dev/null; then + echo "Creating group input" + groupadd -r input + fi +} + +# vim: ts=2 sw=2 et: diff --git a/packaging/linux/aur/sunshine/.SRCINFO b/packaging/linux/aur/sunshine/.SRCINFO new file mode 100644 index 00000000..2a093d28 --- /dev/null +++ b/packaging/linux/aur/sunshine/.SRCINFO @@ -0,0 +1,33 @@ +pkgbase = sunshine + pkgdesc = Open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield + pkgver = 0.13.0 + pkgrel = 1 + url = https://github.com/SunshineStream/sunshine + install = sunshine.install + arch = x86_64 + arch = i686 + license = GPL3 + makedepends = git + makedepends = cmake + makedepends = boost + makedepends = make + depends = boost-libs + depends = ffmpeg4.4 + depends = openssl + depends = libpulse + depends = opus + depends = libxtst + depends = libx11 + depends = libxfixes + depends = libevdev + depends = libxcb + depends = libxrandr + depends = udev + source = sunshine::git+https://github.com/SunshineStream/sunshine.git#tag=v0.13.0 + source = systemd-user-config.patch + source = udev.rules + sha256sums = SKIP + sha256sums = 1642eb8672b137e94aa16e4aadde37f68bf1920dfadd1325cca480d7731f38c9 + sha256sums = 5ce01689247cb01d3f119cac32c731607d99bb875dcdd39c92b547f76d2befa0 + +pkgname = sunshine \ No newline at end of file diff --git a/packaging/linux/aur/sunshine/PKGBUILD b/packaging/linux/aur/sunshine/PKGBUILD new file mode 100644 index 00000000..2e857fbe --- /dev/null +++ b/packaging/linux/aur/sunshine/PKGBUILD @@ -0,0 +1,81 @@ +# Maintainer: Jacek Szafarkiewicz + +pkgname=sunshine +pkgver=0.13.0 +pkgrel=1 +pkgdesc="Open source implementation of NVIDIA's GameStream, as used by the NVIDIA Shield" +url="https://github.com/SunshineStream/sunshine" +arch=('x86_64' 'i686') +license=('GPL3') + +depends=('boost-libs' 'ffmpeg4.4' 'openssl' 'libpulse' 'opus' 'libxtst' 'libx11' 'libxfixes' 'libevdev' 'libxcb' 'libxrandr' 'udev') +makedepends=('git' 'cmake' 'boost' 'make') + +# source=("$pkgname::git+https://github.com/SunshineStream/sunshine.git#tag=v$pkgver" +# "systemd-user-config.patch" +# "udev.rules") +source=("$pkgname::git+https://github.com/SunshineStream/sunshine.git#tag=v$pkgver") +# sha256sums=('SKIP' +# '1642eb8672b137e94aa16e4aadde37f68bf1920dfadd1325cca480d7731f38c9' +# '5ce01689247cb01d3f119cac32c731607d99bb875dcdd39c92b547f76d2befa0') +sha256sums=('SKIP') +# install=sunshine.install + +_assets_path=/usr/share/$pkgname + +prepare() { + cd "$pkgname" + git submodule update --recursive --init + + # patch -p1 < ../systemd-user-config.patch +} + +build() { + export CFLAGS="${CFLAGS/-Werror=format-security/}" + export CXXFLAGS="${CXXFLAGS/-Werror=format-security/}" + + cmake \ + -S "$pkgname" \ + -B build \ + -Wno-dev \ + -D SUNSHINE_EXECUTABLE_PATH=/usr/bin/sunshine \ + -D SUNSHINE_ASSETS_DIR="$_assets_path" \ + \ + -D LIBAVCODEC_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVCODEC_LIBRARIES=/usr/lib/ffmpeg4.4/libavcodec.so \ + -D LIBAVDEVICE_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVDEVICE_LIBRARIES=/usr/lib/ffmpeg4.4/libavdevice.so \ + -D LIBAVFORMAT_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVFORMAT_LIBRARIES=/usr/lib/ffmpeg4.4/libavformat.so \ + -D LIBAVUTIL_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBAVUTIL_LIBRARIES=/usr/lib/ffmpeg4.4/libavutil.so \ + -D LIBSWSCALE_INCLUDE_DIR=/usr/include/ffmpeg4.4 \ + -D LIBSWSCALE_LIBRARIES=/usr/lib/ffmpeg4.4/libswscale.so + + make -C build +} + +package() { + pushd "$pkgname/assets" + install -Dvm644 sunshine.conf "$pkgdir/$_assets_path/sunshine.conf" + install -Dvm644 apps_linux.json "$pkgdir/$_assets_path/apps_linux.json" + + find web shaders/opengl -type f -print0 | xargs -0 -I {} install -Dvm644 {} "$pkgdir/$_assets_path/{}" + popd + + pushd build + install -Dvm755 sunshine "$pkgdir/usr/bin/sunshine" + install -Dvm644 sunshine.service "$pkgdir/usr/lib/systemd/user/sunshine.service" + popd + + # install -Dvm644 udev.rules "$pkgdir/usr/lib/udev/rules.d/85-sunshine.rules" +} + +post_install() { + if ! getent group input > /dev/null; then + echo "Creating group input" + groupadd -r input + fi +} + +# vim: ts=2 sw=2 et: diff --git a/packaging/linux/aur/tmp/sunshine.install b/packaging/linux/aur/tmp/sunshine.install new file mode 100644 index 00000000..d10a7a04 --- /dev/null +++ b/packaging/linux/aur/tmp/sunshine.install @@ -0,0 +1,6 @@ +post_install() { + if ! getent group input > /dev/null; then + echo "Creating group input" + groupadd -r input + fi +} diff --git a/packaging/linux/aur/tmp/systemd-user-config.patch b/packaging/linux/aur/tmp/systemd-user-config.patch new file mode 100644 index 00000000..3e872e3e --- /dev/null +++ b/packaging/linux/aur/tmp/systemd-user-config.patch @@ -0,0 +1,14 @@ +diff --git a/sunshine.service.in b/sunshine.service.in +index c0c3828..fe45460 100644 +--- a/sunshine.service.in ++++ b/sunshine.service.in +@@ -2,7 +2,8 @@ + Description=Sunshine Gamestream Server for Moonlight + + [Service] +-ExecStart=@SUNSHINE_EXECUTABLE_PATH@ ++ExecStartPre=/bin/sh -c "test -e %E/sunshine || cp -r '@SUNSHINE_ASSETS_DIR@' '%E/sunshine'" ++ExecStart=@SUNSHINE_EXECUTABLE_PATH@ %E/sunshine/sunshine.conf + + [Install] + WantedBy=graphical-session.target diff --git a/packaging/linux/aur/tmp/udev.rules b/packaging/linux/aur/tmp/udev.rules new file mode 100644 index 00000000..d626ba3f --- /dev/null +++ b/packaging/linux/aur/tmp/udev.rules @@ -0,0 +1 @@ +KERNEL=="uinput", GROUP="input", MODE="0660"