From 39ec202480d7076f0e05e8ec08a8c126571d94c8 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Fri, 13 Jan 2023 21:26:48 +0100 Subject: [PATCH 01/28] Get version from git tags --- CMakeLists.txt | 22 ++++++++++++++++++++++ src/confighttp.cpp | 2 ++ src/main.cpp | 4 ++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df339906db5..d360e7fbf8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,28 @@ and Nvidia GPUs for hardware encoding. Software encoding is also available. You Moonlight client on a variety of devices. A web UI is provided to allow configuration, and client pairing, from \ your favorite web browser. Pair from the local server or any mobile device.") +# Generate Sunshine Version based of the git tag +# https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE +find_package(Git) +if(GIT_EXECUTABLE) + MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") + get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) + # Generate a git-describe version string from Git repository tags + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_VERSION + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(NOT GIT_DESCRIBE_ERROR_CODE) + set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + else() + MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") + endif() +endif() + option(SUNSHINE_CONFIGURE_APPIMAGE "Configuration specific for AppImage." OFF) option(SUNSHINE_CONFIGURE_AUR "Configure files required for AUR." OFF) option(SUNSHINE_CONFIGURE_FLATPAK_MAN "Configure manifest file required for Flatpak build." OFF) diff --git a/src/confighttp.cpp b/src/confighttp.cpp index e86ca9c1867..3b6b47bca34 100644 --- a/src/confighttp.cpp +++ b/src/confighttp.cpp @@ -33,6 +33,7 @@ #include "rtsp.h" #include "utility.h" #include "uuid.h" +#include "version.h" using namespace std::literals; @@ -497,6 +498,7 @@ void getConfig(resp_https_t response, req_https_t request) { outputTree.put("status", "true"); outputTree.put("platform", SUNSHINE_PLATFORM); + outputTree.put("version", PROJECT_VER); outputTree.put("restart_supported", platf::restart_supported()); auto vars = config::parse_config(read_file(config::sunshine.config_file.c_str())); diff --git a/src/main.cpp b/src/main.cpp index 639688aaa15..4d9912b6f9f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -96,7 +96,7 @@ int entry(const char *name, int argc, char *argv[]) { */ namespace version { int entry(const char *name, int argc, char *argv[]) { - std::cout << PROJECT_NAME << " version: v" << PROJECT_VER << std::endl; + std::cout << PROJECT_NAME << " version: " << PROJECT_VER << std::endl; return 0; } } // namespace version @@ -279,7 +279,7 @@ int main(int argc, char *argv[]) { return fn->second(argv[0], config::sunshine.cmd.argc, config::sunshine.cmd.argv); } - + BOOST_LOG(info) << PROJECT_NAME << " version: " << PROJECT_VER << std::endl; task_pool.start(1); // Create signal handler after logging has been initialized From 14e0e6b573cece9850ab144ca9d30a8551335bd5 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Fri, 13 Jan 2023 22:57:08 +0100 Subject: [PATCH 02/28] Added UI for Version Checking --- src_assets/common/assets/web/index.html | 78 +++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index a5d8650532f..0cd32034fce 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -1,6 +1,44 @@

Hello, Sunshine!

Sunshine is a self-hosted game stream host for Moonlight.

+ +
+
+

Version {{version}}

+
+
+ Thank you for helping to make Sunshine a better software! 🌇 +
+
+ Loading Latest Release... +
+
+
+ You're running the latest version of Sunshine +
+
+
+
+
+
A new Nightly Version is Available!
+ Download +
+
{{nightlyData.head_sha}}
+
{{nightlyData.display_title}}
+
+
+
+
+
+
A new Stable Version is Available!
+ Download +
+

{{githubVersion.name}}

+
{{githubVersion.body}}
+
+
+
+
@@ -35,3 +73,43 @@

Legal

+ + \ No newline at end of file From 730f713ea4cbfba4fc5089affa1e5e093ade4cc7 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 10:56:16 +0100 Subject: [PATCH 03/28] Style fixes --- src/main.cpp | 2 +- src_assets/common/assets/web/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4d9912b6f9f..b3623b702e6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -96,7 +96,7 @@ int entry(const char *name, int argc, char *argv[]) { */ namespace version { int entry(const char *name, int argc, char *argv[]) { - std::cout << PROJECT_NAME << " version: " << PROJECT_VER << std::endl; + std::cout << PROJECT_NAME << " version: v" << PROJECT_VER << std::endl; return 0; } } // namespace version diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index 0cd32034fce..0b34bd26af7 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -112,4 +112,4 @@

Legal

} } }); - \ No newline at end of file + From dd49fc9bfd302d78433e024324e9fc66ab58f9ba Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 11:08:43 +0100 Subject: [PATCH 04/28] Moved version.h.in into src folder --- CMakeLists.txt | 2 +- version.h.in => src/version.h.in | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename version.h.in => src/version.h.in (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index d360e7fbf8a..9bf4ddac1dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -419,7 +419,7 @@ ${CMAKE_BINARY_DIR}/generated-src/${filename}.h") configure_file(sunshine.service.in sunshine.service @ONLY) endif() -configure_file(version.h.in version.h @ONLY) +configure_file(src/version.h.in src/version.h @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(SUNSHINE_TARGET_FILES diff --git a/version.h.in b/src/version.h.in similarity index 100% rename from version.h.in rename to src/version.h.in From a225b2294b301e51d9fa07e1370e51f94811c325 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 11:11:12 +0100 Subject: [PATCH 05/28] Fix version typo --- src/version.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h.in b/src/version.h.in index 5deb996bfa0..2be10bf6528 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -5,6 +5,6 @@ #define PROJECT_VER "@PROJECT_VERSION@" #define PROJECT_VER_MAJOR "@PROJECT_VERSION_MAJOR@" #define PROJECT_VER_MINOR "@PROJECT_VERSION_MINOR@" -#define PTOJECT_VER_PATCH "@PROJECT_VERSION_PATCH@" +#define PROJECT_VER_PATCH "@PROJECT_VERSION_PATCH@" #endif // INCLUDE_GUARD From 740c47d70eae906db8bd8ce1a7f9f6cbca0368b6 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 12:10:36 +0100 Subject: [PATCH 06/28] Fix build --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bf4ddac1dc..4a18b156af8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -419,7 +419,7 @@ ${CMAKE_BINARY_DIR}/generated-src/${filename}.h") configure_file(sunshine.service.in sunshine.service @ONLY) endif() -configure_file(src/version.h.in src/version.h @ONLY) +configure_file(src/version.h.in version.h @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(SUNSHINE_TARGET_FILES From 7b7f9a0b0c6429e7b493c3dbb3b8ea2b8fb14d9b Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Sat, 28 Jan 2023 14:25:38 -0500 Subject: [PATCH 07/28] cmake: fix cmake-lint errors --- CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a18b156af8..fd9fb7f6155 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,22 +14,22 @@ your favorite web browser. Pair from the local server or any mobile device.") # https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE find_package(Git) if(GIT_EXECUTABLE) - MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") - get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) - # Generate a git-describe version string from Git repository tags - execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --dirty - #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_DESCRIBE_VERSION - RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE + MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") + get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) + # Generate a git-describe version string from Git repository tags + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_VERSION + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE ) - if(NOT GIT_DESCRIBE_ERROR_CODE) - set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) - MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) - else() - MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") - endif() + if(NOT GIT_DESCRIBE_ERROR_CODE) + set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + else() + MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") + endif() endif() option(SUNSHINE_CONFIGURE_APPIMAGE "Configuration specific for AppImage." OFF) From b612a1179e7e39f5d7e720c91294064651f1c233 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sun, 29 Jan 2023 17:38:29 +0100 Subject: [PATCH 08/28] Get version from cmakefiles --- CMakeLists.txt | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fd9fb7f6155..7b559f62e22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,17 +16,39 @@ find_package(Git) if(GIT_EXECUTABLE) MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) - # Generate a git-describe version string from Git repository tags + #Get current Branch execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_BRANCH + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + # Gather current commit + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_DESCRIBE_VERSION RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE OUTPUT_STRIP_TRAILING_WHITESPACE ) + # Check if Dirty + execute_process( + COMMAND ${GIT_EXECUTABLE} diff --quiet --exit-code + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_IS_DIRTY + OUTPUT_STRIP_TRAILING_WHITESPACE + ) if(NOT GIT_DESCRIBE_ERROR_CODE) - set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) - MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Branch: ${GIT_DESCRIBE_BRANCH}) + if(NOT GIT_DESCRIBE_BRANCH STREQUAL "master") + set(PROJECT_VERSION ${PROJECT_VERSION}-g${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + endif() + if(GIT_IS_DIRTY) + set(PROJECT_VERSION ${PROJECT_VERSION}-dirty) + MESSAGE(Git tree is dirty!) + endif() else() MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") endif() From 82feeb5cca08d0ffb3a8fdb2e764514ae299db5a Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Fri, 13 Jan 2023 21:26:48 +0100 Subject: [PATCH 09/28] Get version from git tags --- CMakeLists.txt | 22 ++++++++++++++++++++++ src/confighttp.cpp | 2 ++ src/main.cpp | 4 ++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 156c1e63986..94b8b485ef2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,28 @@ and Nvidia GPUs for hardware encoding. Software encoding is also available. You Moonlight client on a variety of devices. A web UI is provided to allow configuration, and client pairing, from \ your favorite web browser. Pair from the local server or any mobile device.") +# Generate Sunshine Version based of the git tag +# https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE +find_package(Git) +if(GIT_EXECUTABLE) + MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") + get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) + # Generate a git-describe version string from Git repository tags + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_VERSION + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(NOT GIT_DESCRIBE_ERROR_CODE) + set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + else() + MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") + endif() +endif() + option(SUNSHINE_CONFIGURE_APPIMAGE "Configuration specific for AppImage." OFF) option(SUNSHINE_CONFIGURE_AUR "Configure files required for AUR." OFF) option(SUNSHINE_CONFIGURE_FLATPAK_MAN "Configure manifest file required for Flatpak build." OFF) diff --git a/src/confighttp.cpp b/src/confighttp.cpp index 7425e7f5646..5f54aebb8fb 100644 --- a/src/confighttp.cpp +++ b/src/confighttp.cpp @@ -33,6 +33,7 @@ #include "rtsp.h" #include "utility.h" #include "uuid.h" +#include "version.h" using namespace std::literals; @@ -503,6 +504,7 @@ void getConfig(resp_https_t response, req_https_t request) { outputTree.put("status", "true"); outputTree.put("platform", SUNSHINE_PLATFORM); + outputTree.put("version", PROJECT_VER); outputTree.put("restart_supported", platf::restart_supported()); auto vars = config::parse_config(read_file(config::sunshine.config_file.c_str())); diff --git a/src/main.cpp b/src/main.cpp index 34ccef9de3d..330a9ab5992 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -97,7 +97,7 @@ int entry(const char *name, int argc, char *argv[]) { namespace version { int entry(const char *name, int argc, char *argv[]) { - std::cout << PROJECT_NAME << " version: v" << PROJECT_VER << std::endl; + std::cout << PROJECT_NAME << " version: " << PROJECT_VER << std::endl; return 0; } } // namespace version @@ -298,7 +298,7 @@ int main(int argc, char *argv[]) { return fn->second(argv[0], config::sunshine.cmd.argc, config::sunshine.cmd.argv); } - + BOOST_LOG(info) << PROJECT_NAME << " version: " << PROJECT_VER << std::endl; task_pool.start(1); // Create signal handler after logging has been initialized From 0018cdf7c79708c2afaba8cd6cd63b5c8b1c37e5 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Fri, 13 Jan 2023 22:57:08 +0100 Subject: [PATCH 10/28] Added UI for Version Checking --- src_assets/common/assets/web/index.html | 78 +++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index a5d8650532f..0cd32034fce 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -1,6 +1,44 @@

Hello, Sunshine!

Sunshine is a self-hosted game stream host for Moonlight.

+ +
+
+

Version {{version}}

+
+
+ Thank you for helping to make Sunshine a better software! 🌇 +
+
+ Loading Latest Release... +
+
+
+ You're running the latest version of Sunshine +
+
+
+
+
+
A new Nightly Version is Available!
+ Download +
+
{{nightlyData.head_sha}}
+
{{nightlyData.display_title}}
+
+
+
+
+
+
A new Stable Version is Available!
+ Download +
+

{{githubVersion.name}}

+
{{githubVersion.body}}
+
+
+
+
@@ -35,3 +73,43 @@

Legal

+ + \ No newline at end of file From b934aeecad9ea7dcf9cfda613805e7304def9808 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 10:56:16 +0100 Subject: [PATCH 11/28] Style fixes --- src/main.cpp | 2 +- src_assets/common/assets/web/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 330a9ab5992..b02354fd903 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -97,7 +97,7 @@ int entry(const char *name, int argc, char *argv[]) { namespace version { int entry(const char *name, int argc, char *argv[]) { - std::cout << PROJECT_NAME << " version: " << PROJECT_VER << std::endl; + std::cout << PROJECT_NAME << " version: v" << PROJECT_VER << std::endl; return 0; } } // namespace version diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index 0cd32034fce..0b34bd26af7 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -112,4 +112,4 @@

Legal

} } }); - \ No newline at end of file + From bbca8bcc685aa6a2022b2c440c9ca4c6002932fc Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 11:08:43 +0100 Subject: [PATCH 12/28] Moved version.h.in into src folder --- CMakeLists.txt | 2 +- version.h.in => src/version.h.in | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename version.h.in => src/version.h.in (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 94b8b485ef2..919c8fe35ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -418,7 +418,7 @@ ${CMAKE_BINARY_DIR}/generated-src/${filename}.h") configure_file(sunshine.service.in sunshine.service @ONLY) endif() -configure_file(version.h.in version.h @ONLY) +configure_file(src/version.h.in src/version.h @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(SUNSHINE_TARGET_FILES diff --git a/version.h.in b/src/version.h.in similarity index 100% rename from version.h.in rename to src/version.h.in From f31d6322efcc3394c053e0b62b757b55ac3c3939 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 11:11:12 +0100 Subject: [PATCH 13/28] Fix version typo --- src/version.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h.in b/src/version.h.in index 5deb996bfa0..2be10bf6528 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -5,6 +5,6 @@ #define PROJECT_VER "@PROJECT_VERSION@" #define PROJECT_VER_MAJOR "@PROJECT_VERSION_MAJOR@" #define PROJECT_VER_MINOR "@PROJECT_VERSION_MINOR@" -#define PTOJECT_VER_PATCH "@PROJECT_VERSION_PATCH@" +#define PROJECT_VER_PATCH "@PROJECT_VERSION_PATCH@" #endif // INCLUDE_GUARD From 3b8d8473558da43f7f4202096fd91da342737a07 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sat, 28 Jan 2023 12:10:36 +0100 Subject: [PATCH 14/28] Fix build --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 919c8fe35ea..d634a1a1f5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -418,7 +418,7 @@ ${CMAKE_BINARY_DIR}/generated-src/${filename}.h") configure_file(sunshine.service.in sunshine.service @ONLY) endif() -configure_file(src/version.h.in src/version.h @ONLY) +configure_file(src/version.h.in version.h @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(SUNSHINE_TARGET_FILES From 7f7d3dd133d0a7629761350852e7c48c149b1226 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Sat, 28 Jan 2023 14:25:38 -0500 Subject: [PATCH 15/28] cmake: fix cmake-lint errors --- CMakeLists.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d634a1a1f5f..1fcf67d09aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,22 +14,22 @@ your favorite web browser. Pair from the local server or any mobile device.") # https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE find_package(Git) if(GIT_EXECUTABLE) - MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") - get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) - # Generate a git-describe version string from Git repository tags - execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --dirty - #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_DESCRIBE_VERSION - RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE + MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") + get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) + # Generate a git-describe version string from Git repository tags + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_VERSION + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE ) - if(NOT GIT_DESCRIBE_ERROR_CODE) - set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) - MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) - else() - MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") - endif() + if(NOT GIT_DESCRIBE_ERROR_CODE) + set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + else() + MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") + endif() endif() option(SUNSHINE_CONFIGURE_APPIMAGE "Configuration specific for AppImage." OFF) From 8a2d218cd0a9f588b37793641b2ff893bf3c5eea Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Sun, 29 Jan 2023 17:38:29 +0100 Subject: [PATCH 16/28] Get version from cmakefiles --- CMakeLists.txt | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1fcf67d09aa..665847f04a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,17 +16,39 @@ find_package(Git) if(GIT_EXECUTABLE) MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) - # Generate a git-describe version string from Git repository tags + #Get current Branch execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_BRANCH + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + # Gather current commit + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_DESCRIBE_VERSION RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE OUTPUT_STRIP_TRAILING_WHITESPACE ) + # Check if Dirty + execute_process( + COMMAND ${GIT_EXECUTABLE} diff --quiet --exit-code + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_IS_DIRTY + OUTPUT_STRIP_TRAILING_WHITESPACE + ) if(NOT GIT_DESCRIBE_ERROR_CODE) - set(PROJECT_VERSION ${GIT_DESCRIBE_VERSION}) - MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Branch: ${GIT_DESCRIBE_BRANCH}) + if(NOT GIT_DESCRIBE_BRANCH STREQUAL "master") + set(PROJECT_VERSION ${PROJECT_VERSION}-g${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + endif() + if(GIT_IS_DIRTY) + set(PROJECT_VERSION ${PROJECT_VERSION}-dirty) + MESSAGE(Git tree is dirty!) + endif() else() MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") endif() From 97d45318ac52c68131496cceb672da9c9f0b23f8 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:34:08 -0500 Subject: [PATCH 17/28] cmake: fix lint error --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 665847f04a2..3b7c618d3e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ if(GIT_EXECUTABLE) get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) #Get current Branch execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GIT_DESCRIBE_BRANCH RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE From 2383577d6f87feff4eb3fe7afb4d05a45ade076c Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:36:38 -0500 Subject: [PATCH 18/28] docker: do not ignore .git directory --- .dockerignore | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.dockerignore b/.dockerignore index 2de6c8e8208..6ada538cff0 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,9 +1,9 @@ -# ignore git files -.git* - # ignore hidden files .* +# do not ignore .git, needed for versioning +!/.git + # ignore repo directories and files docs/ scripts/ From 0f464907414dcc9719404787d0dacf4dce29fe7d Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:54:33 -0500 Subject: [PATCH 19/28] docker: add git dependency --- CMakeLists.txt | 2 ++ docker/archlinux.dockerfile | 1 + docker/debian-bullseye.dockerfile | 1 + docker/fedora-36.dockerfile | 1 + docker/fedora-37.dockerfile | 1 + docker/ubuntu-20.04.dockerfile | 1 + docker/ubuntu-22.04.dockerfile | 1 + 7 files changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b7c618d3e2..43c57273e6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,8 @@ if(GIT_EXECUTABLE) else() MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") endif() +else() + MESSAGE(WARNING ": Git not found, cannot fetch git version!") endif() option(SUNSHINE_CONFIGURE_APPIMAGE "Configuration specific for AppImage." OFF) diff --git a/docker/archlinux.dockerfile b/docker/archlinux.dockerfile index ab99c5edafe..d02d2369977 100644 --- a/docker/archlinux.dockerfile +++ b/docker/archlinux.dockerfile @@ -37,6 +37,7 @@ pacman -Syu --noconfirm \ base-devel \ cmake \ cuda \ + git \ libcap \ libdrm \ namcap diff --git a/docker/debian-bullseye.dockerfile b/docker/debian-bullseye.dockerfile index 3b7faed04ea..638d4d83ddd 100644 --- a/docker/debian-bullseye.dockerfile +++ b/docker/debian-bullseye.dockerfile @@ -23,6 +23,7 @@ apt-get update -y apt-get install -y --no-install-recommends \ build-essential=12.9* \ cmake=3.18.4* \ + git=1:2.30.2* \ libavdevice-dev=7:4.3.* \ libboost-filesystem-dev=1.74.0* \ libboost-locale-dev=1.74.0* \ diff --git a/docker/fedora-36.dockerfile b/docker/fedora-36.dockerfile index 36a407184eb..f400d68585f 100644 --- a/docker/fedora-36.dockerfile +++ b/docker/fedora-36.dockerfile @@ -25,6 +25,7 @@ dnf -y install \ cmake-3.22.2* \ gcc-12.0.1* \ gcc-c++-12.0.1* \ + git-2.39.2* \ libcap-devel-2.48* \ libcurl-devel-7.82.0* \ libdrm-devel-2.4.110* \ diff --git a/docker/fedora-37.dockerfile b/docker/fedora-37.dockerfile index a9cf11829ea..82596a281d9 100644 --- a/docker/fedora-37.dockerfile +++ b/docker/fedora-37.dockerfile @@ -25,6 +25,7 @@ dnf -y install \ cmake-3.24.1* \ gcc-12.2.1* \ gcc-c++-12.2.1* \ + git-2.39.2* \ libcap-devel-2.48* \ libcurl-devel-7.85.0* \ libdrm-devel-2.4.112* \ diff --git a/docker/ubuntu-20.04.dockerfile b/docker/ubuntu-20.04.dockerfile index 5012a0258a7..6d759bc5d0f 100644 --- a/docker/ubuntu-20.04.dockerfile +++ b/docker/ubuntu-20.04.dockerfile @@ -24,6 +24,7 @@ apt-get install -y --no-install-recommends \ build-essential=12.8* \ gcc-10=10.3.0* \ g++-10=10.3.0* \ + git=1:2.25.1* \ libavdevice-dev=7:4.2.* \ libboost-filesystem-dev=1.71.0* \ libboost-locale-dev=1.71.0* \ diff --git a/docker/ubuntu-22.04.dockerfile b/docker/ubuntu-22.04.dockerfile index 79aca5ebfb5..6dc2e81e8b2 100644 --- a/docker/ubuntu-22.04.dockerfile +++ b/docker/ubuntu-22.04.dockerfile @@ -23,6 +23,7 @@ apt-get update -y apt-get install -y --no-install-recommends \ build-essential=12.9* \ cmake=3.22.1* \ + git=1:2.34.1* \ libavdevice-dev=7:4.4.* \ libboost-filesystem-dev=1.74.0* \ libboost-locale-dev=1.74.0* \ From a2fc1c3cbe3afdf0fefb092c82b74808d0526da4 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 10:16:03 -0500 Subject: [PATCH 20/28] cmake: quote messages --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43c57273e6a..0c61dc520be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,14 +40,14 @@ if(GIT_EXECUTABLE) OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT GIT_DESCRIBE_ERROR_CODE) - MESSAGE(Sunshine Branch: ${GIT_DESCRIBE_BRANCH}) + MESSAGE("Sunshine Branch: ${GIT_DESCRIBE_BRANCH}") if(NOT GIT_DESCRIBE_BRANCH STREQUAL "master") set(PROJECT_VERSION ${PROJECT_VERSION}-g${GIT_DESCRIBE_VERSION}) - MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + MESSAGE("Sunshine Version: ${GIT_DESCRIBE_VERSION}") endif() if(GIT_IS_DIRTY) set(PROJECT_VERSION ${PROJECT_VERSION}-dirty) - MESSAGE(Git tree is dirty!) + MESSAGE("Git tree is dirty!") endif() else() MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") From d48d5aa13530bfaed76070b35eaa9f9360626f12 Mon Sep 17 00:00:00 2001 From: Elia Zammuto Date: Wed, 8 Mar 2023 22:41:12 +0100 Subject: [PATCH 21/28] Let GitHub actions override git status --- CMakeLists.txt | 86 ++++++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d7a9e1f6a77..d5911bff87c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,47 +10,57 @@ and Nvidia GPUs for hardware encoding. Software encoding is also available. You Moonlight client on a variety of devices. A web UI is provided to allow configuration, and client pairing, from \ your favorite web browser. Pair from the local server or any mobile device.") +#If BRANCH and BUILD_VERSION are both defined, then we are building a master branch +if((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION})) # cmake-lint: disable=W0106 + MESSAGE("Got from CI master branch and version $ENV{BUILD_VERSION}") + set(PROJECT_VERSION $ENV{BUILD_VERSION}) +#If BRANCH is set but not BUILD_VERSION we are building nightly, we gather only the commit hash +elseif((DEFINED ENV{BRANCH}) AND (DEFINED ENV{COMMIT})) + MESSAGE("Got from CI $ENV{BRANCH} branch and commit $ENV{COMMIT}") + set(PROJECT_VERSION ${PROJECT_VERSION}-g$ENV{COMMIT}) # Generate Sunshine Version based of the git tag # https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE -find_package(Git) -if(GIT_EXECUTABLE) - MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") - get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) - #Get current Branch - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_DESCRIBE_BRANCH - RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - # Gather current commit - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD - #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_DESCRIBE_VERSION - RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - # Check if Dirty - execute_process( - COMMAND ${GIT_EXECUTABLE} diff --quiet --exit-code - #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE GIT_IS_DIRTY - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(NOT GIT_DESCRIBE_ERROR_CODE) - MESSAGE(Sunshine Branch: ${GIT_DESCRIBE_BRANCH}) - if(NOT GIT_DESCRIBE_BRANCH STREQUAL "master") - set(PROJECT_VERSION ${PROJECT_VERSION}-g${GIT_DESCRIBE_VERSION}) - MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) - endif() - if(GIT_IS_DIRTY) - set(PROJECT_VERSION ${PROJECT_VERSION}-dirty) - MESSAGE(Git tree is dirty!) +else() + find_package(Git) + if(GIT_EXECUTABLE) + MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}") + get_filename_component(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) + #Get current Branch + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_BRANCH + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + # Gather current commit + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_DESCRIBE_VERSION + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + # Check if Dirty + execute_process( + COMMAND ${GIT_EXECUTABLE} diff --quiet --exit-code + #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_IS_DIRTY + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(NOT GIT_DESCRIBE_ERROR_CODE) + MESSAGE(Sunshine Branch: ${GIT_DESCRIBE_BRANCH}) + if(NOT GIT_DESCRIBE_BRANCH STREQUAL "master") + set(PROJECT_VERSION ${PROJECT_VERSION}-g${GIT_DESCRIBE_VERSION}) + MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + endif() + if(GIT_IS_DIRTY) + set(PROJECT_VERSION ${PROJECT_VERSION}-dirty) + MESSAGE(Git tree is dirty!) + endif() + else() + MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") endif() - else() - MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") endif() endif() From 594c8362f7e8b9b3deca61cd00aa75bbe1a385d7 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 17:29:37 -0500 Subject: [PATCH 22/28] add build env variables --- .github/workflows/CI.yml | 23 +++++++++++++++++++---- docker/archlinux.dockerfile | 5 +++++ docker/debian-bullseye.dockerfile | 9 +++++++++ docker/fedora-36.dockerfile | 9 +++++++++ docker/fedora-37.dockerfile | 9 +++++++++ docker/ubuntu-20.04.dockerfile | 9 +++++++++ docker/ubuntu-22.04.dockerfile | 9 +++++++++ 7 files changed, 69 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index ae875749d59..2f8222b8eb1 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -362,6 +362,10 @@ jobs: sudo rm /root/cuda.run - name: Build Linux + env: + BRANCH: ${{ github.head_ref || github.ref_name }} + BUILD_VERSION: ${{ needs.check_changelog.outputs.next_version_bare }} + COMMIT: ${{ github.event.pull_request.head.sha || github.sha }} run: | mkdir -p build mkdir -p artifacts @@ -485,6 +489,10 @@ jobs: ln -sf /usr/local/opt/openssl/include/openssl /usr/local/include/openssl - name: Build MacOS + env: + BRANCH: ${{ github.head_ref || github.ref_name }} + BUILD_VERSION: ${{ needs.check_changelog.outputs.next_version_bare }} + COMMIT: ${{ github.event.pull_request.head.sha || github.sha }} run: | npm install @@ -641,6 +649,8 @@ jobs: echo "subportlist=${subportlist}" >> $GITHUB_OUTPUT - name: Run port lint for all subports + env: + subportlist: ${{ steps.subportlist.outputs.subportlist }} run: | set -eu fail=0 @@ -662,10 +672,13 @@ jobs: echo "::endgroup::" done exit "$fail" - env: - subportlist: ${{ steps.subportlist.outputs.subportlist }} - name: Build subports + env: + subportlist: ${{ steps.subportlist.outputs.subportlist }} + BRANCH: ${{ github.head_ref || github.ref_name }} + BUILD_VERSION: ${{ needs.check_changelog.outputs.next_version_bare }} + COMMIT: ${{ github.event.pull_request.head.sha || github.sha }} run: | set -eu fail=0 @@ -714,8 +727,6 @@ jobs: echo "::endgroup::" done exit "$fail" - env: - subportlist: ${{ steps.subportlist.outputs.subportlist }} - name: Package run: | @@ -795,6 +806,10 @@ jobs: - name: Build Windows shell: msys2 {0} + env: + BRANCH: ${{ github.head_ref || github.ref_name }} + BUILD_VERSION: ${{ needs.check_changelog.outputs.next_version_bare }} + COMMIT: ${{ github.event.pull_request.head.sha || github.sha }} run: | mkdir build cd build diff --git a/docker/archlinux.dockerfile b/docker/archlinux.dockerfile index d02d2369977..5b2d7a60c4e 100644 --- a/docker/archlinux.dockerfile +++ b/docker/archlinux.dockerfile @@ -22,11 +22,16 @@ RUN useradd -m builder && \ FROM sunshine-base as sunshine-build +ARG BRANCH ARG BUILD_VERSION ARG COMMIT ARG CLONE_URL # note: BUILD_VERSION may be blank +ENV BRANCH=${BRANCH} +ENV BUILD_VERSION=${BUILD_VERSION} +ENV COMMIT=${COMMIT} + SHELL ["/bin/bash", "-o", "pipefail", "-c"] # install dependencies # cuda, libcap, and libdrm are optional dependencies for PKGBUILD diff --git a/docker/debian-bullseye.dockerfile b/docker/debian-bullseye.dockerfile index 638d4d83ddd..1d2d0fcf6e4 100644 --- a/docker/debian-bullseye.dockerfile +++ b/docker/debian-bullseye.dockerfile @@ -14,6 +14,15 @@ FROM sunshine-base as sunshine-build ARG TARGETPLATFORM RUN echo "target_platform: ${TARGETPLATFORM}" +ARG BRANCH +ARG BUILD_VERSION +ARG COMMIT +# note: BUILD_VERSION may be blank + +ENV BRANCH=${BRANCH} +ENV BUILD_VERSION=${BUILD_VERSION} +ENV COMMIT=${COMMIT} + SHELL ["/bin/bash", "-o", "pipefail", "-c"] # install dependencies RUN <<_DEPS diff --git a/docker/fedora-36.dockerfile b/docker/fedora-36.dockerfile index f400d68585f..e6d88b1b643 100644 --- a/docker/fedora-36.dockerfile +++ b/docker/fedora-36.dockerfile @@ -12,6 +12,15 @@ FROM sunshine-base as sunshine-build ARG TARGETPLATFORM RUN echo "target_platform: ${TARGETPLATFORM}" +ARG BRANCH +ARG BUILD_VERSION +ARG COMMIT +# note: BUILD_VERSION may be blank + +ENV BRANCH=${BRANCH} +ENV BUILD_VERSION=${BUILD_VERSION} +ENV COMMIT=${COMMIT} + SHELL ["/bin/bash", "-o", "pipefail", "-c"] # install dependencies # hadolint ignore=DL3041 diff --git a/docker/fedora-37.dockerfile b/docker/fedora-37.dockerfile index 82596a281d9..54dfd8dd3b6 100644 --- a/docker/fedora-37.dockerfile +++ b/docker/fedora-37.dockerfile @@ -12,6 +12,15 @@ FROM sunshine-base as sunshine-build ARG TARGETPLATFORM RUN echo "target_platform: ${TARGETPLATFORM}" +ARG BRANCH +ARG BUILD_VERSION +ARG COMMIT +# note: BUILD_VERSION may be blank + +ENV BRANCH=${BRANCH} +ENV BUILD_VERSION=${BUILD_VERSION} +ENV COMMIT=${COMMIT} + SHELL ["/bin/bash", "-o", "pipefail", "-c"] # install dependencies # hadolint ignore=DL3041 diff --git a/docker/ubuntu-20.04.dockerfile b/docker/ubuntu-20.04.dockerfile index 6d759bc5d0f..dbc37ecb80a 100644 --- a/docker/ubuntu-20.04.dockerfile +++ b/docker/ubuntu-20.04.dockerfile @@ -14,6 +14,15 @@ FROM sunshine-base as sunshine-build ARG TARGETPLATFORM RUN echo "target_platform: ${TARGETPLATFORM}" +ARG BRANCH +ARG BUILD_VERSION +ARG COMMIT +# note: BUILD_VERSION may be blank + +ENV BRANCH=${BRANCH} +ENV BUILD_VERSION=${BUILD_VERSION} +ENV COMMIT=${COMMIT} + SHELL ["/bin/bash", "-o", "pipefail", "-c"] # install dependencies RUN <<_DEPS diff --git a/docker/ubuntu-22.04.dockerfile b/docker/ubuntu-22.04.dockerfile index 6dc2e81e8b2..ec13e684cc0 100644 --- a/docker/ubuntu-22.04.dockerfile +++ b/docker/ubuntu-22.04.dockerfile @@ -14,6 +14,15 @@ FROM sunshine-base as sunshine-build ARG TARGETPLATFORM RUN echo "target_platform: ${TARGETPLATFORM}" +ARG BRANCH +ARG BUILD_VERSION +ARG COMMIT +# note: BUILD_VERSION may be blank + +ENV BRANCH=${BRANCH} +ENV BUILD_VERSION=${BUILD_VERSION} +ENV COMMIT=${COMMIT} + SHELL ["/bin/bash", "-o", "pipefail", "-c"] # install dependencies RUN <<_DEPS From c55f8d1d98746bf7bf35a7fb70db576d1963d21d Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 17:40:47 -0500 Subject: [PATCH 23/28] remove unnecessary cmake lint disable comment --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf73b944884..c39905c46ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ Moonlight client on a variety of devices. A web UI is provided to allow configur your favorite web browser. Pair from the local server or any mobile device.") #If BRANCH and BUILD_VERSION are both defined, then we are building a master branch -if((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION})) # cmake-lint: disable=W0106 +if((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION})) MESSAGE("Got from CI master branch and version $ENV{BUILD_VERSION}") set(PROJECT_VERSION $ENV{BUILD_VERSION}) #If BRANCH is set but not BUILD_VERSION we are building nightly, we gather only the commit hash From 1357d7d8584fc664d4b6ed4848a97699ad0321a8 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 17:50:43 -0500 Subject: [PATCH 24/28] fix branch and version checks --- .github/workflows/CI.yml | 1 + CMakeLists.txt | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 2f8222b8eb1..a1a946d2a7b 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -46,6 +46,7 @@ jobs: last_version: ${{ steps.verify_changelog.outputs.latest_release_tag_name }} release_body: ${{ steps.verify_changelog.outputs.changelog_parser_description }} + # todo - remove this job once versioning is fully automated by cmake check_versions: name: Check Versions runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index c39905c46ad..f0d16c7fd75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.18) # `CMAKE_CUDA_ARCHITECTURES` requires 3.18 +# todo - set version to 0.0.0 once confident in automated versioning project(Sunshine VERSION 0.18.4 DESCRIPTION "Sunshine is a self-hosted game stream host for Moonlight." HOMEPAGE_URL "https://app.lizardbyte.dev") @@ -10,14 +11,17 @@ and Nvidia GPUs for hardware encoding. Software encoding is also available. You Moonlight client on a variety of devices. A web UI is provided to allow configuration, and client pairing, from \ your favorite web browser. Pair from the local server or any mobile device.") -#If BRANCH and BUILD_VERSION are both defined, then we are building a master branch -if((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION})) - MESSAGE("Got from CI master branch and version $ENV{BUILD_VERSION}") - set(PROJECT_VERSION $ENV{BUILD_VERSION}) -#If BRANCH is set but not BUILD_VERSION we are building nightly, we gather only the commit hash -elseif((DEFINED ENV{BRANCH}) AND (DEFINED ENV{COMMIT})) - MESSAGE("Got from CI $ENV{BRANCH} branch and commit $ENV{COMMIT}") - set(PROJECT_VERSION ${PROJECT_VERSION}-g$ENV{COMMIT}) +# Check if env vars are defined before attempting to access them, variables will be defined even if blank +if((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION}) AND (DEFINED ENV{COMMIT})) # cmake-lint: disable=W0106 + # If BRANCH is "master" and BUILD_VERSION is not empty, then we are building a master branch + if(($ENV{BRANCH} STREQUAL "master") AND (NOT $ENV{BUILD_VERSION} STREQUAL "")) + MESSAGE("Got from CI master branch and version $ENV{BUILD_VERSION}") + set(PROJECT_VERSION $ENV{BUILD_VERSION}) + #If BRANCH is set but not BUILD_VERSION we are building nightly, we gather only the commit hash + elseif((DEFINED ENV{BRANCH}) AND (DEFINED ENV{COMMIT})) + MESSAGE("Got from CI $ENV{BRANCH} branch and commit $ENV{COMMIT}") + set(PROJECT_VERSION ${PROJECT_VERSION}-g$ENV{COMMIT}) + endif() # Generate Sunshine Version based of the git tag # https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE else() @@ -129,7 +133,7 @@ pkg_check_modules(CURL REQUIRED libcurl) if(WIN32) set(Boost_USE_STATIC_LIBS ON) # cmake-lint: disable=C0103 # workaround to prevent link errors against icudata, icui18n - set(Boost_NO_BOOST_CMAKE ON) # cmake-lint: disable=C0103 + set(Boost_NO_BOOST_CMAKE ON) # cmake-lint: disable=C0103 endif() find_package(Boost COMPONENTS locale log filesystem program_options REQUIRED) From ef74ac7fd4e034def5e4c3efa750da01635dfddb Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 19:02:10 -0500 Subject: [PATCH 25/28] replace `-` in version with `.` --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0d16c7fd75..da6c895d9f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ if((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION}) AND (DEFINED ENV{COMMI #If BRANCH is set but not BUILD_VERSION we are building nightly, we gather only the commit hash elseif((DEFINED ENV{BRANCH}) AND (DEFINED ENV{COMMIT})) MESSAGE("Got from CI $ENV{BRANCH} branch and commit $ENV{COMMIT}") - set(PROJECT_VERSION ${PROJECT_VERSION}-g$ENV{COMMIT}) + set(PROJECT_VERSION ${PROJECT_VERSION}.$ENV{COMMIT}) endif() # Generate Sunshine Version based of the git tag # https://github.com/nocnokneo/cmake-git-versioning-example/blob/master/LICENSE @@ -55,11 +55,11 @@ else() if(NOT GIT_DESCRIBE_ERROR_CODE) MESSAGE(Sunshine Branch: ${GIT_DESCRIBE_BRANCH}) if(NOT GIT_DESCRIBE_BRANCH STREQUAL "master") - set(PROJECT_VERSION ${PROJECT_VERSION}-g${GIT_DESCRIBE_VERSION}) + set(PROJECT_VERSION ${PROJECT_VERSION}.${GIT_DESCRIBE_VERSION}) MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) endif() if(GIT_IS_DIRTY) - set(PROJECT_VERSION ${PROJECT_VERSION}-dirty) + set(PROJECT_VERSION ${PROJECT_VERSION}.dirty) MESSAGE(Git tree is dirty!) endif() else() From 268c5e1fca2d278bb43d54ec65208dc9c999a666 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Wed, 8 Mar 2023 19:02:23 -0500 Subject: [PATCH 26/28] cmake: quote messages and warn if git not installed --- .github/workflows/CI.yml | 6 ++---- CMakeLists.txt | 12 +++++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index a1a946d2a7b..509cf93f9da 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -599,7 +599,8 @@ jobs: mkdir build cd build - cmake -DGITHUB_COMMIT=${commit} \ + cmake \ + -DGITHUB_COMMIT=${commit} \ -DGITHUB_CLONE_URL=${clone_url} \ -DSUNSHINE_CONFIGURE_PORTFILE=ON \ -DSUNSHINE_CONFIGURE_ONLY=ON \ @@ -677,9 +678,6 @@ jobs: - name: Build subports env: subportlist: ${{ steps.subportlist.outputs.subportlist }} - BRANCH: ${{ github.head_ref || github.ref_name }} - BUILD_VERSION: ${{ needs.check_changelog.outputs.next_version_bare }} - COMMIT: ${{ github.event.pull_request.head.sha || github.sha }} run: | set -eu fail=0 diff --git a/CMakeLists.txt b/CMakeLists.txt index da6c895d9f4..730775ea0e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,12 +13,12 @@ your favorite web browser. Pair from the local server or any mobile device.") # Check if env vars are defined before attempting to access them, variables will be defined even if blank if((DEFINED ENV{BRANCH}) AND (DEFINED ENV{BUILD_VERSION}) AND (DEFINED ENV{COMMIT})) # cmake-lint: disable=W0106 - # If BRANCH is "master" and BUILD_VERSION is not empty, then we are building a master branch if(($ENV{BRANCH} STREQUAL "master") AND (NOT $ENV{BUILD_VERSION} STREQUAL "")) + # If BRANCH is "master" and BUILD_VERSION is not empty, then we are building a master branch MESSAGE("Got from CI master branch and version $ENV{BUILD_VERSION}") set(PROJECT_VERSION $ENV{BUILD_VERSION}) - #If BRANCH is set but not BUILD_VERSION we are building nightly, we gather only the commit hash elseif((DEFINED ENV{BRANCH}) AND (DEFINED ENV{COMMIT})) + # If BRANCH is set but not BUILD_VERSION we are building nightly, we gather only the commit hash MESSAGE("Got from CI $ENV{BRANCH} branch and commit $ENV{COMMIT}") set(PROJECT_VERSION ${PROJECT_VERSION}.$ENV{COMMIT}) endif() @@ -53,18 +53,20 @@ else() OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT GIT_DESCRIBE_ERROR_CODE) - MESSAGE(Sunshine Branch: ${GIT_DESCRIBE_BRANCH}) + MESSAGE("Sunshine Branch: ${GIT_DESCRIBE_BRANCH}") if(NOT GIT_DESCRIBE_BRANCH STREQUAL "master") set(PROJECT_VERSION ${PROJECT_VERSION}.${GIT_DESCRIBE_VERSION}) - MESSAGE(Sunshine Version: ${GIT_DESCRIBE_VERSION}) + MESSAGE("Sunshine Version: ${GIT_DESCRIBE_VERSION}") endif() if(GIT_IS_DIRTY) set(PROJECT_VERSION ${PROJECT_VERSION}.dirty) - MESSAGE(Git tree is dirty!) + MESSAGE("Git tree is dirty!") endif() else() MESSAGE(ERROR ": Got git error while fetching tags: ${GIT_DESCRIBE_ERROR_CODE}") endif() + else() + MESSAGE(WARNING ": Git not found, cannot find git version") endif() endif() From 55faada07ecc84cc5cb268b5252d2541637f1cd9 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Thu, 9 Mar 2023 09:38:29 -0500 Subject: [PATCH 27/28] update version checks in js --- src_assets/common/assets/web/index.html | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src_assets/common/assets/web/index.html b/src_assets/common/assets/web/index.html index 0b34bd26af7..b06d7146ce7 100644 --- a/src_assets/common/assets/web/index.html +++ b/src_assets/common/assets/web/index.html @@ -97,17 +97,29 @@

Legal

this.loading = false; }, computed: { + // Check for new stable version hasNewStable() { + // If we can't get versions, return false if (!this.githubVersion || !this.version) return false; + // If built with dirty git tree, return false if (this.version.indexOf("dirty") !== -1) return false; + // Get the GitHub version tag let v = this.githubVersion.name; + // If the version starts with a v, remove it if (v.indexOf("v") === 0) v = v.substring(1); - return v !== this.version.split("-")[0]; + // return true if the version is different, otherwise false + return v !== this.version.split(".")[0]; }, + // Check for new nightly version hasNewNightly() { - if (!this.version || !this.nightlyData || this.version.split("-g").length === 1) return false; + // If we're not on a nightly build, just return false + // If length of version split is 3, we're on a stable build + if (!this.version || !this.nightlyData || this.version.split(".").length === 3) return false; + // If built with dirty git tree, return false if (this.version.indexOf("dirty") !== -1) return false; - let commit = this.version.split("-g")[1].split("-")[0]; + // Get the commit hash + let commit = this.version.split(".")[-1]; + // return true if the commit hash is different, otherwise false return this.nightlyData.head_sha.indexOf(commit) !== 0; } } From bd048d4288268a2a5159702a4e7090e007f0e360 Mon Sep 17 00:00:00 2001 From: ReenigneArcher <42013603+ReenigneArcher@users.noreply.github.com> Date: Thu, 9 Mar 2023 17:46:59 -0500 Subject: [PATCH 28/28] config: skip writing version --- src_assets/common/assets/web/config.html | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src_assets/common/assets/web/config.html b/src_assets/common/assets/web/config.html index d5c8dabaae4..2a0efaa70fe 100644 --- a/src_assets/common/assets/web/config.html +++ b/src_assets/common/assets/web/config.html @@ -973,25 +973,27 @@

Configuration

this.restart_supported = (this.config.restart_supported === "true"); var app = document.getElementById("app"); - if (this.platform == "windows") { + if (this.platform === "windows") { this.tabs = this.tabs.filter((el) => { return el.id !== "va-api" && el.id !== "vt"; }); } - if (this.platform == "linux") { + if (this.platform === "linux") { this.tabs = this.tabs.filter((el) => { return el.id !== "amd" && el.id !== "qsv" && el.id !== "vt"; }); } - if (this.platform == "macos") { + if (this.platform === "macos") { this.tabs = this.tabs.filter((el) => { return el.id !== "amd" && el.id !== "nv" && el.id !== "qsv" && el.id !== "va-api"; }); } - delete this.config.status; + // remove values we don't want in the config file delete this.config.platform; delete this.config.restart_supported; + delete this.config.status; + delete this.config.version; //Populate default values if not present in config this.config.key_rightalt_to_key_win = this.config.key_rightalt_to_key_win || "disabled"; @@ -1057,7 +1059,7 @@

Configuration

method: "POST", body: JSON.stringify(this.config), }).then((r) => { - if (r.status == 200) this.saved = true; + if (r.status === 200) this.saved = true; }); }, apply() { @@ -1067,11 +1069,11 @@

Configuration

method: "POST", body: JSON.stringify(this.config), }).then((r) => { - if (r.status == 200) { + if (r.status === 200) { fetch("/api/restart", { method: "POST", }).then((r) => { - if (r.status == 200) this.restarted = true; + if (r.status === 200) this.restarted = true; }); } });