WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

WIP: Moving to cpack in order to unify installers across all platforms - #139

Closed
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack
Closed

WIP: Moving to cpack in order to unify installers across all platforms#139
ABeltramo wants to merge 13 commits into
LizardByte:nightlyfrom
ABeltramo:cpack

Conversation

@ABeltramo

@ABeltramoABeltramo commented Apr 23, 2022

Copy link
Copy Markdown
Contributor

Description

I'm moving package distribution to cpack which will unify the current .deb and .rpm generation and it'll enable creation of Windows Installers and Mac OSX bundles.
This should reduce considerably duplication of code.

Currently work in progress, needs testing on real deployments.

Issues Fixed or Closed

Type of Change

Please delete options that are not relevant.

  • New feature (non-breaking change which adds functionality)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated the documentation blocks for new or existing components

@ABeltramo

Copy link
Copy Markdown
ContributorAuthor

I'll modify the docs to reflect the change, if someone wants to try this out it's as simple as:

mkdir build # I like to put all the generated files inside here, so that we don't clutter the rootcd build
cmake ../
cpack -G DEB # you can also try RPM

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this! Once you're happy with everything, CI will also need to be updated. Also, once the CI is updated, we can run it when you push new changes, and have downloadable artifacts from the workflow run.

Linux builds: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L146

Windows build: https://github.com/SunshineStream/Sunshine/blob/c4054c75a7fdd0c336db326af5a77171db072e49/.github/workflows/CI.yml#L197

The final action in each job expects the release asset to be in the artifacts directory.

Comment threadCMakeLists.txt
set(CMAKE_INSTALL_PREFIX "/etc/sunshine")
endif()

include(CPack) No newline at end of file

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add new line at end of files

Comment threadassets/linux-deb/conffiles
Comment threadCMakeLists.txt

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close!

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +166 to +167
cp Sunshine__.rpm ../artifacts/
cp Sunshine__.deb ../artifacts/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as windows regarding move.

Let's use these filenames:
sunshine.deb
sunshine.rpm

Also, while changes are being made, let's order them alphabetically. deb first, then rpm.

Comment thread.github/workflows/CI.yml
Comment thread.github/workflows/CI.yml Outdated
Comment on lines +216 to +217
mkdir artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't need this here

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +232 to +223
- name: Package Windows
run: |
cd sunshine-windows-build
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
cpack

cp Sunshine__.exe ../artifacts

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep the package step as we discussed. Would be good to have a portable version as well.

Probably doesn't make much difference, but I think it would be better (slightly faster) to use move... also let's rename the file to sunshine-windows-installer.exe

Probably makes most sense to have both cpack and the move in the package step.

 - name: Package Windowsrun: | cd sunshine-windows-build cpack del ..\assets\apps_linux.json 7z a sunshine-windows.zip ..\assets 7z a sunshine-windows.zip sunshine.exe 7z a sunshine-windows.zip tools\dxgi-info.exe 7z a sunshine-windows.zip tools\audio-info.exe 7z a sunshine-windows.zip tools\sunshinesvc.exe 7z a sunshine-windows.zip ..\tools\install-service.bat 7z a sunshine-windows.zip ..\tools\uninstall-service.bat mkdir artifacts move "sunshine-windows.zip" "../artifacts" move "Sunshine__.exe" "../artifacts/sunshine-windows-installer.exe"

Comment threadCMakeLists.txt
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/sunshine.png)
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}_${VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this needs to change to prevent this (same with start menu entry).

image

Comment threadCMakeLists.txt Outdated
set(CPACK_PACKAGE_CONTACT "https://github.com/SunshineStream/Sunshine")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "https://github.com/SunshineStream/Sunshine")
set(CPACK_PACKAGE_DESCRIPTION "Gamestream host for Moonlight")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/SunshineStream/Sunshine")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://sunshinestream.github.io

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There might be more, but this is what I found so far.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +235 to +272
del ..\assets\apps_linux.json
7z a sunshine-windows.zip ..\assets
7z a sunshine-windows.zip sunshine.exe
7z a sunshine-windows.zip tools\dxgi-info.exe
7z a sunshine-windows.zip tools\audio-info.exe
7z a sunshine-windows.zip tools\sunshinesvc.exe
7z a sunshine-windows.zip ..\tools\install-service.bat
7z a sunshine-windows.zip ..\tools\uninstall-service.bat
cd ..
mkdir artifacts
move "sunshine-windows-build\sunshine-windows.zip" "artifacts"
- name: Upload Artifacts
cpack

mkdir -p artifacts/standalone
mkdir -p artifacts/web
mkdir -p artifacts/shaders/directx

# Installers
mv Sunshine__.exe artifacts/sunshine-windows-installer.exe

# Standalone
mv ../assets/web artifacts/web
mv tools artifacts/tools
mv ../assets/shaders/directx artifacts/shaders/directx
mv ../assets/apps_windows.json artifacts/apps_windows.json
mv ../assets/sunshine.conf artifacts/sunshine.conf
mv sunshine.exe artifacts/sunshine.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't work like this. We need only 2 files in the artifacts folders.

  • installer exe
  • zip (portable version as before)

This is because every file single in the assets directory will be uploaded as a release asset.

My code snip before should work (except the mkdir artifacts needed to be moved)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be pretty close #139 (comment)

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +273 to +258
- name: Upload Sunshine Installer
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows-installer
path: artifacts/sunshine-windows-installer.exe

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't be necessary because just using path: artifacts will upload all the files that exist in that folder (this will be the same behavior for the create release action)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with this is that Github will make one .zip file that contains both the .exe installer and the .zip with the sunshine standalone package resulting in a 20MB zip to be donwloaded that basically contains everything twice just packaged in two different formats (see: https://github.com/ABeltramo/Sunshine/actions/runs/2249492914).

I think it's better to split them in two separate 10MB artifacts so that users can download only the one needed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It only does it for artifacts though, not releases. Users are rarely downloading artifacts.

Just trying to keep the CI more simple as it's already overly complex.

Comment thread.github/workflows/CI.yml Outdated
Comment on lines +279 to +284
- name: Upload Sunshine executable
if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
uses: actions/upload-artifact@v3
with:
name: sunshine-windows
path: artifacts/
name: sunshine-windows-standalone
path: artifacts/standalone

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert this

check_versions:
name: Check Versions
runs-on: ubuntu-latest
needs: check_changelog

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was this changed? It's required here.

Check changelog runs first (doesn't run except on PRs or Pulls into master branch). Makes sure that the version in the changelog was updated and is not equal to the latest released version.

Then check versions runs... makes sure that the version number in the CMakeLists.txt was updated.

Comment thread.github/workflows/CI.yml
@ABeltramo

ABeltramo commented Apr 30, 2022

Copy link
Copy Markdown
ContributorAuthor

Current status:

  • rebased on top of latest nightly
  • fixed Github Actions to generate all packages, see: latest action
    • Windows installer and standalone zip should be good to go
    • Linux .deb and .rpm needs to be tested, appimage should be unchanged (unfortunately it's not supported by cpack)
    • OSX bundle .dmg can be generated but I can't run Sunshine on my Macbook M1 (segfault), also executing a .app, while possible, feels odd because it doesn't open up a terminal automatically like on Windows.
  • Generated packages should be tested on different platforms, volunteers?

This could be reviewed and merged if you are in a rush to release this, but I would like to cleanup scripts/ to have one single docker container that can build .deb and .rpm so that users can still compile without having to install extra packages on the host.

There's also probably some documentation to be updated, I haven't looked into it yet.

@ReenigneArcherReenigneArcher mentioned this pull request Apr 30, 2022
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@ABeltramo@ReenigneArcher