diff options
| author | TrainDoctor <traindoctor@protonmail.com> | 2022-10-30 16:37:19 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-30 16:37:19 -0700 |
| commit | 5e3de747d37b4b7042485a6733b2cd8a883b16ef (patch) | |
| tree | 2aec58e119ab2e34f2a4a88b4a3076db08f0e8bd | |
| parent | d389b403b521c48920d872c6ddd133b63ada2528 (diff) | |
| download | decky-loader-2.3.1-pre2.tar.gz decky-loader-2.3.1-pre2.zip | |
Systemd service updating (#240)v2.3.1-pre2
* Add services and updated installer files
* Loader updates service file during update!
* Testing update branch doesn't exist lol
* Update to dfl 3.7.12
* Fix services and add working service updater
* Revert services but replace their aliases
* Fix install scripts as well
* Move leftover service files to .systemd dir
* No wonder it's not trimming the file...
* fix whitespace
* Remove unused imports
* Remove another un-used import
Co-authored-by: AAGaming <aa@mail.catvibers.me>
| -rw-r--r-- | backend/updater.py | 48 | ||||
| -rw-r--r-- | dist/install_prerelease.sh | 26 | ||||
| -rw-r--r-- | dist/install_release.sh | 23 | ||||
| -rw-r--r-- | dist/plugin_loader-prerelease.service | 14 | ||||
| -rw-r--r-- | dist/plugin_loader-release.service | 14 | ||||
| -rw-r--r-- | frontend/package.json | 2 | ||||
| -rw-r--r-- | frontend/pnpm-lock.yaml | 8 | ||||
| -rw-r--r-- | frontend/src/components/settings/pages/general/BranchSelect.tsx | 2 | ||||
| -rw-r--r-- | frontend/src/store.tsx | 1 | ||||
| -rw-r--r-- | frontend/src/tabs-hook.tsx | 4 | ||||
| -rw-r--r-- | frontend/src/updater.ts | 2 |
11 files changed, 126 insertions, 18 deletions
diff --git a/backend/updater.py b/backend/updater.py index a209f103..7647d204 100644 --- a/backend/updater.py +++ b/backend/updater.py @@ -1,3 +1,5 @@ +import os +import shutil import uuid from asyncio import sleep from ensurepip import version @@ -79,6 +81,20 @@ class Updater: async def _get_branch(self, manager: SettingsManager): return self.get_branch(manager) + # retrieve relevant service file's url for each branch + def get_service_url(self): + logger.debug("Getting service URL") + branch = self.get_branch(self.context.settings) + match branch: + case 0: + url = "https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/service-updater/dist/plugin_loader-release.service" + case 1 | 2: + url = "https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/service-updater/dist/plugin_loader-prerelease.service" + case _: + logger.error("You have an invalid branch set... Defaulting to prerelease service, please send the logs to the devs!") + url = "https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/service-updater/dist/plugin_loader-prerelease.service" + return str(url) + async def get_version(self): if self.localVer: return { @@ -122,14 +138,44 @@ class Updater: await sleep(60 * 60 * 6) # 6 hours async def do_update(self): + logger.debug("Starting update.") version = self.remoteVer["tag_name"] download_url = self.remoteVer["assets"][0]["browser_download_url"] + service_url = self.get_service_url() + logger.debug("Retrieved service URL") tab = await get_gamepadui_tab() await tab.open_websocket() async with ClientSession() as web: + logger.debug("Downloading systemd service") + # download the relevant systemd service depending upon branch + async with web.request("GET", service_url, ssl=helpers.get_ssl_context(), allow_redirects=True) as res: + logger.debug("Downloading service file") + data = await res.content.read() + logger.debug(str(data)) + service_file_path = path.join(getcwd(), "plugin_loader.service") + try: + with open(path.join(getcwd(), "plugin_loader.service"), "wb") as out: + out.write(data) + except Exception as e: + logger.error(f"Error at %s", exc_info=e) + with open(path.join(getcwd(), "plugin_loader.service"), 'r') as service_file: + service_data = service_file.read() + service_data = service_data.replace("${HOMEBREW_FOLDER}", "/home/"+helpers.get_user()+"/homebrew") + with open(path.join(getcwd(), "plugin_loader.service"), 'w') as service_file: + service_file.write(service_data) + + logger.debug("Saved service file") + logger.debug("Copying service file over current file.") + shutil.copy(service_file_path, "/etc/systemd/system/plugin_loader.service") + if not os.path.exists(path.join(getcwd(), ".systemd")): + os.mkdir(path.join(getcwd(), ".systemd")) + shutil.move(service_file_path, path.join(getcwd(), ".systemd")+"/plugin_loader.service") + + logger.debug("Downloading binary") async with web.request("GET", download_url, ssl=helpers.get_ssl_context(), allow_redirects=True) as res: total = int(res.headers.get('content-length', 0)) + # we need to not delete the binary until we have downloaded the new binary! try: remove(path.join(getcwd(), "PluginLoader")) except: @@ -149,9 +195,9 @@ class Updater: out.write(version) call(['chmod', '+x', path.join(getcwd(), "PluginLoader")]) - logger.info("Updated loader installation.") await tab.evaluate_js("window.DeckyUpdater.finish()", False, False) + await self.do_restart() await tab.client.close() async def do_restart(self): diff --git a/dist/install_prerelease.sh b/dist/install_prerelease.sh index 8b9be30e..fedc3eaf 100644 --- a/dist/install_prerelease.sh +++ b/dist/install_prerelease.sh @@ -7,8 +7,8 @@ echo "Installing Steam Deck Plugin Loader pre-release..." USER_DIR="$(getent passwd $SUDO_USER | cut -d: -f6)" HOMEBREW_FOLDER="${USER_DIR}/homebrew" -# # Create folder structure -rm -rf ${HOMEBREW_FOLDER}/services +# Create folder structure +rm -rf "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" @@ -26,8 +26,10 @@ systemctl --user disable plugin_loader 2> /dev/null systemctl stop plugin_loader 2> /dev/null systemctl disable plugin_loader 2> /dev/null -rm -f "/etc/systemd/system/plugin_loader.service" -cat > "/etc/systemd/system/plugin_loader.service" <<- EOM + +curl -L https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/service-updater/dist/plugin_loader-prerelease.service --output ${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service + +cat > "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" <<- EOM [Unit] Description=SteamDeck Plugin Loader After=network-online.target @@ -43,6 +45,22 @@ Environment=LOG_LEVEL=DEBUG [Install] WantedBy=multi-user.target EOM + +if [[ -f "${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service" ]]; then + printf "Grabbed latest prerelease service.\n" + sed -i -e "s|\${HOMEBREW_FOLDER}|${HOMEBREW_FOLDER}|" "${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service" + cp -f "${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service" "/etc/systemd/system/plugin_loader.service" +else + printf "Could not curl latest prerelease systemd service, using built-in service as a backup!\n" + rm -f "/etc/systemd/system/plugin_loader.service" + cp "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" "/etc/systemd/system/plugin_loader.service" +fi + +mkdir -p ${HOMEBREW_FOLDER}/services/.systemd +cp ${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-prerelease.service +cp ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-backup.service +rm ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service + systemctl daemon-reload systemctl start plugin_loader systemctl enable plugin_loader diff --git a/dist/install_release.sh b/dist/install_release.sh index f4f1f91d..f27aaf2c 100644 --- a/dist/install_release.sh +++ b/dist/install_release.sh @@ -26,8 +26,10 @@ systemctl --user disable plugin_loader 2> /dev/null systemctl stop plugin_loader 2> /dev/null systemctl disable plugin_loader 2> /dev/null -rm -f "/etc/systemd/system/plugin_loader.service" -cat > "/etc/systemd/system/plugin_loader.service" <<- EOM + +curl -L https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/service-updater/dist/plugin_loader-release.service --output ${HOMEBREW_FOLDER}/services/plugin_loader-release.service + +cat > "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" <<- EOM [Unit] Description=SteamDeck Plugin Loader After=network-online.target @@ -39,9 +41,26 @@ Restart=always ExecStart=${HOMEBREW_FOLDER}/services/PluginLoader WorkingDirectory=${HOMEBREW_FOLDER}/services Environment=PLUGIN_PATH=${HOMEBREW_FOLDER}/plugins +Environment=LOG_LEVEL=INFO [Install] WantedBy=multi-user.target EOM + +if [[ -f "${HOMEBREW_FOLDER}/services/plugin_loader-release.service" ]]; then + printf "Grabbed latest release service.\n" + sed -i -e "s|\${HOMEBREW_FOLDER}|${HOMEBREW_FOLDER}|" "${HOMEBREW_FOLDER}/services/plugin_loader-release.service" + cp -f "${HOMEBREW_FOLDER}/services/plugin_loader-release.service" "/etc/systemd/system/plugin_loader.service" +else + printf "Could not curl latest release systemd service, using built-in service as a backup!\n" + rm -f "/etc/systemd/system/plugin_loader.service" + cp "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" "/etc/systemd/system/plugin_loader.service" +fi + +mkdir -p ${HOMEBREW_FOLDER}/services/.systemd +cp ${HOMEBREW_FOLDER}/services/plugin_loader-release.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-release.service +cp ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-backup.service +rm ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/plugin_loader-release.service + systemctl daemon-reload systemctl start plugin_loader systemctl enable plugin_loader diff --git a/dist/plugin_loader-prerelease.service b/dist/plugin_loader-prerelease.service new file mode 100644 index 00000000..a36a2435 --- /dev/null +++ b/dist/plugin_loader-prerelease.service @@ -0,0 +1,14 @@ +[Unit] +Description=SteamDeck Plugin Loader +After=network-online.target +Wants=network-online.target +[Service] +Type=simple +User=root +Restart=always +ExecStart=${HOMEBREW_FOLDER}/services/PluginLoader +WorkingDirectory=${HOMEBREW_FOLDER}/services +Environment=PLUGIN_PATH=${HOMEBREW_FOLDER}/plugins +Environment=LOG_LEVEL=DEBUG +[Install] +WantedBy=multi-user.target
\ No newline at end of file diff --git a/dist/plugin_loader-release.service b/dist/plugin_loader-release.service new file mode 100644 index 00000000..20fbe7b8 --- /dev/null +++ b/dist/plugin_loader-release.service @@ -0,0 +1,14 @@ +[Unit] +Description=SteamDeck Plugin Loader +After=network-online.target +Wants=network-online.target +[Service] +Type=simple +User=root +Restart=always +ExecStart=${HOMEBREW_FOLDER}/services/PluginLoader +WorkingDirectory=${HOMEBREW_FOLDER}/services +Environment=PLUGIN_PATH=${HOMEBREW_FOLDER}/plugins +Environment=LOG_LEVEL=INFO +[Install] +WantedBy=multi-user.target
\ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index ec09b0c2..782144ab 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -41,7 +41,7 @@ } }, "dependencies": { - "decky-frontend-lib": "^3.7.11", + "decky-frontend-lib": "^3.7.12", "react-file-icon": "^1.2.0", "react-icons": "^4.4.0", "react-markdown": "^8.0.3", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index ab6e2391..33d0a624 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -10,7 +10,7 @@ specifiers: '@types/react-file-icon': ^1.0.1 '@types/react-router': 5.1.18 '@types/webpack': ^5.28.0 - decky-frontend-lib: ^3.7.11 + decky-frontend-lib: ^3.7.12 husky: ^8.0.1 import-sort-style-module: ^6.0.0 inquirer: ^8.2.4 @@ -30,7 +30,7 @@ specifiers: typescript: ^4.7.4 dependencies: - decky-frontend-lib: 3.7.11 + decky-frontend-lib: 3.7.12 react-file-icon: 1.2.0_wcqkhtmu7mswc6yz4uyexck3ty react-icons: 4.4.0_react@16.14.0 react-markdown: 8.0.3_vshvapmxg47tngu7tvrsqpq55u @@ -944,8 +944,8 @@ packages: dependencies: ms: 2.1.2 - /decky-frontend-lib/3.7.11: - resolution: {integrity: sha512-c5/kXqCLYhCl0zC+kPJ2gTUjTp6N0zUFKzTQKVKTuQ3U+01fHAU6sUsDqudbdTNdjXiofGujMmeJqKaU2vQoXQ==} + /decky-frontend-lib/3.7.12: + resolution: {integrity: sha512-whDV9zHuEBFj17zKoT51aRcUxLvSzBNu2lc242/EO9aFFP064FVCrJu+r7CxWe0hlQ7sA4FKX1qgCwsZ6H+PZg==} dev: false /decode-named-character-reference/1.0.2: diff --git a/frontend/src/components/settings/pages/general/BranchSelect.tsx b/frontend/src/components/settings/pages/general/BranchSelect.tsx index 5e43a13d..27db6229 100644 --- a/frontend/src/components/settings/pages/general/BranchSelect.tsx +++ b/frontend/src/components/settings/pages/general/BranchSelect.tsx @@ -10,7 +10,7 @@ const logger = new Logger('BranchSelect'); enum UpdateBranch { Stable, Prerelease, - Testing, + // Testing, } const BranchSelect: FunctionComponent<{}> = () => { diff --git a/frontend/src/store.tsx b/frontend/src/store.tsx index 3ef3e361..bc9f281c 100644 --- a/frontend/src/store.tsx +++ b/frontend/src/store.tsx @@ -1,5 +1,4 @@ import { Plugin } from './plugin'; -import { getSetting, setSetting } from './utils/settings'; export enum Store { Default, diff --git a/frontend/src/tabs-hook.tsx b/frontend/src/tabs-hook.tsx index c7790f7e..a518c4c9 100644 --- a/frontend/src/tabs-hook.tsx +++ b/frontend/src/tabs-hook.tsx @@ -1,10 +1,8 @@ // TabsHook for versions after the Desktop merge -import { Patch, QuickAccessTab, afterPatch, findInReactTree, findModule, sleep } from 'decky-frontend-lib'; -import { memo } from 'react'; +import { Patch, QuickAccessTab, afterPatch, findInReactTree, sleep } from 'decky-frontend-lib'; import { QuickAccessVisibleStateProvider } from './components/QuickAccessVisibleState'; import Logger from './logger'; -import { findSP } from './utils/windows'; declare global { interface Window { diff --git a/frontend/src/updater.ts b/frontend/src/updater.ts index 16955104..339b2b72 100644 --- a/frontend/src/updater.ts +++ b/frontend/src/updater.ts @@ -1,7 +1,7 @@ export enum Branches { Release, Prerelease, - Testing, + // Testing, } export interface DeckyUpdater { |
