@@ -0,0 +1,89 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user