mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-17 12:49:31 +02:00
* Flatpak single-file bundle as a release artifact (#140) packaging/linux/flatpak/ai.storyteller.photocraft.bundle.yml repackages the release's Linux tarball (no Rust build, no network) on the freedesktop 26.08 runtime; packaging/linux/flatpak-bundle.sh builds it with flatpak-builder and flatpak build-bundle and smoke-tests it. release.yml gains a Flatpak job per arch that feeds the draft release and SHA256SUMS. The Flathub manifest moves to 26.08 with the same documented finish-args (portals + Pictures/Documents), and packaging-lint checks the two manifests agree. Font scanning also looks in /run/host/fonts and /run/host/user-fonts so host fonts show up in the sandbox. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: installing the Flatpak bundle (#140) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Flatpak job: install the SVG pixbuf loader for appstream compose Without librsvg2-common (absent on the x86_64 runner image) the host's appstreamcli compose fails with file-read-error on the scalable icon. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * release.yml: the Flatpak job runs without the release environment It only repackages the Linux job's tarball and signs nothing, so it doesn't need (and shouldn't hold) the signing secrets while running third-party tooling. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
3.0 KiB
Bash
Executable File
73 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Repackage a PhotoCraft Linux tarball as a single-file Flatpak bundle:
|
|
#
|
|
# $DIST/photocraft-<version>-linux-<arch>.flatpak
|
|
#
|
|
# Usage: packaging/linux/flatpak-bundle.sh [--no-test] [TARBALL]
|
|
#
|
|
# TARBALL defaults to $DIST/photocraft-<version>-linux-<arch>.tar.gz from package.sh. The bundle
|
|
# is built for the host architecture (x86_64 or aarch64), which must match the tarball's.
|
|
# Needs flatpak, flatpak-builder and the SVG pixbuf loader (librsvg2-common) for the host's
|
|
# `appstreamcli compose`; the freedesktop runtime and SDK named in the manifest are
|
|
# installed per-user from Flathub. Unless --no-test, the bundle is then installed per-user and
|
|
# `photocraft-cli --version` is run inside the sandbox as a smoke test.
|
|
# Manifest: packaging/linux/flatpak/ai.storyteller.photocraft.bundle.yml.
|
|
set -euo pipefail
|
|
# shellcheck source=../env.sh
|
|
. "$(dirname "${BASH_SOURCE[0]}")/../env.sh"
|
|
HERE="$ROOT/packaging/linux"
|
|
APP_ID=ai.storyteller.photocraft
|
|
FLATHUB=https://dl.flathub.org/repo/flathub.flatpakrepo
|
|
|
|
TEST=1
|
|
TARBALL=""
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--no-test) TEST=0; shift ;;
|
|
-h | --help) sed -n '2,14p' "$0"; exit 0 ;;
|
|
-*) echo "unknown argument: $1" >&2; exit 2 ;;
|
|
*) TARBALL="$1"; shift ;;
|
|
esac
|
|
done
|
|
|
|
ARCH="$(uname -m)"
|
|
case "$ARCH" in
|
|
x86_64) ;;
|
|
aarch64 | arm64) ARCH=aarch64 ;;
|
|
*) echo "unsupported architecture $ARCH" >&2; exit 2 ;;
|
|
esac
|
|
BASENAME="photocraft-$VERSION-linux-$ARCH"
|
|
TARBALL="${TARBALL:-$DIST/$BASENAME.tar.gz}"
|
|
[ -f "$TARBALL" ] || { echo "error: $TARBALL not found (run packaging/linux/package.sh --formats tar first)" >&2; exit 1; }
|
|
for tool in flatpak flatpak-builder; do
|
|
command -v "$tool" >/dev/null || { echo "error: $tool not found (apt install flatpak flatpak-builder librsvg2-common)" >&2; exit 1; }
|
|
done
|
|
|
|
echo "==> PhotoCraft $VERSION Flatpak bundle for $ARCH from $(basename "$TARBALL")"
|
|
|
|
WORK="$CARGO_TARGET_DIR/flatpak-bundle"
|
|
rm -rf "$WORK"
|
|
mkdir -p "$WORK/stage"
|
|
tar -xzf "$TARBALL" -C "$WORK/stage" --strip-components=1
|
|
[ -x "$WORK/stage/bin/photocraft" ] || { echo "error: $TARBALL has no bin/photocraft" >&2; exit 1; }
|
|
cp "$HERE/flatpak/$APP_ID.bundle.yml" "$WORK/$APP_ID.yml"
|
|
|
|
flatpak remote-add --user --if-not-exists flathub "$FLATHUB"
|
|
# --disable-rofiles-fuse: no FUSE in containers and CI runners.
|
|
flatpak-builder --user --install-deps-from=flathub --disable-rofiles-fuse --force-clean \
|
|
--default-branch=stable --repo="$WORK/repo" --state-dir="$WORK/state" "$WORK/build" "$WORK/$APP_ID.yml"
|
|
|
|
OUT="$DIST/$BASENAME.flatpak"
|
|
# --runtime-repo lets `flatpak install` fetch the freedesktop runtime from Flathub if missing.
|
|
flatpak build-bundle --runtime-repo="$FLATHUB" "$WORK/repo" "$OUT" "$APP_ID" stable
|
|
echo "wrote $OUT"
|
|
|
|
if [ "$TEST" = 1 ]; then
|
|
flatpak install --user -y --noninteractive --reinstall "$OUT"
|
|
flatpak info --user "$APP_ID"
|
|
flatpak run --command=photocraft-cli "$APP_ID" --version
|
|
flatpak run --command=sh "$APP_ID" -c 'ls /app/share/applications /app/share/metainfo /app/share/mime/packages /app/share/icons/hicolor/scalable/apps'
|
|
fi
|
|
echo "==> done"
|
|
ls -lh "$OUT"
|