mirror of
https://github.com/LizardByte/Sunshine.git
synced 2025-08-10 00:52:16 +00:00
Compare commits
4 Commits
feat/api/a
...
build/dock
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88fbd5a398 | ||
|
|
997093986d | ||
|
|
6efc687036 | ||
|
|
a995e578fa |
12
.github/ISSUE_TEMPLATE/config.yml
vendored
12
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -5,9 +5,15 @@
|
||||
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Discussions
|
||||
url: https://github.com/orgs/LizardByte/discussions
|
||||
about: Community discussions
|
||||
- name: Questions
|
||||
url: https://github.com/orgs/LizardByte/discussions
|
||||
about: Ask questions
|
||||
- name: Feature Requests
|
||||
url: https://github.com/orgs/LizardByte/discussions
|
||||
about: Request new features
|
||||
- name: Support Center
|
||||
url: https://app.lizardbyte.dev/support
|
||||
about: Official LizardByte support
|
||||
- name: Discussions
|
||||
url: https://github.com/orgs/LizardByte/discussions
|
||||
about: Community discussions, questions, and feature requests
|
||||
|
||||
2
.github/workflows/ci-docker.yml
vendored
2
.github/workflows/ci-docker.yml
vendored
@@ -123,7 +123,7 @@ jobs:
|
||||
docker:
|
||||
needs: [check_dockerfiles, setup_release]
|
||||
if: ${{ needs.check_dockerfiles.outputs.dockerfiles }}
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
packages: write
|
||||
contents: write
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
# artifacts: true
|
||||
# platforms: linux/amd64,linux/arm64/v8
|
||||
# platforms_pr: linux/amd64
|
||||
# platforms_pr: linux/amd64,linux/arm64/v8
|
||||
# no-cache-filters: sunshine-base,artifacts,sunshine
|
||||
ARG BASE=debian
|
||||
ARG TAG=bookworm
|
||||
FROM ${BASE}:${TAG} AS sunshine-base
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
FROM sunshine-base AS sunshine-build
|
||||
ARG BASE
|
||||
ARG TAG
|
||||
FROM --platform=$BUILDPLATFORM ${BASE}:${TAG} AS sunshine-build
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ARG TARGETPLATFORM
|
||||
ARG BRANCH
|
||||
ARG BUILD_VERSION
|
||||
ARG COMMIT
|
||||
@@ -30,8 +33,33 @@ COPY --link .. .
|
||||
RUN <<_BUILD
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
if [[ "${BUILDPLATFORM}" != "${TARGETPLATFORM}" ]]; then
|
||||
cross_compile="--cross-compile"
|
||||
else
|
||||
cross_compile=""
|
||||
fi
|
||||
|
||||
case "${TARGETPLATFORM}" in
|
||||
linux/amd64)
|
||||
cc_target_tuple="x86_64-linux-gnu"
|
||||
cc_target_arch="amd64"
|
||||
;;
|
||||
linux/arm64)
|
||||
cc_target_tuple="aarch64-linux-gnu"
|
||||
cc_target_arch="arm64"
|
||||
;;
|
||||
*)
|
||||
echo "unsupported platform: ${TARGETPLATFORM}";
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
chmod +x ./scripts/linux_build.sh
|
||||
./scripts/linux_build.sh \
|
||||
${cross_compile} \
|
||||
--cc-target-tuple="${cc_target_tuple}" \
|
||||
--cc-target-arch="${cc_target_arch}" \
|
||||
--publisher-name='LizardByte' \
|
||||
--publisher-website='https://app.lizardbyte.dev' \
|
||||
--publisher-issue-url='https://app.lizardbyte.dev/support' \
|
||||
|
||||
@@ -3,6 +3,11 @@ set -e
|
||||
|
||||
# Default value for arguments
|
||||
appimage_build=0
|
||||
cc_install_root="/mnt/cross"
|
||||
cc_target_tuple="$(uname -m)-linux-gnu"
|
||||
cc_target_arch="$(dpkg --print-architecture || rpm --eval '%{_host}')"
|
||||
cross_compile=0
|
||||
num_processors=$(nproc)
|
||||
publisher_name="Third Party Publisher"
|
||||
publisher_website=""
|
||||
publisher_issue_url="https://app.lizardbyte.dev/support"
|
||||
@@ -27,6 +32,11 @@ Options:
|
||||
-h, --help Display this help message.
|
||||
-s, --sudo-off Disable sudo command.
|
||||
--appimage-build Compile for AppImage, this will not create the AppImage, just the executable.
|
||||
--cc-install-root The root directory to install the cross compiler. Default is /mnt/cross. (Fedora only)
|
||||
--cc-target-tuple The target tuple for the cross compiler.
|
||||
--cc-target-arch The target architecture for the cross compiler.
|
||||
--cross-compile Enable cross compilation.
|
||||
--num-processors The number of processors to use for compilation. Default is the value of 'nproc'.
|
||||
--publisher-name The name of the publisher (not developer) of the application.
|
||||
--publisher-website The URL of the publisher's website.
|
||||
--publisher-issue-url The URL of the publisher's support site or issue tracker.
|
||||
@@ -53,6 +63,19 @@ while getopts ":hs-:" opt; do
|
||||
appimage_build=1
|
||||
skip_libva=1
|
||||
;;
|
||||
cc-install-root=*)
|
||||
cc_install_root="${OPTARG#*=}"
|
||||
;;
|
||||
cc-target-tuple=*)
|
||||
cc_target_tuple="${OPTARG#*=}"
|
||||
;;
|
||||
cc-target-arch=*)
|
||||
cc_target_arch="${OPTARG#*=}"
|
||||
;;
|
||||
cross-compile) cross_compile=1 ;;
|
||||
num-processors=*)
|
||||
num_processors="${OPTARG#*=}"
|
||||
;;
|
||||
publisher-name=*)
|
||||
publisher_name="${OPTARG#*=}"
|
||||
;;
|
||||
@@ -92,28 +115,28 @@ function add_debain_based_deps() {
|
||||
"cmake"
|
||||
"doxygen"
|
||||
"flex" # required if we need to compile doxygen
|
||||
"gcc-${gcc_version}"
|
||||
"g++-${gcc_version}"
|
||||
"gcc-${gcc_version}:${cc_target_arch}"
|
||||
"g++-${gcc_version}:${cc_target_arch}"
|
||||
"git"
|
||||
"graphviz"
|
||||
"libcap-dev" # KMS
|
||||
"libcurl4-openssl-dev"
|
||||
"libdrm-dev" # KMS
|
||||
"libevdev-dev"
|
||||
"libminiupnpc-dev"
|
||||
"libnotify-dev"
|
||||
"libnuma-dev"
|
||||
"libopus-dev"
|
||||
"libpulse-dev"
|
||||
"libssl-dev"
|
||||
"libwayland-dev" # Wayland
|
||||
"libx11-dev" # X11
|
||||
"libxcb-shm0-dev" # X11
|
||||
"libxcb-xfixes0-dev" # X11
|
||||
"libxcb1-dev" # X11
|
||||
"libxfixes-dev" # X11
|
||||
"libxrandr-dev" # X11
|
||||
"libxtst-dev" # X11
|
||||
"libcap-dev:${cc_target_arch}" # KMS
|
||||
"libcurl4-openssl-dev:${cc_target_arch}"
|
||||
"libdrm-dev:${cc_target_arch}" # KMS
|
||||
"libevdev-dev:${cc_target_arch}"
|
||||
"libminiupnpc-dev:${cc_target_arch}"
|
||||
"libnotify-dev:${cc_target_arch}"
|
||||
"libnuma-dev:${cc_target_arch}"
|
||||
"libopus-dev:${cc_target_arch}"
|
||||
"libpulse-dev:${cc_target_arch}"
|
||||
"libssl-dev:${cc_target_arch}"
|
||||
"libwayland-dev:${cc_target_arch}" # Wayland
|
||||
"libx11-dev:${cc_target_arch}" # X11
|
||||
"libxcb-shm0-dev:${cc_target_arch}" # X11
|
||||
"libxcb-xfixes0-dev:${cc_target_arch}" # X11
|
||||
"libxcb1-dev:${cc_target_arch}" # X11
|
||||
"libxfixes-dev:${cc_target_arch}" # X11
|
||||
"libxrandr-dev:${cc_target_arch}" # X11
|
||||
"libxtst-dev:${cc_target_arch}" # X11
|
||||
"ninja-build"
|
||||
"npm" # web-ui
|
||||
"udev"
|
||||
@@ -123,7 +146,13 @@ function add_debain_based_deps() {
|
||||
|
||||
if [ "$skip_libva" == 0 ]; then
|
||||
dependencies+=(
|
||||
"libva-dev" # VA-API
|
||||
"libva-dev:${cc_target_arch}" # VA-API
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "$cross_compile" == 1 ]; then
|
||||
dependencies+=(
|
||||
"crossbuild-essential-${cc_target_arch}"
|
||||
)
|
||||
fi
|
||||
}
|
||||
@@ -131,7 +160,7 @@ function add_debain_based_deps() {
|
||||
function add_debain_deps() {
|
||||
add_debain_based_deps
|
||||
dependencies+=(
|
||||
"libayatana-appindicator3-dev"
|
||||
"libayatana-appindicator3-dev:${cc_target_arch}"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -143,7 +172,7 @@ function add_ubuntu_deps() {
|
||||
|
||||
add_debain_based_deps
|
||||
dependencies+=(
|
||||
"libappindicator3-dev"
|
||||
"libappindicator3-dev:${cc_target_arch}"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -151,10 +180,19 @@ function add_fedora_deps() {
|
||||
dependencies+=(
|
||||
"cmake"
|
||||
"doxygen"
|
||||
"gcc"
|
||||
"g++"
|
||||
"git"
|
||||
"graphviz"
|
||||
"ninja-build"
|
||||
"npm"
|
||||
"rpm-build" # if you want to build an RPM binary package
|
||||
"wget" # necessary for cuda install with `run` file
|
||||
"which" # necessary for cuda install with `run` file
|
||||
"xorg-x11-server-Xvfb" # necessary for headless unit testing
|
||||
)
|
||||
|
||||
arch_dependencies=(
|
||||
"gcc"
|
||||
"g++"
|
||||
"libappindicator-gtk3-devel"
|
||||
"libcap-devel"
|
||||
"libcurl-devel"
|
||||
@@ -171,20 +209,14 @@ function add_fedora_deps() {
|
||||
"libXtst-devel" # X11
|
||||
"mesa-libGL-devel"
|
||||
"miniupnpc-devel"
|
||||
"ninja-build"
|
||||
"npm"
|
||||
"numactl-devel"
|
||||
"openssl-devel"
|
||||
"opus-devel"
|
||||
"pulseaudio-libs-devel"
|
||||
"rpm-build" # if you want to build an RPM binary package
|
||||
"wget" # necessary for cuda install with `run` file
|
||||
"which" # necessary for cuda install with `run` file
|
||||
"xorg-x11-server-Xvfb" # necessary for headless unit testing
|
||||
)
|
||||
|
||||
if [ "$skip_libva" == 0 ]; then
|
||||
dependencies+=(
|
||||
arch_dependencies+=(
|
||||
"libva-devel" # VA-API
|
||||
)
|
||||
fi
|
||||
@@ -199,15 +231,15 @@ function install_cuda() {
|
||||
|
||||
local cuda_prefix="https://developer.download.nvidia.com/compute/cuda/"
|
||||
local cuda_suffix=""
|
||||
if [ "$architecture" == "aarch64" ]; then
|
||||
if [ "$cc_target_arch" == "aarch64" ]; then
|
||||
local cuda_suffix="_sbsa"
|
||||
fi
|
||||
|
||||
if [ "$architecture" == "aarch64" ]; then
|
||||
if [ "$cc_target_arch" == "aarch64" ]; then
|
||||
# we need to patch the math-vector.h file for aarch64 fedora
|
||||
# back up /usr/include/bits/math-vector.h
|
||||
math_vector_file=""
|
||||
if [ "$distro" == "ubuntu" ] || [ "$version" == "24.04" ]; then
|
||||
if [ "$distro" == "ubuntu" ] && [ "$version" == "24.04" ]; then
|
||||
math_vector_file="/usr/include/aarch64-linux-gnu/bits/math-vector.h"
|
||||
elif [ "$distro" == "fedora" ]; then
|
||||
math_vector_file="/usr/include/bits/math-vector.h"
|
||||
@@ -278,6 +310,11 @@ function run_install() {
|
||||
"-DSUNSHINE_ENABLE_DRM=ON"
|
||||
)
|
||||
|
||||
if [ "$cross_compile" == 1 ]; then
|
||||
cmake_args+=("-DCMAKE_C_COMPILER=${cc_target_tuple}-gcc")
|
||||
cmake_args+=("-DCMAKE_CXX_COMPILER=${cc_target_tuple}-g++")
|
||||
fi
|
||||
|
||||
if [ "$appimage_build" == 1 ]; then
|
||||
cmake_args+=("-DSUNSHINE_BUILD_APPIMAGE=ON")
|
||||
fi
|
||||
@@ -308,6 +345,11 @@ function run_install() {
|
||||
# Install the dependencies
|
||||
$package_install_command "${dependencies[@]}"
|
||||
|
||||
# Fedora has a special command for installing architecture specific packages
|
||||
if [ "$distro" == "fedora" ]; then
|
||||
$package_install_command_arch "${arch_dependencies[@]}"
|
||||
fi
|
||||
|
||||
# reload the environment
|
||||
# shellcheck source=/dev/null
|
||||
source ~/.bashrc
|
||||
@@ -367,7 +409,7 @@ function run_install() {
|
||||
tar -xzf "${build_dir}/doxygen.tar.gz"
|
||||
cd "doxygen-${doxygen_min}"
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -G="Ninja" -B="build" -S="."
|
||||
ninja -C "build"
|
||||
ninja -C "build" -j"${num_processors}"
|
||||
ninja -C "build" install
|
||||
else
|
||||
echo "Doxygen version too low, skipping docs"
|
||||
@@ -443,6 +485,11 @@ elif grep -q "PLATFORM_ID=\"platform:f39\"" /etc/os-release; then
|
||||
version="39"
|
||||
package_update_command="${sudo_cmd} dnf update -y"
|
||||
package_install_command="${sudo_cmd} dnf install -y"
|
||||
if [ "$cross_compile" == 0 ]; then
|
||||
package_install_command_arch="${sudo_cmd} dnf -y --releasever=39 --forcearch=${cc_target_arch} install"
|
||||
else
|
||||
package_install_command_arch="${sudo_cmd} dnf -y --installroot=${cc_install_root} --releasever=39 --forcearch=${cc_target_arch} install"
|
||||
fi
|
||||
cuda_version="12.4.0"
|
||||
cuda_build="550.54.14"
|
||||
gcc_version="13"
|
||||
@@ -452,6 +499,11 @@ elif grep -q "PLATFORM_ID=\"platform:f40\"" /etc/os-release; then
|
||||
version="40"
|
||||
package_update_command="${sudo_cmd} dnf update -y"
|
||||
package_install_command="${sudo_cmd} dnf install -y"
|
||||
if [ "$cross_compile" == 0 ]; then
|
||||
package_install_command_arch="${sudo_cmd} dnf -y --releasever=39 --forcearch=${cc_target_arch} install"
|
||||
else
|
||||
package_install_command_arch="${sudo_cmd} dnf -y --installroot=${cc_install_root} --releasever=39 --forcearch=${cc_target_arch} install"
|
||||
fi
|
||||
cuda_version=
|
||||
cuda_build=
|
||||
gcc_version="13"
|
||||
|
||||
@@ -441,7 +441,7 @@
|
||||
);
|
||||
if (resp) {
|
||||
fetch("./api/apps/" + id, { method: "DELETE" }).then((r) => {
|
||||
if (r.status == 200) document.location.reload();
|
||||
if (r.status === 200) document.location.reload();
|
||||
});
|
||||
}
|
||||
},
|
||||
@@ -557,7 +557,7 @@
|
||||
method: "POST",
|
||||
body: JSON.stringify(this.editForm),
|
||||
}).then((r) => {
|
||||
if (r.status == 200) document.location.reload();
|
||||
if (r.status === 200) document.location.reload();
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
@@ -94,10 +94,10 @@
|
||||
method: "POST",
|
||||
body: JSON.stringify(this.passwordData),
|
||||
}).then((r) => {
|
||||
if (r.status == 200) {
|
||||
if (r.status === 200) {
|
||||
r.json().then((rj) => {
|
||||
if (rj.status.toString() === "true") {
|
||||
this.success = true;
|
||||
this.success = rj.status;
|
||||
if (this.success === true) {
|
||||
setTimeout(() => {
|
||||
document.location.reload();
|
||||
}, 5000);
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
fetch("./api/pin", {method: "POST", body: b})
|
||||
.then((response) => response.json())
|
||||
.then((response) => {
|
||||
if (response.status.toString().toLowerCase() === "true") {
|
||||
if (response.status === true) {
|
||||
document.querySelector(
|
||||
"#status"
|
||||
).innerHTML = `<div class="alert alert-success" role="alert">${this.i18n.t('pin.pair_success')}</div>`;
|
||||
|
||||
@@ -120,13 +120,14 @@
|
||||
</div>
|
||||
<ul id="client-list" class="list-group list-group-flush list-group-item-light" v-if="clients && clients.length > 0">
|
||||
<div v-for="client in clients" class="list-group-item d-flex">
|
||||
<div class="p-2 flex-grow-1">{{client.name != "" ? client.name : $t('troubleshooting.unpair_single_unknown')}}</div><div class="me-2 ms-auto btn btn-danger" @click="unpairSingle(client.uuid)"><i class="fas fa-trash"></i></div>
|
||||
<div class="p-2 flex-grow-1">{{ client.name !== "" ? client.name : $t('troubleshooting.unpair_single_unknown') }}</div>
|
||||
<div class="me-2 ms-auto btn btn-danger" @click="unpairSingle(client.uuid)"><i class="fas fa-trash"></i></div>
|
||||
</div>
|
||||
</ul>
|
||||
<ul v-else class="list-group list-group-flush list-group-item-light">
|
||||
<div class="list-group-item p-3 text-center"><em>{{ $t('troubleshooting.unpair_single_no_devices') }}</em></div>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- Logs -->
|
||||
<div class="card p-2 my-4">
|
||||
@@ -176,7 +177,7 @@
|
||||
actualLogs() {
|
||||
if (!this.logFilter) return this.logs;
|
||||
let lines = this.logs.split("\n");
|
||||
lines = lines.filter(x => x.indexOf(this.logFilter) != -1);
|
||||
lines = lines.filter(x => x.indexOf(this.logFilter) !== -1);
|
||||
return lines.join("\n");
|
||||
}
|
||||
},
|
||||
@@ -210,7 +211,7 @@
|
||||
.then((r) => r.json())
|
||||
.then((r) => {
|
||||
this.closeAppPressed = false;
|
||||
this.closeAppStatus = r.status.toString() === "true";
|
||||
this.closeAppStatus = r.status;
|
||||
setTimeout(() => {
|
||||
this.closeAppStatus = null;
|
||||
}, 5000);
|
||||
@@ -222,7 +223,7 @@
|
||||
.then((r) => r.json())
|
||||
.then((r) => {
|
||||
this.unpairAllPressed = false;
|
||||
this.unpairAllStatus = r.status.toString() === "true";
|
||||
this.unpairAllStatus = r.status;
|
||||
setTimeout(() => {
|
||||
this.unpairAllStatus = null;
|
||||
}, 5000);
|
||||
@@ -240,9 +241,9 @@
|
||||
.then((response) => response.json())
|
||||
.then((response) => {
|
||||
const clientList = document.querySelector("#client-list");
|
||||
if (response.status === 'true' && response.named_certs && response.named_certs.length) {
|
||||
if (response.status === true && response.named_certs && response.named_certs.length) {
|
||||
this.clients = response.named_certs.sort((a, b) => {
|
||||
return (a.name.toLowerCase() > b.name.toLowerCase() || a.name == "" ? 1 : -1)
|
||||
return (a.name.toLowerCase() > b.name.toLowerCase() || a.name === "" ? 1 : -1)
|
||||
});
|
||||
} else {
|
||||
this.clients = [];
|
||||
@@ -270,7 +271,7 @@
|
||||
.then((r) => r.json())
|
||||
.then((r) => {
|
||||
this.ddResetPressed = false;
|
||||
this.ddResetStatus = r.status.toString() === "true";
|
||||
this.ddResetStatus = r.status;
|
||||
setTimeout(() => {
|
||||
this.ddResetStatus = null;
|
||||
}, 5000);
|
||||
|
||||
@@ -81,10 +81,10 @@
|
||||
body: JSON.stringify(this.passwordData),
|
||||
}).then((r) => {
|
||||
this.loading = false;
|
||||
if (r.status == 200) {
|
||||
if (r.status === 200) {
|
||||
r.json().then((rj) => {
|
||||
if (rj.status.toString() === "true") {
|
||||
this.success = true;
|
||||
this.success = rj.status;
|
||||
if (this.success === true) {
|
||||
setTimeout(() => {
|
||||
document.location.reload();
|
||||
}, 5000);
|
||||
|
||||
Reference in New Issue
Block a user