#!/bin/bash
# Regenerate APT repository metadata after adding/removing packages.
set -e

REPO_ROOT="/var/www/repo.interdime.co.uk"
CODENAME="stable"
COMPONENTS="main"
ARCH="amd64"
GPG_HOME="${REPO_ROOT}/.gnupg"
GPG_EMAIL="repo@interdime.com"

log() { echo "[Repo Update] $1"; }

log "Scanning packages..."
cd "${REPO_ROOT}"

# Generate Packages file
PACKAGES_DIR="dists/${CODENAME}/${COMPONENTS}/binary-${ARCH}"
dpkg-scanpackages --arch "${ARCH}" "pool/${COMPONENTS}" > "${PACKAGES_DIR}/Packages"
gzip -9c "${PACKAGES_DIR}/Packages" > "${PACKAGES_DIR}/Packages.gz"
xz -9c "${PACKAGES_DIR}/Packages" > "${PACKAGES_DIR}/Packages.xz" 2>/dev/null || true

PKG_COUNT=$(grep -c "^Package:" "${PACKAGES_DIR}/Packages" 2>/dev/null || echo "0")
log "Found ${PKG_COUNT} packages"

# Generate Release file
cat > "dists/${CODENAME}/Release" << RELEASE
Origin: InterDime OS
Label: InterDime OS
Suite: ${CODENAME}
Codename: ${CODENAME}
Architectures: ${ARCH}
Components: ${COMPONENTS}
Description: InterDime OS Pingu Official Repository
Date: $(date -Ru)
RELEASE

# Add checksums
cd "dists/${CODENAME}"
{
    echo "MD5Sum:"
    for f in $(find . -name "Packages*" -o -name "Release" | sort); do
        [ -f "$f" ] || continue
        md5=$(md5sum "$f" | awk '{print $1}')
        size=$(stat -c%s "$f")
        echo " ${md5} ${size} ${f#./}"
    done
    echo "SHA256:"
    for f in $(find . -name "Packages*" | sort); do
        [ -f "$f" ] || continue
        sha=$(sha256sum "$f" | awk '{print $1}')
        size=$(stat -c%s "$f")
        echo " ${sha} ${size} ${f#./}"
    done
} >> Release

# Sign Release
GNUPGHOME="${GPG_HOME}" gpg --batch --yes --armor --detach-sign -o Release.gpg Release
GNUPGHOME="${GPG_HOME}" gpg --batch --yes --clearsign -o InRelease Release

log "Repository metadata updated. ${PKG_COUNT} packages in ${CODENAME}."
