a14b5dbf17
The Matrix branch of kodi game repo currently switches game.libretro from Matrix to retroplayer branch which results in flipping back game.libretro from 19.0.3 (the latest version in the Matrix branch) to 19.0.2 as that is the latest tag in that branch. Exclude it from automatic updates and let's update it manually for now to avoid those flip-backs. Signed-off-by: Matthias Reichl <hias@horus.com>
248 lines
7.1 KiB
Bash
Executable File
248 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
|
|
|
BUMP_PKG_REV=""
|
|
FORCE_LIBRETRO_BUMP=""
|
|
KEEP_GIT_DIRS="yes"
|
|
|
|
usage() {
|
|
echo "Usage: $0 [options] <kodi-branch> [<tag-suffix>]"
|
|
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 " -f, --force-libretro-bump: check for new libretro package"
|
|
echo " even if kodi game package version has not changed"
|
|
echo " -h, --help: display help"
|
|
}
|
|
|
|
while [ $# -ne 0 ]; do
|
|
case "$1" in
|
|
-b|--bump-pkg-rev)
|
|
BUMP_PKG_REV="yes"
|
|
shift
|
|
;;
|
|
-d|--delete-git-dirs)
|
|
KEEP_GIT_DIRS=""
|
|
shift
|
|
;;
|
|
-f|--force-libretro-bump)
|
|
FORCE_LIBRETRO_BUMP="yes"
|
|
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
|
|
|
|
KODI_BRANCH="$1"
|
|
|
|
if [ $# -eq 2 ]; then
|
|
TAG_SUFFIX="$2"
|
|
else
|
|
TAG_SUFFIX="${KODI_BRANCH}"
|
|
fi
|
|
|
|
# list of packages to exclude from update
|
|
EXCLUDED_PACKAGES="game.libretro.chailove
|
|
game.libretro
|
|
game.libretro.fbalpha2012
|
|
game.libretro.lutro
|
|
game.libretro.parallel_n64
|
|
game.libretro.pcem
|
|
game.libretro.picodrive
|
|
game.libretro.theodore
|
|
game.netplay
|
|
game.shader.presets"
|
|
|
|
MY_DIR="$(dirname "$0")"
|
|
ROOT="$(cd "${MY_DIR}"/../.. && pwd)"
|
|
TMPDIR="$(pwd)/.update-retroplayer-tmp"
|
|
TMP_PKG_FILE="${TMPDIR}/package.tar.gz"
|
|
TMP_PKG_DIR="${TMPDIR}/package"
|
|
|
|
rm -rf "${TMPDIR}"
|
|
mkdir -p "${TMPDIR}"
|
|
|
|
. "${MY_DIR}/update_common_functions"
|
|
|
|
get_gh_token
|
|
|
|
# check if depends are available
|
|
if [ -n "${GITHUB_API_TOKEN}" ]; then
|
|
command -v curl >/dev/null 2>&1 || die "please install curl"
|
|
command -v jq >/dev/null 2>&1 || die "please install jq"
|
|
fi
|
|
|
|
ADDONS="game-binary-addons"
|
|
ADDONS_DIR="${ADDONS}.git"
|
|
ADDONS_REPO="https://github.com/kodi-game/repo-binary-addons.git"
|
|
git_clone ${ADDONS_REPO} ${ADDONS_DIR} ${KODI_BRANCH}
|
|
|
|
for addon in ${ADDONS_DIR}/*.*/ ; do
|
|
GAME_ADDON=$(basename ${addon})
|
|
|
|
[[ "${GAME_ADDON}" =~ ^game. ]] || continue
|
|
|
|
check_package_excluded "${GAME_ADDON}" "${EXCLUDED_PACKAGES}" && continue
|
|
|
|
if ! grep -q all $addon/platforms.txt && ! grep -q linux $addon/platforms.txt && ! grep -q ! $addon/platforms.txt; then
|
|
continue
|
|
fi
|
|
|
|
GAME_GIT_DIR="${GAME_ADDON}.git"
|
|
GAME_GIT_REPO=$(cat $addon/${GAME_ADDON}.txt | awk '{print $2}')
|
|
GAME_GIT_BRANCH=$(cat $addon/${GAME_ADDON}.txt | awk '{print $3}')
|
|
GAME_PATH="${ROOT}/packages/mediacenter/kodi-binary-addons/${GAME_ADDON}"
|
|
|
|
if [ ! -d "$GAME_PATH" ] ; then
|
|
msg_warn "SKIPPING ${GAME_ADDON}, not present in LE"
|
|
continue
|
|
fi
|
|
|
|
if [[ "${GAME_ADDON}" =~ ^game.libretro. ]]; then
|
|
RETRO_NAME="${GAME_ADDON#game.libretro.}"
|
|
RETRO_ADDON="libretro-${RETRO_NAME}"
|
|
RETRO_PATH="${ROOT}/packages/emulation/${RETRO_ADDON}"
|
|
else
|
|
RETRO_NAME=""
|
|
RETRO_ADDON=""
|
|
RETRO_PATH=""
|
|
fi
|
|
|
|
BUMPED_ADDON=""
|
|
BUMPED_RETRO=""
|
|
NO_TAG=""
|
|
CHECK_RETRO=""
|
|
|
|
if [ -z "$GITHUB_API_TOKEN" ]; then
|
|
git_clone "${GAME_GIT_REPO}" "${GAME_GIT_DIR}"
|
|
if [ -n "${TAG_SUFFIX}" ]; then
|
|
GAME_NEW_VERSION=$(resolve_tag_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}" ".*-${TAG_SUFFIX}$")
|
|
else
|
|
GAME_NEW_VERSION=$(resolve_tag_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}")
|
|
fi
|
|
else
|
|
REPO=$(basename "${GAME_GIT_REPO}")
|
|
OWNER=$(basename "${GAME_GIT_REPO%/${REPO}*}")
|
|
if [ -n "${TAG_SUFFIX}" ]; then
|
|
GAME_NEW_VERSION=$(resolve_tag_on_gh "${OWNER}" "${REPO}" "-${TAG_SUFFIX}")
|
|
else
|
|
GAME_NEW_VERSION=$(resolve_tag_on_gh "${OWNER}" "${REPO}")
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${GAME_NEW_VERSION}" ]; then
|
|
NO_TAG="yes"
|
|
echo "========================================================================"
|
|
msg_warn "WARNING: no tag found for addon ${GAME_ADDON}, falling back to HEAD"
|
|
echo "========================================================================"
|
|
if [ -z "$GITHUB_API_TOKEN" ]; then
|
|
GAME_NEW_VERSION=$(resolve_hash_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}")
|
|
else
|
|
GAME_NEW_VERSION=$(resolve_hash_on_gh "${GAME_GIT_REPO}" "${GAME_GIT_BRANCH}")
|
|
fi
|
|
fi
|
|
|
|
if [ "${KEEP_GIT_DIRS}" != "yes" ]; then
|
|
rm -rf "${GAME_GIT_DIR}"
|
|
fi
|
|
|
|
if update_pkg "${GAME_PATH}" "${GAME_ADDON}" "${GAME_NEW_VERSION}"; then
|
|
BUMPED_ADDON="yes"
|
|
[ -n "${RETRO_NAME}" ] && CHECK_RETRO="yes"
|
|
else
|
|
if [ -n "${FORCE_LIBRETRO_BUMP}" -a -n "${RETRO_NAME}" ]; then
|
|
download_pkg_file "${GAME_ADDON}"
|
|
CHECK_RETRO="yes"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "${CHECK_RETRO}" ]; then
|
|
if [ ! -d "${RETRO_PATH}" ]; then
|
|
msg_error "ERROR: ${RETRO_PATH} doesn't exist"
|
|
cleanup_pkg_tmp
|
|
exit 1
|
|
fi
|
|
|
|
RETRO_VERSION=$(get_pkg_var "${RETRO_ADDON}" PKG_VERSION)
|
|
extract_pkg_file
|
|
|
|
RETRO_VERSION_FILE="${TMP_PKG_DIR}/depends/common/${RETRO_NAME}/${RETRO_NAME}.txt"
|
|
|
|
if [ ! -f "${RETRO_VERSION_FILE}" ]; then
|
|
msg_error "ERROR: ${RETRO_VERSION_FILE} does not exist"
|
|
cleanup_pkg_tmp
|
|
exit 1
|
|
fi
|
|
|
|
VERSION_INFO=$(grep "^${RETRO_NAME}" "${RETRO_VERSION_FILE}" | head -1)
|
|
if [[ "$VERSION_INFO" =~ github\.com/[^/]+/[^/]+/archive/[^/]+\.zip$ ]] ; then
|
|
# version referenced by githash
|
|
RETRO_NEW_VERSION=$(sed -e 's|^.*/archive/||' -e 's|\.zip$||' "${RETRO_VERSION_FILE}")
|
|
elif [[ "$VERSION_INFO" =~ github\.com/[^/]+/[^/]+/archive/[^/]+\.tar\.gz$ ]] ; then
|
|
# version referenced by githash
|
|
RETRO_NEW_VERSION=$(sed -e 's|^.*/archive/||' -e 's|\.tar.gz$||' "${RETRO_VERSION_FILE}")
|
|
elif [[ "$VERSION_INFO" =~ github\.com/[^/[:space:]]+/[^/[:space:]]+[[:space:]][^[:space:]]+ ]] ; then
|
|
msg_warn "unmanaged version in kodi package: ${VERSION_INFO}"
|
|
# unmanaged version, repo plus branch
|
|
RETRO_SITE=$(echo "${VERSION_INFO}" | awk '{print $2}')
|
|
RETRO_BRANCH=$(echo "${VERSION_INFO}" | awk '{print $3}')
|
|
RETRO_NEW_VERSION=$(git ls-remote "${RETRO_SITE}" "${RETRO_BRANCH}" | awk '{print $1}')
|
|
else
|
|
msg_warn "UNSUPPORTED ${RETRO_ADDON} version info, update manually: ${VERSION_INFO}"
|
|
RETRO_NEW_VERSION=""
|
|
fi
|
|
|
|
if [ -n "${RETRO_NEW_VERSION}" ] && update_pkg "${RETRO_PATH}" "${RETRO_ADDON}" "${RETRO_NEW_VERSION}"; then
|
|
BUMPED_RETRO="yes"
|
|
fi
|
|
fi
|
|
|
|
if [ -n "${NO_TAG}" ]; then
|
|
# always bump PKG_REV on updates as we have no info if version changed
|
|
if [ -n "${BUMPED_ADDON}" -o -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then
|
|
bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}"
|
|
fi
|
|
else
|
|
if [ -n "${BUMPED_ADDON}" ]; then
|
|
# reset PKG_REV if version changed
|
|
reset_pkg_rev "${GAME_PATH}" "${GAME_ADDON}"
|
|
else
|
|
# if addon version is unchanged but libretro changed bump PKG_REV
|
|
if [ -n "${BUMPED_RETRO}" -o -n "${BUMP_PKG_REV}" ]; then
|
|
bump_pkg_rev "${GAME_PATH}" "${GAME_ADDON}"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
cleanup_pkg_tmp
|
|
done
|
|
|
|
msg_info "Checking for orphaned addon packages in LE"
|
|
for addon in ${ROOT}/packages/mediacenter/kodi-binary-addons/game.libretro.* ; do
|
|
GAME_ADDON=$(basename ${addon})
|
|
if [ ! -d "${ADDONS_DIR}/${GAME_ADDON}" ] ; then
|
|
msg_warn "ORHPANED ${GAME_ADDON}, not present in kodi game repo"
|
|
fi
|
|
done
|
|
|
|
rm -rf "${TMPDIR}"
|
|
|