63 lines
3.3 KiB
Bash
63 lines
3.3 KiB
Bash
#!/bin/bash
|
|||
|
|
# Installs dependencies and outputs: disposable Debian 13 containers ONLY.
|
||
|
|
set -euo pipefail
|
||
|
|
export LC_ALL=C
|
||
|
|
root=$(cd -- "$(dirname -- "$0")/.." && pwd)
|
||
|
|
[[ -f /.dockerenv && $EUID == 0 ]] || { echo 'Disposable root Docker container required' >&2; exit 1; }
|
||
|
|
# shellcheck source=/dev/null
|
||
|
|
. /etc/os-release
|
||
|
|
[[ $ID == debian && $VERSION_ID == 13 ]] || exit 1
|
||
|
|
out=$(realpath "${1:?empty artifact directory required}")
|
||
|
|
[[ -d $out && -z $(find "$out" -mindepth 1 -print -quit) ]] || exit 1
|
||
|
|
work=$(mktemp -d)
|
||
|
|
trap 'rm -rf "$work"' EXIT
|
||
|
|
export DEB_BUILD_OPTIONS=${DEB_BUILD_OPTIONS:-parallel=2}
|
||
|
|
export DEBFULLNAME='G15 packaging contributors' DEBEMAIL='noreply@example.invalid'
|
||
|
|
git config --global --add safe.directory "$root"
|
||
|
|
for source in libg15 libg15render g15daemon g15macro; do
|
||
|
|
git config --global --add safe.directory "$root/$source"
|
||
|
|
pin=$(git -C "$root" ls-files --stage -- "$source" | awk '$1 == 160000 {print $2}')
|
||
|
|
[[ -n $pin && $(git -C "$root/$source" rev-parse HEAD) == "$pin" ]]
|
||
|
|
[[ -z $(git -C "$root/$source" status --porcelain --untracked-files=all) ]]
|
||
|
|
done
|
||
|
|
git -C "$root" submodule status --recursive -- libg15 libg15render g15daemon g15macro > "$out/SUBMODULES"
|
||
|
|
if grep -q '^[+U-]' "$out/SUBMODULES"; then echo 'Submodule pin mismatch or missing module' >&2; exit 1; fi
|
||
|
|
for source in libg15 libg15render g15daemon g15macro; do
|
||
|
|
mkdir "$work/$source"
|
||
|
|
cd "$work/$source"
|
||
|
|
sha=$(git -C "$root/$source" rev-parse HEAD)
|
||
|
|
export SOURCE_DATE_EPOCH
|
||
|
|
SOURCE_DATE_EPOCH=$(git -C "$root/$source" show -s --format=%ct HEAD)
|
||
|
|
mkdir tree
|
||
|
|
git -C "$root/$source" archive HEAD | tar -x -C tree
|
||
|
|
[[ ! -d tree/.pc ]] || { echo 'Expected unapplied quilt checkout' >&2; exit 1; }
|
||
|
|
base=$(dpkg-parsechangelog -l tree/debian/changelog -S Version)
|
||
|
|
upstream=${base%-*}
|
||
|
|
[[ $source != g15macro ]] || upstream=1.0.5
|
||
|
|
upstream+=+g15.git${sha:0:12}
|
||
|
|
version=$upstream-1
|
||
|
|
mv tree "$source-$upstream"
|
||
|
|
tree=$PWD/$source-$upstream
|
||
|
|
tar --sort=name --mtime="@$SOURCE_DATE_EPOCH" --owner=0 --group=0 --numeric-owner \
|
||
|
|
--exclude="$source-$upstream/debian" -cJf "${source}_${upstream}.orig.tar.xz" "$source-$upstream"
|
||
|
|
(cd "$tree" && bash "$root/packaging/overlays/v1/apply.sh" "$source" "$root")
|
||
|
|
if [[ $source == g15daemon ]]; then
|
||
|
|
mkdir official
|
||
|
|
(cd official && apt-get source --download-only g15daemon=1.9.5.3-14.1 && dpkg-source --skip-patches -x ./*.dsc source)
|
||
|
|
diff -u official/source/debian/control "$tree/debian/control"
|
||
|
|
diff -u official/source/debian/libg15daemon-client1t64.lintian-overrides "$tree/debian/libg15daemon-client1t64.lintian-overrides"
|
||
|
|
fi
|
||
|
|
cd "$tree"
|
||
|
|
sed -i "s/^Maintainer:.*/Maintainer: $DEBFULLNAME <$DEBEMAIL>/" debian/control
|
||
|
|
dch --newversion "$version" --distribution trixie --force-distribution \
|
||
|
|
"Export $source commit $sha; apply documented outer packaging overlay v1."
|
||
|
|
sed -i "0,/^ -- /s/^ -- .*/ -- $DEBFULLNAME <$DEBEMAIL> $(date -u -R -d "@$SOURCE_DATE_EPOCH")/" debian/changelog
|
||
|
|
cp "$root/packaging/overlays/v1/README.md" debian/README.local-build
|
||
|
|
apt-get build-dep -y .
|
||
|
|
dpkg-buildpackage -us -uc -sa
|
||
|
|
cd ..
|
||
|
|
cp ./*.deb ./*.dsc ./*.tar.* ./*.buildinfo ./*.changes "$out/"
|
||
|
|
apt-get install -y ./*.deb
|
||
|
|
done
|
||
|
|
cd "$out"
|
||
|
|
sha256sum -- *.deb *.dsc *.tar.* *.buildinfo *.changes SUBMODULES > SHA256SUMS
|