Files
wanderbooks/deploy/packaging/repo-indexes.sh
T
swaitsandClaude Fable 5.1 3058b5c229 feat(packaging): the trial's Linux column and the Linux packages (P11a steps 1 and 3)
The Linux half of the packaging trial, run on this machine and in Debian,
Fedora and Arch containers, and the recipes it produced (docs/packaging.md
holds the table and what it found):

- mise.toml pins cargo-packager 0.11.8 and cargo-generate-rpm 0.21.1, now
  that `just package-linux` calls them. cargo-packager-updater is a
  library, not a tool, so it is not pinned (update.rs does the checking
  with minisign-verify, which is what the updater uses).
- deploy/packaging/: packager.toml (.deb, AppImage, the pacman tarball and
  its PKGBUILD), the rpm table in crates/ledger-cli/Cargo.toml, the AUR's
  own PKGBUILD (repacks the release tarball), build-linux.sh,
  repo-indexes.sh (the apt and dnf indexes, unsigned until the signing
  step), local-release.sh (a throwaway-keyed feed to try `update`),
  test-linux-packages.sh (linux_packages_install_and_upgrade: install
  0.1.0, open books as an ordinary user, upgrade to 0.1.1, check the host
  restarted onto the new file, the books' last journal line unchanged and
  `update` refuses; passes on Debian trixie, Fedora and Arch). A package
  marks itself package-managed with share/wanderbooks/install-method.
- The icon is a placeholder square (the AppImage cannot be built without
  one).
- .github/workflows/release.yml: on a version tag, build on ubuntu-24.04
  (the oldest glibc the packages claim: a program linked on this machine
  needs GLIBC_2.43 and does not start on Debian 13), attach the packages to
  the release, and add them to the apt and dnf repositories on gh-pages.
  No signing and no macOS or Windows job yet.
- The release profile strips symbols.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HS8WZziDnyxunC23MUxrLp
2026-10-29 15:12:18 -06:00

38 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# The apt and dnf repository indexes (P11a step 3), served from GitHub
# Pages (D-26). Unsigned until step 5 gives them the release key.
#
# repo-indexes.sh apt DIR DIR/pool/*.deb -> DIR/dists/stable/...
# repo-indexes.sh dnf DIR DIR/*.rpm -> DIR/repodata/
#
# Every release stays in the pool: a downgrade is the package manager's
# (plan 3.9). apt needs apt-utils (`apt-ftparchive`), dnf needs
# createrepo_c.
set -euo pipefail
kind=${1:?usage: repo-indexes.sh apt|dnf DIR}
dir=${2:?usage: repo-indexes.sh apt|dnf DIR}
case "$kind" in
apt)
cd "$dir"
arch=binary-amd64
mkdir -p "dists/stable/main/$arch"
apt-ftparchive packages pool >"dists/stable/main/$arch/Packages"
gzip -9 -kf "dists/stable/main/$arch/Packages"
apt-ftparchive \
-o APT::FTPArchive::Release::Origin=wanderbooks \
-o APT::FTPArchive::Release::Suite=stable \
-o APT::FTPArchive::Release::Codename=stable \
-o APT::FTPArchive::Release::Architectures=amd64 \
-o APT::FTPArchive::Release::Components=main \
release dists/stable >dists/stable/Release.tmp
mv dists/stable/Release.tmp dists/stable/Release
;;
dnf)
createrepo_c --update "$dir"
;;
*)
echo "usage: repo-indexes.sh apt|dnf DIR" >&2
exit 2
;;
esac