flatpak-site: publish a release from before the app id change as it is (#668)
The Pages deploy failed while the latest published release (0.7.0) still carries ai.storyteller.solvecraft: the bundle check only accepted the new id and exited without a message. Accept either id (both architectures must agree), mark the old refs end-of-life only once the new app is in the repository, show the published id in the install instructions, and name the failing command on any error. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f5ae72057d
commit
d2086835c1
1 file changed
+27
-4
@@ -2,12 +2,15 @@
|
|||||||
# All Pages deployments include the book, web app, and published Flatpak repository.
|
# All Pages deployments include the book, web app, and published Flatpak repository.
|
||||||
# Shared by docs updates and release publication; no other workflow replaces the site.
|
# Shared by docs updates and release publication; no other workflow replaces the site.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
trap 'echo "flatpak-site.sh: line $LINENO: \"$BASH_COMMAND\" failed (exit $?)" >&2' ERR
|
||||||
|
|
||||||
site="${1:?site directory required}"
|
site="${1:?site directory required}"
|
||||||
tag="${RELEASE_TAG:-}"
|
tag="${RELEASE_TAG:-}"
|
||||||
app_id=ai.storyteller.solidcraft
|
app_id=ai.storyteller.solidcraft
|
||||||
# Compatibility shim (docs/compatibility.md): releases before 0.8 used this app id. Its refs stay
|
# Compatibility shim (docs/compatibility.md): releases before 0.8 used this app id. Its refs stay
|
||||||
# in the repository, marked end-of-life with a rebase to $app_id.
|
# in the repository, marked end-of-life with a rebase to $app_id once a release under $app_id
|
||||||
|
# has been imported. Until then (the latest release is still from before the rename), the
|
||||||
|
# release's bundles carry $legacy_id and are published as they are.
|
||||||
legacy_id=ai.storyteller.solvecraft
|
legacy_id=ai.storyteller.solvecraft
|
||||||
if [ -z "$tag" ]; then
|
if [ -z "$tag" ]; then
|
||||||
tag="$(gh api "repos/$GITHUB_REPOSITORY/releases?per_page=100" \
|
tag="$(gh api "repos/$GITHUB_REPOSITORY/releases?per_page=100" \
|
||||||
@@ -49,7 +52,22 @@ for arch in x86_64 aarch64; do
|
|||||||
validation_repo="$(mktemp -d)"
|
validation_repo="$(mktemp -d)"
|
||||||
ostree --repo="$validation_repo" init --mode=archive-z2
|
ostree --repo="$validation_repo" init --mode=archive-z2
|
||||||
flatpak build-import-bundle "$validation_repo" "$bundles/$asset"
|
flatpak build-import-bundle "$validation_repo" "$bundles/$asset"
|
||||||
ostree --repo="$validation_repo" refs | grep -Fxq "app/$app_id/$arch/stable"
|
refs="$(ostree --repo="$validation_repo" refs)"
|
||||||
|
if printf '%s\n' "$refs" | grep -Fxq "app/$app_id/$arch/stable"; then
|
||||||
|
bundle_id=$app_id
|
||||||
|
elif printf '%s\n' "$refs" | grep -Fxq "app/$legacy_id/$arch/stable"; then
|
||||||
|
bundle_id=$legacy_id
|
||||||
|
else
|
||||||
|
echo "error: $asset holds neither app/$app_id/$arch/stable nor app/$legacy_id/$arch/stable; refs:" >&2
|
||||||
|
printf '%s\n' "$refs" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -n "${published_id:-}" ] && [ "$published_id" != "$bundle_id" ]; then
|
||||||
|
echo "error: $asset is $bundle_id, but the other architecture's bundle is $published_id" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
published_id=$bundle_id
|
||||||
|
echo "$asset: app/$bundle_id/$arch/stable"
|
||||||
flatpak build-import-bundle "$repo_dir" "$bundles/$asset"
|
flatpak build-import-bundle "$repo_dir" "$bundles/$asset"
|
||||||
done
|
done
|
||||||
# `flatpak update` then offers existing installs of the old id the move to the new one, and
|
# `flatpak update` then offers existing installs of the old id the move to the new one, and
|
||||||
@@ -58,6 +76,11 @@ done
|
|||||||
for arch in x86_64 aarch64; do
|
for arch in x86_64 aarch64; do
|
||||||
legacy_ref="app/$legacy_id/$arch/stable"
|
legacy_ref="app/$legacy_id/$arch/stable"
|
||||||
ostree --repo="$repo_dir" rev-parse "$legacy_ref" >/dev/null 2>&1 || continue
|
ostree --repo="$repo_dir" rev-parse "$legacy_ref" >/dev/null 2>&1 || continue
|
||||||
|
# Only rebase to an app the repository has: a release from before the rename has no new ref.
|
||||||
|
if ! ostree --repo="$repo_dir" rev-parse "app/$app_id/$arch/stable" >/dev/null 2>&1; then
|
||||||
|
echo "$legacy_ref: no app/$app_id/$arch/stable yet, not marked end-of-life"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
if ! ostree --repo="$repo_dir" show --print-metadata-key=ostree.endoflife-rebase "$legacy_ref" >/dev/null 2>&1; then
|
if ! ostree --repo="$repo_dir" show --print-metadata-key=ostree.endoflife-rebase "$legacy_ref" >/dev/null 2>&1; then
|
||||||
flatpak build-commit-from --no-update-summary --end-of-life-rebase="$legacy_id=$app_id" \
|
flatpak build-commit-from --no-update-summary --end-of-life-rebase="$legacy_id=$app_id" \
|
||||||
--src-ref="$legacy_ref" "$repo_dir" "$legacy_ref"
|
--src-ref="$legacy_ref" "$repo_dir" "$legacy_ref"
|
||||||
@@ -79,8 +102,8 @@ META
|
|||||||
cat >"$site/flatpak/index.html" <<HTML
|
cat >"$site/flatpak/index.html" <<HTML
|
||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>SolidCraft Flatpak repository</title></head><body><main><h1>SolidCraft Flatpak repository</h1><p>Latest published release: <strong>$tag</strong></p><p><a href="solidcraft.flatpakrepo">Add the SolidCraft repository</a></p><p>Flathub provides the required Freedesktop runtime. Add both remotes to the same user installation:</p><pre>flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>SolidCraft Flatpak repository</title></head><body><main><h1>SolidCraft Flatpak repository</h1><p>Latest published release: <strong>$tag</strong></p><p><a href="solidcraft.flatpakrepo">Add the SolidCraft repository</a></p><p>Flathub provides the required Freedesktop runtime. Add both remotes to the same user installation:</p><pre>flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||||
flatpak remote-add --user --if-not-exists solidcraft $base_url/flatpak/solidcraft.flatpakrepo
|
flatpak remote-add --user --if-not-exists solidcraft $base_url/flatpak/solidcraft.flatpakrepo
|
||||||
flatpak install --user solidcraft $app_id
|
flatpak install --user solidcraft $published_id
|
||||||
flatpak run $app_id</pre></main></body></html>
|
flatpak run $published_id</pre></main></body></html>
|
||||||
HTML
|
HTML
|
||||||
# Compatibility shim (docs/compatibility.md): links and instructions from before the rename point
|
# Compatibility shim (docs/compatibility.md): links and instructions from before the rename point
|
||||||
# at solvecraft.flatpakrepo. Existing remotes keep working either way: they store the repo URL.
|
# at solvecraft.flatpakrepo. Existing remotes keep working either way: they store the repo URL.
|
||||||
|
|||||||
Reference in new issue
Block a user