mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-03-31 14:41:55 -07:00
When environment variable GITHUB_API_TOKEN like in ${HOME}/.${DISTRO,,}/options
is assigned the script will fetch all data direct from Github instead
clone every single package.
223 lines
6.8 KiB
Bash
Executable File
223 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
|
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
|
|
|
BUMP_PKG_REV=""
|
|
KEEP_GIT_DIRS="yes"
|
|
|
|
usage() {
|
|
echo "Usage: $0 [options] <kodi-branch> [<unofficial-addon-branch>]"
|
|
echo " -b, --bump-pkg-rev: bump PKG_REV if package was not updated"
|
|
echo " -d, --delete-git-dirs: delete cloned git dirs after update"
|
|
echo " -h, --help: display help and exit"
|
|
exit 1
|
|
}
|
|
|
|
while [ $# -ne 0 ]; do
|
|
case "$1" in
|
|
-b|--bump-pkg-rev)
|
|
BUMP_PKG_REV="yes"
|
|
shift
|
|
;;
|
|
-d|--delete-git-dirs)
|
|
KEEP_GIT_DIRS=""
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 1
|
|
;;
|
|
-*)
|
|
echo "illegal option $1"
|
|
usage
|
|
exit 1
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ $# -eq 0 -o $# -gt 2 ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
# list of packages to exclude from update
|
|
EXCLUDED_PACKAGES="vfs.sacd"
|
|
|
|
MY_DIR="$(dirname "$0")"
|
|
ROOT="$(cd "${MY_DIR}"/../.. && pwd)"
|
|
TMPDIR="$(pwd)/.update-binary-addons-tmp"
|
|
TMP_PKG_FILE="${TMPDIR}/package.tar.gz"
|
|
TMP_PKG_DIR="${TMPDIR}/package"
|
|
|
|
rm -rf "${TMPDIR}"
|
|
mkdir -p "${TMPDIR}"
|
|
|
|
KODI_BRANCH="$1"
|
|
KODI_DIR="kodi.git"
|
|
|
|
if [ $# -eq 1 ]; then
|
|
UNOFFICIAL_ADDON_BRANCH="${KODI_BRANCH}"
|
|
else
|
|
UNOFFICIAL_ADDON_BRANCH="$2"
|
|
fi
|
|
|
|
. "${MY_DIR}/update_common_functions"
|
|
|
|
get_gh_token
|
|
|
|
if [ -z "${GITHUB_API_TOKEN}" ]; then
|
|
git_clone https://github.com/xbmc/xbmc ${KODI_DIR} ${KODI_BRANCH}
|
|
ADDONS_REPO_LOCATION="${KODI_DIR}/cmake/addons/bootstrap/repositories"
|
|
else
|
|
# check if depends are available
|
|
command -v curl >/dev/null 2>&1 || die "please install curl"
|
|
command -v jq >/dev/null 2>&1 || die "please install jq"
|
|
|
|
TMP_REPO_DIR="${TMPDIR}/bootstrap-repos"
|
|
|
|
curl -s -L -H "Authorization: token ${GITHUB_API_TOKEN}" \
|
|
"https://api.github.com/repos/xbmc/xbmc/contents/cmake/addons/bootstrap/repositories?ref=${KODI_BRANCH}" | awk \
|
|
'/download_url/ { gsub("\"|,", "", $2); system("mkdir -p '${TMP_REPO_DIR}'; (cd '${TMP_REPO_DIR}'; curl -O "$2")"); }' \
|
|
2>/dev/null
|
|
ADDONS_REPO_LOCATION=${TMP_REPO_DIR}
|
|
fi
|
|
|
|
if ! ls ${ADDONS_REPO_LOCATION}/*-addons.txt &> /dev/null; then
|
|
echo "No binary addon repo description found, nothing to do!"
|
|
echo "Path searched: ${ADDONS_REPO_LOCATION}"
|
|
exit 0
|
|
fi
|
|
|
|
# addons
|
|
for addontxt in ${ADDONS_REPO_LOCATION}/*-addons.txt ; do
|
|
ADDONS=$(cat $addontxt | awk '{print $1}')
|
|
ADDONS_GIT_DIR="${ADDONS}.git"
|
|
ADDONS_GIT_REPO=$(cat $addontxt | awk '{print $2}')
|
|
ADDONS_GIT_BRANCH=$(cat $addontxt | awk '{print $3}')
|
|
git_clone $ADDONS_GIT_REPO $ADDONS_GIT_DIR ${ADDONS_GIT_BRANCH}
|
|
|
|
for addon in $ADDONS_GIT_DIR/*.*/ ; do
|
|
ADDON=$(basename $addon)
|
|
|
|
[[ ${ADDON} =~ ^game.* ]] && continue # ignore game.* addons - handled by update_retroplayer-addons
|
|
|
|
check_package_excluded "${ADDON}" "${EXCLUDED_PACKAGES}" && continue
|
|
|
|
GIT_DIR="${ADDON}.git"
|
|
GIT_REPO=$(cat ${addon}/${ADDON}.txt | awk '{print $2}')
|
|
GIT_BRANCH=$(cat ${addon}/${ADDON}.txt | awk '{print $3}')
|
|
|
|
if ! grep -q all ${addon}/platforms.txt && ! grep -q linux ${addon}/platforms.txt && ! grep -q ! ${addon}/platforms.txt; then
|
|
continue
|
|
fi
|
|
|
|
ADDON_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${ADDON}/"
|
|
if [ -f "${ADDON_PATH}/package.mk" ] ; then
|
|
# Verify the Kodi repo matches our package repo
|
|
# If different, ignore the addon and process it later as an "unofficial" addon
|
|
validate_pkg_url "${ADDON}" "${GIT_REPO}" || continue
|
|
|
|
NO_TAG=""
|
|
if [ -z "${GITHUB_API_TOKEN}" ]; then
|
|
git_clone ${GIT_REPO} ${GIT_DIR} ${GIT_BRANCH}
|
|
PARAMS="resolve_tag_in_branch ${GIT_DIR} ${GIT_BRANCH}"
|
|
else
|
|
PARAMS="resolve_tag_on_gh ${GIT_REPO} ${GIT_BRANCH}"
|
|
fi
|
|
NEW_VERSION=$(${PARAMS})
|
|
|
|
if [ -z "${NEW_VERSION}" ]; then
|
|
NO_TAG="yes"
|
|
echo "========================================================================"
|
|
msg_warn "WARNING: no tag found for addon ${ADDON}, falling back to HEAD"
|
|
echo "========================================================================"
|
|
if [ -z "${GITHUB_API_TOKEN}" ]; then
|
|
PARAMS="resolve_hash_in_branch ${GIT_DIR} ${GIT_BRANCH}"
|
|
else
|
|
PARAMS="resolve_hash_on_gh ${GIT_REPO} ${GIT_BRANCH}"
|
|
fi
|
|
NEW_VERSION=$(${PARAMS})
|
|
fi
|
|
|
|
echo "Resolved version for ${ADDON}: ${GIT_BRANCH} => ${NEW_VERSION}"
|
|
|
|
if update_pkg "${ADDON_PATH}" ${ADDON} ${NEW_VERSION}; then
|
|
if [ -n "${NO_TAG}" ]; then
|
|
# always bump PKG_REV on updates as we have no info if version changed
|
|
bump_pkg_rev "${ADDON_PATH}" "${ADDON}"
|
|
else
|
|
reset_pkg_rev "${ADDON_PATH}" "${ADDON}"
|
|
fi
|
|
else
|
|
[ "${BUMP_PKG_REV}" = "yes" ] && bump_pkg_rev "${ADDON_PATH}" "${ADDON}"
|
|
fi
|
|
|
|
if [ "${KEEP_GIT_DIRS}" != "yes" ]; then
|
|
[ -d "${GIT_DIR}" ] && rm -rf "${GIT_DIR}"
|
|
fi
|
|
else
|
|
echo "[mkpkg] Skipped $ADDON"
|
|
SKIPPED_ADDONS="$SKIPPED_ADDONS $ADDON"
|
|
fi
|
|
PROCESSED="${PROCESSED}${ADDON}\n"
|
|
done
|
|
|
|
echo
|
|
echo "The following addons were skipped, please add packages for these addons:"
|
|
echo "[${SKIPPED_ADDONS}]"
|
|
echo
|
|
done
|
|
|
|
# finally, any other unofficial addons
|
|
for ADDON in $(ls -1 "${ROOT}/packages/mediacenter/kodi-binary-addons"); do
|
|
[[ ${ADDON} =~ ^game.* ]] && continue # ignore game.* addons - handled by update_retroplayer-addons
|
|
|
|
# ignore already processed addons
|
|
echo -e "${PROCESSED}" | grep -qE "^${ADDON}$" && continue
|
|
|
|
check_package_excluded "${ADDON}" "${EXCLUDED_PACKAGES}" && continue
|
|
|
|
ADDON_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${ADDON}/"
|
|
# Obtain git url - ignore if not a suitable repo
|
|
GIT_DIR="${ADDON}.git"
|
|
GIT_REPO="$(geturl "${ADDON}")" || continue
|
|
|
|
if [ -z "${GITHUB_API_TOKEN}" ]; then
|
|
git_clone ${GIT_REPO} ${GIT_DIR}
|
|
RESOLVE_UNOFFICIAL_BRANCH="resolve_hash_in_branch ${ADDON}.git ${UNOFFICIAL_ADDON_BRANCH}"
|
|
RESOLVE_HEAD="resolve_hash_in_branch ${ADDON}.git HEAD"
|
|
else
|
|
RESOLVE_UNOFFICIAL_BRANCH="resolve_hash_on_gh ${GIT_REPO%.git} ${UNOFFICIAL_ADDON_BRANCH}"
|
|
RESOLVE_HEAD="resolve_hash_on_gh ${GIT_REPO%.git} HEAD"
|
|
fi
|
|
|
|
if RESOLVED_HASH=$(${RESOLVE_UNOFFICIAL_BRANCH}); then
|
|
echo "Resolved hash for ${ADDON}: ${UNOFFICIAL_ADDON_BRANCH} => ${RESOLVED_HASH}"
|
|
elif RESOLVED_HASH=$(${RESOLVE_HEAD}); then
|
|
echo "Resolved hash for ${ADDON}: HEAD => ${RESOLVED_HASH}"
|
|
else
|
|
msg_warn "WARNING: Could not resolve hash for ${ADDON}"
|
|
continue
|
|
fi
|
|
|
|
if update_pkg "${ADDON_PATH}" "${ADDON}" "${RESOLVED_HASH}"; then
|
|
# always bump PKG_REV when updating untagged addons
|
|
bump_pkg_rev "${ADDON_PATH}" "${ADDON}"
|
|
else
|
|
[ "${BUMP_PKG_REV}" = "yes" ] && bump_pkg_rev "${ADDON_PATH}" "${ADDON}"
|
|
fi
|
|
|
|
if [ "${KEEP_GIT_DIRS}" != "yes" ]; then
|
|
[ -d "${GIT_DIR}" ] && rm -rf ${GIT_DIR}
|
|
fi
|
|
done
|
|
|
|
rm -rf "${TMPDIR}"
|
|
|
|
[ -d "${TMP_REPO_DIR}" ] && rm -rf "${TMP_REPO_DIR}"
|