From ad3e7ac80ef024eddf3bc4207fcb93a56e482aca Mon Sep 17 00:00:00 2001 From: Rick Peters Date: Fri, 25 Sep 2026 15:59:47 +0200 Subject: [PATCH] feat: GitHub builds the app; run it with curl steamify-app.tar.gz (ui/, steamify.sh, lib/, icon) and its launcher steamify-app.sh in every release: it installs to ~/.local/share/steamify/app, installs PySide6 if needed, adds a launcher entry and starts the app. STEAMIFY_BRANCH= runs a branch before it's released. --- .github/workflows/bundle.yml | 22 +++++++++++-- ui/steamify-app.sh | 63 ++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 3 deletions(-) create mode 100755 ui/steamify-app.sh diff --git a/.github/workflows/bundle.yml b/.github/workflows/bundle.yml index 5cc28d2..0863b45 100644 --- a/.github/workflows/bundle.yml +++ b/.github/workflows/bundle.yml @@ -5,6 +5,9 @@ # release are moved to it, so both of these always get the newest version: # curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify.sh | bash # curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/download/latest/steamify.sh | bash +# Each release also has the app (v2): steamify-app.tar.gz (ui/, steamify.sh, +# lib/, the icon) and its launcher, run with: +# curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify-app.sh | bash # Pull requests only build and check it, and warn when VERSION is already released. name: Single-file build @@ -28,17 +31,26 @@ jobs: - name: Build run: | .github/tools/bundle.sh dist/steamify.sh + # The app: sources, not the single-file build (its backend mode runs + # steamify.sh from its own folder). + tar -czf dist/steamify-app.tar.gz steamify.sh lib ui assets/steam-gaming-settings.svg LICENSE.md + cp ui/steamify-app.sh dist/steamify-app.sh - name: Check run: | bash -n dist/steamify.sh # SC2034/SC2154: variables used across the inlined modules. shellcheck -S warning -e SC2034,SC2154 dist/steamify.sh + shellcheck -S warning dist/steamify-app.sh + python3 -m py_compile ui/steamify-ui - uses: actions/upload-artifact@v4 with: name: steamify - path: dist/steamify.sh + path: | + dist/steamify.sh + dist/steamify-app.tar.gz + dist/steamify-app.sh - name: Version id: version @@ -71,9 +83,13 @@ jobs: curl -fsSL https://github.com/${{ github.repository }}/releases/latest/download/steamify.sh | bash + Or the app (v2): + + curl -fsSL https://github.com/${{ github.repository }}/releases/latest/download/steamify-app.sh | bash + ## Changes in v$VERSION $changes" - gh release create "v$VERSION" dist/steamify.sh assets/steam-gaming-settings.svg \ + gh release create "v$VERSION" dist/steamify.sh dist/steamify-app.sh dist/steamify-app.tar.gz assets/steam-gaming-settings.svg \ --target "$GITHUB_SHA" --title "Steamify CachyOS v$VERSION" --notes "$notes" --latest # "latest" follows the newest version tag, for the older install URL @@ -86,4 +102,4 @@ jobs: else gh release create latest --title "Steamify CachyOS - latest (v$VERSION)" --notes "$latest_notes" --latest=false fi - gh release upload latest dist/steamify.sh assets/steam-gaming-settings.svg --clobber + gh release upload latest dist/steamify.sh dist/steamify-app.sh dist/steamify-app.tar.gz assets/steam-gaming-settings.svg --clobber diff --git a/ui/steamify-app.sh b/ui/steamify-app.sh new file mode 100755 index 0000000..f118b48 --- /dev/null +++ b/ui/steamify-app.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Steamify CachyOS - get and start the app (v2), for `curl | bash`: +# curl -fsSL https://github.com/theupriser/steamify-cachyos/releases/latest/download/steamify-app.sh | bash +# Downloads the newest release's app package (steamify-app.tar.gz: the app, +# steamify.sh and lib/) to ~/.local/share/steamify/app, installs PySide6 if +# it's missing, adds a launcher entry, and starts the app. +# STEAMIFY_BRANCH= takes that branch's source instead of a release +# (for testing before a release). +set -euo pipefail + +REPO="theupriser/steamify-cachyos" +DEST="${XDG_DATA_HOME:-$HOME/.local/share}/steamify/app" +APPS="${XDG_DATA_HOME:-$HOME/.local/share}/applications" + +say() { printf '\033[36m[INFO]\033[0m %s\n' "$*"; } +die() { printf '\033[31m[ERROR] %s\033[0m\n' "$*" >&2; exit 1; } + +[[ $EUID -ne 0 ]] || die "Run this as your normal user, not as root." +command -v pacman >/dev/null || die "This is for CachyOS/Arch (no pacman found)." + +tmp="$(mktemp -d)"; trap 'rm -rf "$tmp"' EXIT +if [[ -n "${STEAMIFY_BRANCH:-}" ]]; then + say "Downloading Steamify from the $STEAMIFY_BRANCH branch..." + curl -fsSL "https://github.com/$REPO/archive/refs/heads/$STEAMIFY_BRANCH.tar.gz" -o "$tmp/src.tar.gz" || + die "Couldn't download the $STEAMIFY_BRANCH branch." + mkdir "$tmp/app" + tar -xzf "$tmp/src.tar.gz" -C "$tmp/app" --strip-components=1 +else + say "Downloading the newest Steamify app..." + curl -fsSL "https://github.com/$REPO/releases/latest/download/steamify-app.tar.gz" -o "$tmp/app.tar.gz" || + die "Couldn't download the app (is there a release with steamify-app.tar.gz yet?)." + mkdir "$tmp/app" + tar -xzf "$tmp/app.tar.gz" -C "$tmp/app" +fi +[[ -x "$tmp/app/ui/steamify-ui" && -f "$tmp/app/steamify.sh" ]] || die "The download doesn't contain the app." + +mkdir -p "$(dirname "$DEST")" +rm -rf "$DEST.new"; mv "$tmp/app" "$DEST.new" +rm -rf "$DEST"; mv "$DEST.new" "$DEST" +say "Installed to $DEST ($(grep -m1 -oP '^VERSION=\K.*' "$DEST/steamify.sh"))." + +if ! python3 -c 'import PySide6.QtQml' 2>/dev/null; then + say "The app needs PySide6 (Qt for Python); installing it..." + # Piped in via curl, stdin isn't the terminal: sudo asks on it anyway. + sudo pacman -S --needed --noconfirm pyside6 "$APPS/steamify-ui.desktop" << EOF +[Desktop Entry] +Type=Application +Name=Steamify CachyOS +Comment=Turn this PC into a SteamOS-style console +Exec=$DEST/ui/steamify-ui +Icon=$DEST/assets/steam-gaming-settings.svg +Terminal=false +Categories=Game;Settings; +EOF +command -v update-desktop-database >/dev/null && update-desktop-database "$APPS" 2>/dev/null || true + +say "Starting Steamify..." +setsid "$DEST/ui/steamify-ui" >/dev/null 2>&1 < /dev/null &