forked from libretro/Lakka-LibreELEC
b6da5ced51
Use GitHub GraphQL API to sort fetched tags by date instead by version number.
229 lines
7.0 KiB
Bash
Executable File
229 lines
7.0 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
|
|
REPO=$(basename "${GIT_REPO}")
|
|
OWNER=$(basename "${GIT_REPO%/${REPO}*}")
|
|
PARAMS="resolve_tag_on_gh ${OWNER} ${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
|
|
|
|
if [ "${KEEP_GIT_DIRS}" != "yes" ]; then
|
|
[ -d "${ADDONS_GIT_DIR}" ] && rm -rf "${ADDONS_GIT_DIR}"
|
|
fi
|
|
|
|
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}"
|