Add multi-package Alpine packaging
This commit is contained in:
131
scripts/apk/package-lib.sh
Normal file
131
scripts/apk/package-lib.sh
Normal file
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
apk_repo_root() {
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd
|
||||
}
|
||||
|
||||
apk_package_root() {
|
||||
local repo_root="$1"
|
||||
printf '%s\n' "${ALPINE_PACKAGE_ROOT:-${repo_root}/packaging/alpine/local}"
|
||||
}
|
||||
|
||||
apk_package_dirs() {
|
||||
local repo_root="$1"
|
||||
local package_root
|
||||
local package
|
||||
local dir
|
||||
|
||||
package_root="$(apk_package_root "${repo_root}")"
|
||||
|
||||
if [[ -n "${APKBUILD_DIR:-}" ]]; then
|
||||
printf '%s\n' "${APKBUILD_DIR}"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ -n "${ALPINE_PACKAGE:-}" || -n "${ALPINE_PACKAGES:-}" ]]; then
|
||||
for package in ${ALPINE_PACKAGE:-${ALPINE_PACKAGES:-}}; do
|
||||
case "${package}" in
|
||||
/*|.*/*|*/*)
|
||||
dir="${package}"
|
||||
;;
|
||||
*)
|
||||
dir="${package_root}/${package}"
|
||||
;;
|
||||
esac
|
||||
printf '%s\n' "${dir}"
|
||||
done
|
||||
return
|
||||
fi
|
||||
|
||||
find "${package_root}" -mindepth 2 -maxdepth 2 -name APKBUILD -print \
|
||||
| sed 's#/APKBUILD$##' \
|
||||
| sort
|
||||
}
|
||||
|
||||
apk_validate_package_dir() {
|
||||
local package_dir="$1"
|
||||
|
||||
if [[ ! -f "${package_dir}/APKBUILD" ]]; then
|
||||
printf 'missing APKBUILD: %s\n' "${package_dir}/APKBUILD" >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
apk_package_name() {
|
||||
basename "$1"
|
||||
}
|
||||
|
||||
apk_package_arches() {
|
||||
local package_dir="$1"
|
||||
|
||||
awk -F= '
|
||||
$1 == "arch" {
|
||||
gsub(/["'\'']/, "", $2)
|
||||
gsub(/^[ \t]+|[ \t]+$/, "", $2)
|
||||
print $2
|
||||
exit
|
||||
}
|
||||
' "${package_dir}/APKBUILD"
|
||||
}
|
||||
|
||||
apk_package_supports_arch() {
|
||||
local package_dir="$1"
|
||||
local arch="$2"
|
||||
local supported_arches
|
||||
local supported_arch
|
||||
|
||||
supported_arches="$(apk_package_arches "${package_dir}")"
|
||||
|
||||
for supported_arch in ${supported_arches}; do
|
||||
case "${supported_arch}" in
|
||||
all|noarch|"${arch}")
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
apk_container_package_dir() {
|
||||
local repo_root="$1"
|
||||
local package_dir="$2"
|
||||
|
||||
case "${package_dir}" in
|
||||
"${repo_root}"/*)
|
||||
printf '/work/%s\n' "${package_dir#"${repo_root}/"}"
|
||||
;;
|
||||
*)
|
||||
printf 'package directory must be inside repository: %s\n' "${package_dir}" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
apk_run_package_hook() {
|
||||
local repo_root="$1"
|
||||
local package_dir="$2"
|
||||
local hook_name="$3"
|
||||
shift 3
|
||||
|
||||
local package_name
|
||||
local hook_path
|
||||
|
||||
package_name="$(apk_package_name "${package_dir}")"
|
||||
hook_path="${package_dir}/scripts/${hook_name}.sh"
|
||||
|
||||
if [[ ! -e "${hook_path}" ]]; then
|
||||
printf 'Skipping %s: no %s hook\n' "${package_name}" "${hook_name}"
|
||||
return
|
||||
fi
|
||||
if [[ ! -x "${hook_path}" ]]; then
|
||||
printf 'package hook is not executable: %s\n' "${hook_path}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
printf 'Running %s hook for %s\n' "${hook_name}" "${package_name}"
|
||||
REPO_ROOT="${repo_root}" \
|
||||
PACKAGE_DIR="${package_dir}" \
|
||||
PACKAGE_NAME="${package_name}" \
|
||||
"${hook_path}" "$@"
|
||||
}
|
||||
Reference in New Issue
Block a user