mirror of
https://github.com/theupriser/steamify-cachyos.git
synced 2026-10-03 17:41:58 +02:00
fix: Single-file build for curl, published by GitHub Actions
tools/bundle.sh inlines lib/ into one script; the workflow builds and checks it on every push and PR, and on main publishes it to the rolling "latest" release. Piped in via curl, it reattaches the terminal so the menu keeps working.
This commit is contained in:
1 parent
3d7f3764d6
commit
d654d44b6a
5 files changed
+131
-3
No files matched your search
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
# Build a single-file version of the wizard for `curl | bash` use:
|
||||
# tools/bundle.sh [output] (default: dist/setup-gamescope-boot.sh)
|
||||
#
|
||||
# Inlines lib/*.sh in the order setup-gamescope-boot.sh sources them and
|
||||
# wraps the entry point's body in main(), so bash has read the whole file
|
||||
# before anything runs. That lets the bundle reattach stdin to the terminal
|
||||
# when it was piped in by curl, so the interactive menu still works.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
out="${1:-dist/setup-gamescope-boot.sh}"
|
||||
entry=setup-gamescope-boot.sh
|
||||
mkdir -p "$(dirname "$out")"
|
||||
|
||||
# Library order, taken from the entry point's source loop.
|
||||
libs=$(grep -oP '^for lib in \K.*(?=; do$)' "$entry")
|
||||
[[ -n "$libs" ]] || { echo "bundle: can't find the lib source loop in $entry" >&2; exit 1; }
|
||||
|
||||
version="$(git describe --always --dirty 2>/dev/null || echo unknown)"
|
||||
|
||||
{
|
||||
# Header comment and `set` line of the entry point, up to the source loop.
|
||||
sed -n '1,/^SCRIPT_DIR=/p' "$entry" | sed '$d'
|
||||
echo "# Single-file build ($version), generated by tools/bundle.sh - edit the"
|
||||
echo "# sources in the repository instead: https://github.com/theupriser/cachyos-gamescope-boot"
|
||||
echo
|
||||
for lib in $libs; do
|
||||
echo "# ----- lib/$lib.sh -----"
|
||||
# Drop each module's shebang and its "Sourced by ..." boilerplate.
|
||||
sed -e '1{/^#!/d}' -e '/^# Sourced by setup-gamescope-boot.sh/d' "lib/$lib.sh"
|
||||
echo
|
||||
done
|
||||
echo "# ----- setup-gamescope-boot.sh -----"
|
||||
echo "main() {"
|
||||
# Everything after the source loop is the entry point's body.
|
||||
sed -n '/^for lib in /,$p' "$entry" | sed '1,/^done$/d' | sed 's/^/ /; s/^ $//'
|
||||
echo "}"
|
||||
echo
|
||||
echo "# Piped in via curl, bash reads this very file from stdin. Give the menu"
|
||||
echo "# the terminal instead - on the same line as main and exit: bash has read"
|
||||
echo "# this line in full, so it never reads further script from the terminal."
|
||||
echo 'reattach_tty() { if [[ ! -t 0 && -z "${WIZARD_KEEP_STDIN:-}" ]]; then { exec </dev/tty; } 2>/dev/null || true; fi; }'
|
||||
echo 'reattach_tty; main "$@"; exit $?'
|
||||
} > "$out"
|
||||
|
||||
chmod +x "$out"
|
||||
bash -n "$out"
|
||||
echo "Wrote $out ($version)"
|
||||
Reference in new issue
Block a user