Files
mesa-repo/scripts/generate-apt-repo.sh
T
magges 398e91bb2d
build-mesa-git / build-deb (push) Successful in 5m12s
Initial release
2026-06-21 13:39:54 +02:00

90 lines
2.3 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
ROOT_DIR=$(cd -- "${SCRIPT_DIR}/.." && pwd)
DIST_DIR="${ROOT_DIR}/dist"
APT_DIR="${DIST_DIR}/aptrepo"
DIST_ENV="${DIST_DIR}/package-info.env"
if [[ ! -f "${DIST_ENV}" ]]; then
echo "missing dist metadata: ${DIST_ENV}" >&2
exit 1
fi
# shellcheck disable=SC1090
source "${DIST_ENV}"
require_cmd() {
local cmd
for cmd in "$@"; do
command -v "${cmd}" >/dev/null 2>&1 || {
echo "missing command: ${cmd}" >&2
exit 1
}
done
}
require_cmd dpkg-scanpackages gzip md5sum sha256sum sha512sum stat date
PACKAGE_ARCH="$(dpkg-deb -f "${DIST_DIR}/${PACKAGE_FILE}" Architecture)"
APT_SUITE="${APT_SUITE:-stable}"
APT_COMPONENT="${APT_COMPONENT:-main}"
APT_ARCH="${APT_ARCH:-${PACKAGE_ARCH}}"
APT_ORIGIN="${APT_ORIGIN:-mesa-git}"
APT_LABEL="${APT_LABEL:-mesa-git}"
APT_DESCRIPTION="${APT_DESCRIPTION:-Mesa git apt repository}"
POOL_DIR="${APT_DIR}/pool/${APT_COMPONENT}/m/${PACKAGE_NAME}"
BINARY_DIR="${APT_DIR}/dists/${APT_SUITE}/${APT_COMPONENT}/binary-${APT_ARCH}"
PACKAGE_PATH="${POOL_DIR}/${PACKAGE_FILE}"
rm -rf "${APT_DIR}"
mkdir -p "${POOL_DIR}" "${BINARY_DIR}"
cp "${DIST_DIR}/${PACKAGE_FILE}" "${PACKAGE_PATH}"
(
cd "${APT_DIR}"
dpkg-scanpackages --arch "${APT_ARCH}" "pool" > "${BINARY_DIR#${APT_DIR}/}/Packages"
)
gzip -kf "${BINARY_DIR}/Packages"
cat > "${APT_DIR}/dists/${APT_SUITE}/Release" <<EOF
Origin: ${APT_ORIGIN}
Label: ${APT_LABEL}
Suite: ${APT_SUITE}
Codename: ${APT_SUITE}
Architectures: ${APT_ARCH}
Components: ${APT_COMPONENT}
Description: ${APT_DESCRIPTION}
Date: $(date -Ru)
EOF
append_checksum_block() {
local label="${1}"
local checksum_cmd="${2}"
local release_file="${APT_DIR}/dists/${APT_SUITE}/Release"
local rel_dir="${APT_DIR}/dists/${APT_SUITE}"
local file
local sum
local size
local rel_path
printf '%s:\n' "${label}" >> "${release_file}"
while IFS= read -r -d '' file; do
rel_path="${file#${rel_dir}/}"
sum="$(${checksum_cmd} "${file}" | awk '{print $1}')"
size="$(stat -c '%s' "${file}")"
printf ' %s %16s %s\n' "${sum}" "${size}" "${rel_path}" >> "${release_file}"
done < <(find "${rel_dir}" -type f ! -name Release -print0 | sort -z)
}
append_checksum_block "MD5Sum" md5sum
append_checksum_block "SHA256" sha256sum
append_checksum_block "SHA512" sha512sum