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
38 lines
1.3 KiB
Bash
Executable File
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
|