Files
operation-bin/launcher-editor
T
lemke_h 484365da7d launcher-editor: on gac-* accounts, run as the person at the console via become
A shared account shouldn't publish launcher changes under its own name.
It now asks for the user name (zenity, like undulator-pointing), checks
it, and runs launcher-editor as that user with become in a terminal (the
password prompt needs one; the terminal stays open if login fails).
--live and --help still run as the shared account. Without
~/network_drives (where the gitea SSH key is) and with a terminal at hand,
it runs setup-network-drives before cloning/pulling.
2026-10-16 10:45:53 +02:00

91 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
# Launcher config editor (github.com/swissfel/launcher_editor), run from its
# checkout in /sf/bernina/applications in the Bernina Python env.
#
# launcher-editor asks whether to edit the Bernina launcher
# launcher-editor --live view the deployed Bernina launcher (read-only)
# launcher-editor ARGS... plain editor, ARGS passed on (see --help)
#
# Editing the Bernina launcher works on your own clone in ~/launcher_config.
# Preview (F5) shows it in the real launcher; Publish commits and pushes it,
# and the push deploys it to /sf/bernina/config/launcher.
#
# On a shared account (gac-*) it first asks for your own user name and runs
# the editor as you via `become` (password in a terminal), so changes are
# published under your name. --live and --help work as the shared account.
# Update the app: git -C /sf/bernina/applications/launcher_editor pull
APP=/sf/bernina/applications/launcher_editor
LIVE=/sf/bernina/config/launcher
REPO=git@gitea.psi.ch:autodeploy_config/sf_bernina_launcher.git
WORK="$HOME/launcher_config"
ROOT=S_Bernina.json
# same as the consoles' launcher (/usr/bin/epics_launcher_wrapper)
PREVIEW="epics_launcher --position 80 -120"
NOTE="Publishing pushes to gitea, which deploys to $LIVE within about a minute. A launcher that is already open shows the change after it is restarted."
if [[ $USER == gac-* && $1 != --live && $1 != -h && $1 != --help ]]; then
me=$(zenity --entry --width=460 --title="Launcher editor" --text="You are logged in as $USER, a shared account.
Launcher changes are published under your own name, so the editor runs as you on this console. You will be asked for your password in a terminal.
Your PSI user name:" 2>/dev/null) || exit 0
me=${me//[[:space:]]/}
if [ -z "$me" ] || [[ $me == gac-* ]] || ! id -- "$me" >/dev/null 2>&1; then
zenity --error --no-markup --width=420 --title="Launcher editor" \
--text="Not a valid personal user name: ${me:-(empty)}" 2>/dev/null
exit 1
fi
inner="/sf/bernina/bin/launcher-editor${*:+ $(printf '%q ' "$@")}"
if [ -t 0 ] && [ -t 1 ]; then
exec become "$me" -c "$inner"
fi
exec gnome-terminal --title="Launcher editor as $me" --wait -- bash -c '
echo "Launcher editor: log in as $1 (your password)"
become "$1" -c "$2" || { echo; read -rp "Login or editor failed. Press Enter to close." _; }' \
_ "$me" "$inner"
fi
source /sf/bernina/bin/bpy-env.sh >/dev/null
editor() {
PYTHONPATH="$APP${PYTHONPATH:+:$PYTHONPATH}" exec python -B -m launcher_editor "$@"
}
[ "$1" = "--live" ] && editor --read-only "$LIVE/$ROOT"
[ $# -gt 0 ] && editor "$@"
zenity --question --width=440 --title="Launcher editor" \
--ok-label="Edit Bernina launcher" --cancel-label="Plain editor" \
--text="Edit the Bernina launcher?
Your own copy in ~/launcher_config is updated from gitea and opened. Preview (F5) shows your changes in the real launcher; Publish makes them live on all consoles." \
2>/dev/null || editor
# The gitea SSH key lives on ~/network_drives. In a session without it
# (e.g. after `become`) mount it now, while we have a terminal for kinit.
if [ ! -d "$HOME/network_drives/home" ] && [ -t 0 ]; then
echo "Mounting ~/network_drives (needed for your gitea SSH key)..."
setup-network-drives || true
fi
export GIT_TERMINAL_PROMPT=0 GIT_SSH_COMMAND="ssh -o BatchMode=yes"
if [ ! -d "$WORK/.git" ]; then
if ! out=$(git clone -q "$REPO" "$WORK" 2>&1); then
zenity --error --no-markup --width=520 --title="Launcher editor" --text="Could not clone $REPO into $WORK:
$out
The SSH key for gitea is on ~/network_drives. If that isn't mounted, run setup-network-drives and try again." 2>/dev/null
exit 1
fi
elif ! out=$(git -C "$WORK" pull -q --ff-only 2>&1); then
zenity --warning --no-markup --width=520 --title="Launcher editor" --text="Could not update ~/launcher_config from gitea (unpublished commits, local changes in the way, or no connection):
$out
Opening your copy as it is. Git > Update from Remote retries later." 2>/dev/null
fi
editor --preview-command "$PREVIEW" --publish-note "$NOTE" "$WORK/$ROOT"