mirror of
https://github.com/Heretek-Games/flatpark.git
synced 2026-10-12 02:05:52 +00:00
publish.sh --verify used the real remote name (VERIFY_REMOTE_NAME defaulted to REMOTE_NAME), so a local verify rewrote the user's real flatpark remote to file://out/repo with the throwaway signing key and left it that way. Verify now targets a separate flatpark-local remote (refusing to run if the names collide), uninstalls the verified apps and deletes the remote when it finishes — including on failure, via an EXIT trap. Apps already installed from another remote are moved aside with --reinstall and restored to their original origin during cleanup. Set FLATPARK_VERIFY_KEEP=1 to keep the install around for manual runtime testing. Co-Authored-By: Claude Fable 5 <[email protected]>
86 lines
3.3 KiB
Bash
Executable File
86 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
. "$ROOT/scripts/lib/common.sh"
|
|
load_config "$ROOT"
|
|
verify=0
|
|
requested_apps=()
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--verify) verify=1 ;;
|
|
*) requested_apps+=("$arg") ;;
|
|
esac
|
|
done
|
|
|
|
apps=()
|
|
while IFS= read -r app_id; do
|
|
apps+=("$app_id")
|
|
done < <("$ROOT/scripts/scan-registry.sh" --ids "${requested_apps[@]}")
|
|
[ "${#apps[@]}" -gt 0 ] || die "registry scan returned no apps"
|
|
|
|
"$ROOT/scripts/gen-signing-key.sh" >/dev/null
|
|
for app_id in "${apps[@]}"; do
|
|
"$ROOT/scripts/build-app.sh" "$app_id"
|
|
done
|
|
"$ROOT/scripts/publish-repo.sh"
|
|
for app_id in "${apps[@]}"; do
|
|
"$ROOT/scripts/gen-discovery.sh" "$app_id"
|
|
done
|
|
"$ROOT/scripts/gen-site.sh" "${apps[@]}"
|
|
log "publish complete -> $OUT_DIR"
|
|
|
|
if [ "$verify" = "1" ]; then
|
|
need flatpak
|
|
remote="$VERIFY_REMOTE_NAME"
|
|
[ "$remote" != "$REMOTE_NAME" ] ||
|
|
die "VERIFY_REMOTE_NAME ($remote) must differ from REMOTE_NAME so --verify never touches the real remote"
|
|
remote_url="file://$REPO_DIR"
|
|
|
|
# If an app under verify is already installed (e.g. from the real remote),
|
|
# remember its origin: --reinstall moves it to the verify remote, and
|
|
# cleanup puts it back where it came from.
|
|
declare -A verify_prev_origin=()
|
|
for app_id in "${apps[@]}"; do
|
|
prev="$(flatpak --user info --show-origin "$app_id" 2>/dev/null || true)"
|
|
if [ -n "$prev" ] && [ "$prev" != "$remote" ]; then
|
|
verify_prev_origin["$app_id"]="$prev"
|
|
fi
|
|
done
|
|
|
|
verify_cleanup() {
|
|
local app_id origin
|
|
for app_id in "${apps[@]}"; do
|
|
origin="$(flatpak --user info --show-origin "$app_id" 2>/dev/null || true)"
|
|
[ "$origin" = "$remote" ] || continue
|
|
flatpak --user uninstall -y "$app_id" >/dev/null 2>&1 ||
|
|
warn "verify cleanup: could not uninstall $app_id"
|
|
if [ -n "${verify_prev_origin[$app_id]-}" ]; then
|
|
if flatpak --user install -y "${verify_prev_origin[$app_id]}" "$app_id" >/dev/null 2>&1; then
|
|
log "verify cleanup: restored $app_id from ${verify_prev_origin[$app_id]}"
|
|
else
|
|
warn "verify cleanup: could not restore $app_id — run: flatpak --user install ${verify_prev_origin[$app_id]} $app_id"
|
|
fi
|
|
fi
|
|
done
|
|
flatpak --user remote-delete --force "$remote" >/dev/null 2>&1 ||
|
|
warn "verify cleanup: could not delete remote $remote"
|
|
log "verify: removed temporary remote $remote"
|
|
}
|
|
if [ "${FLATPARK_VERIFY_KEEP:-0}" = "1" ]; then
|
|
log "verify: FLATPARK_VERIFY_KEEP=1 — leaving remote $remote and installed apps in place"
|
|
else
|
|
trap verify_cleanup EXIT
|
|
fi
|
|
|
|
remote_args=(--title="$REPO_TITLE" --comment="$REPO_COMMENT"
|
|
--homepage="$REPO_HOMEPAGE" --gpg-import="$PUBKEY_FILE")
|
|
if flatpak --user remotes | awk '{print $1}' | grep -qxF "$remote"; then
|
|
flatpak --user remote-modify --url="$remote_url" "${remote_args[@]}" "$remote"
|
|
else
|
|
flatpak --user remote-add "${remote_args[@]}" "$remote" "$remote_url"
|
|
fi
|
|
for app_id in "${apps[@]}"; do
|
|
flatpak --user install -y --reinstall "$remote" "$app_id"
|
|
log "verify: installed $app_id from local signed repo OK"
|
|
done
|
|
fi
|