#!/bin/bash
set -euo pipefail
VERSION=$1
[[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]
ROOT=/var/lib/monerod-builder/debian13
STATE=/var/lib/monerod-builder/debian-version
REL=3
[[ ! -f $STATE || $(cat "$STATE") != "$VERSION-$REL" ]] || exit 0
SRC=/var/lib/monerod-builder/source
install -d "$ROOT/build"
# Fresh checkout for each release; leave build artifacts for diagnosis/retries.
if [[ ! -f $ROOT/build/release || $(cat "$ROOT/build/release") != "$VERSION" ]]; then
 rm -rf "$ROOT/build/source"; cp -a "$SRC" "$ROOT/build/source";printf '%s\n' "$VERSION" > "$ROOT/build/release"
 chroot "$ROOT" chown -R builder:builder /build
fi
chroot "$ROOT" runuser -u builder -- cmake -S /build/source -B /build/source/build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF -DBUILD_GUI_DEPS=OFF -DARCH=default
chroot "$ROOT" runuser -u builder -- cmake --build /build/source/build --target daemon --parallel 2
chroot "$ROOT" runuser -u builder -- python3 /usr/local/bin/monerod-smoke /build/source/build/bin/monerod
PKG=$ROOT/build/package
rm -rf "$PKG"
install -d "$PKG/DEBIAN" "$PKG/usr/bin" "$PKG/usr/lib/systemd/system" "$PKG/etc/monerod-love" "$PKG/usr/share/doc/monerod-love"
install -m755 "$ROOT/build/source/build/bin/monerod" "$PKG/usr/bin/monerod-love"
chroot "$ROOT" strip /build/package/usr/bin/monerod-love
install -m644 "$ROOT/build/source/LICENSE" "$PKG/usr/share/doc/monerod-love/copyright"
# Let dpkg compute dependencies against Debian 13 libraries, not the Ubuntu host.
install -d "$ROOT/build/debian"
printf 'Source: monerod-love\nSection: net\nPriority: optional\nMaintainer: Monero Love <packages@monero.love>\nStandards-Version: 4.7.0\n\nPackage: monerod-love\nArchitecture: amd64\nDescription: Monero daemon\n' > "$ROOT/build/debian/control"
DEPS=$(chroot "$ROOT" /bin/sh -c 'cd /build; dpkg-shlibdeps -O package/usr/bin/monerod-love' | sed -n 's/^shlibs:Depends=//p')
cat > "$PKG/DEBIAN/control" <<CONTROL
Package: monerod-love
Version: $VERSION-$REL
Architecture: amd64
Maintainer: Monero Love <packages@monero.love>
Section: net
Priority: optional
Depends: $DEPS, adduser
Homepage: https://git.hyve.sh/baz/monero
Description: Official Monero daemon built from the mirrored stable release
 Native Debian 13 build. Separate configuration and blockchain directory.
 The service is disabled until explicitly enabled by the administrator.
CONTROL
cat > "$PKG/etc/monerod-love/monerod.conf" <<'CONFIG'
data-dir=/var/lib/monerod-love
log-file=/var/log/monerod-love/monerod.log
rpc-bind-ip=127.0.0.1
rpc-bind-port=18081
p2p-bind-port=18080
no-igd=1
no-zmq=1
CONFIG
printf '/etc/monerod-love/monerod.conf\n' > "$PKG/DEBIAN/conffiles"
cat > "$PKG/usr/lib/systemd/system/monerod-love.service" <<'SERVICE'
[Unit]
Description=Monero daemon (monero.love packages)
After=network-online.target
Wants=network-online.target
[Service]
User=monerod-love
Group=monerod-love
ExecStart=/usr/bin/monerod-love --non-interactive --config-file=/etc/monerod-love/monerod.conf
StateDirectory=monerod-love
LogsDirectory=monerod-love
Restart=on-failure
RestartSec=10
TimeoutStopSec=180
KillSignal=SIGINT
LimitNOFILE=65536
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/monerod-love /var/log/monerod-love
[Install]
WantedBy=multi-user.target
SERVICE
cat > "$PKG/DEBIAN/postinst" <<'SCRIPT'
#!/bin/sh
set -e
sed -i '/^[[:space:]]*non-interactive[[:space:]]*=/d' /etc/monerod-love/monerod.conf
getent passwd monerod-love >/dev/null || adduser --system --group --home /var/lib/monerod-love --no-create-home monerod-love
install -d -o monerod-love -g monerod-love -m750 /var/lib/monerod-love /var/log/monerod-love
if command -v systemctl >/dev/null; then
 systemctl daemon-reload || true
 if systemctl is-active --quiet monerod-love; then systemctl try-restart monerod-love; fi
fi
SCRIPT
cat > "$PKG/DEBIAN/prerm" <<'SCRIPT'
#!/bin/sh
set -e
if [ "$1" = remove ] && command -v systemctl >/dev/null; then systemctl stop monerod-love || true; fi
SCRIPT
cat > "$PKG/DEBIAN/postrm" <<'SCRIPT'
#!/bin/sh
if command -v systemctl >/dev/null; then systemctl daemon-reload || true; fi
# Blockchain data is deliberately retained, including on purge.
SCRIPT
chmod 755 "$PKG/DEBIAN/"{postinst,prerm,postrm}
chroot "$ROOT" dpkg-deb --build --root-owner-group /build/package /build/monerod-love.deb
exec 9>/run/lock/xmrig-repo-update.lock
flock -w 21600 9
DEST=/srv/apt/pool/main/m/monerod
install -d "$DEST"
install -m644 "$ROOT/build/monerod-love.deb" "$DEST/monerod-love_${VERSION}-${REL}_amd64.deb"
tar -czf "$DEST/source-${VERSION}.tar.gz" --exclude=.git --exclude=build -C "$SRC" .
cp /usr/local/sbin/monerod-build-debian "$DEST/build-debian.sh"
{ git -C "$SRC" rev-parse HEAD; sha256sum "$PKG/usr/bin/monerod-love"; cat "$PKG/DEBIAN/control"; } > "$DEST/build-${VERSION}-${REL}.txt"
/usr/local/sbin/publish-xmrig-repo.sh
printf '%s\n' "$VERSION-$REL" > "$STATE"
echo "Published monerod Debian $VERSION-$REL"
