104 lines
2.7 KiB
Bash
104 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
|
ROOT_DIR=$(cd -- "${SCRIPT_DIR}/.." && pwd)
|
|
CONFIG_FILE="${ROOT_DIR}/config/mesa-opt.conf"
|
|
DIST_DIR="${ROOT_DIR}/dist"
|
|
APT_DIR="${DIST_DIR}/aptrepo"
|
|
DIST_ENV="${DIST_DIR}/package-info.env"
|
|
|
|
if [[ -f "${CONFIG_FILE}" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "${CONFIG_FILE}"
|
|
fi
|
|
|
|
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
|
|
|
|
if [[ -n "${APT_PUBLIC_BASE_URL:-}" ]]; then
|
|
printf 'deb [trusted=yes] %s %s %s\n' \
|
|
"${APT_PUBLIC_BASE_URL%/}" \
|
|
"${APT_SUITE}" \
|
|
"${APT_COMPONENT}" \
|
|
> "${APT_DIR}/${PACKAGE_NAME}-${APT_SUITE}.list"
|
|
fi
|