mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-05 17:07:49 +00:00
Merge pull request #5746 from HiassofT/le10-update-scripts
[le10] backport addon update scripts updates
This commit is contained in:
commit
77cc88cbfc
@ -68,10 +68,33 @@ fi
|
||||
|
||||
. "${MY_DIR}/update_common_functions"
|
||||
|
||||
git_clone https://github.com/xbmc/xbmc ${KODI_DIR} ${KODI_BRANCH}
|
||||
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 $KODI_DIR/cmake/addons/bootstrap/repositories/*-addons.txt ; do
|
||||
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}')
|
||||
@ -99,16 +122,28 @@ for addontxt in $KODI_DIR/cmake/addons/bootstrap/repositories/*-addons.txt ; do
|
||||
# If different, ignore the addon and process it later as an "unofficial" addon
|
||||
validate_pkg_url "${ADDON}" "${GIT_REPO}" || continue
|
||||
|
||||
git_clone ${GIT_REPO} ${GIT_DIR} ${GIT_BRANCH}
|
||||
|
||||
NO_TAG=""
|
||||
NEW_VERSION=$(resolve_tag_in_branch ${GIT_DIR} ${GIT_BRANCH})
|
||||
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 "========================================================================"
|
||||
NEW_VERSION=$(resolve_hash_in_branch "${GIT_DIR}" "${GIT_BRANCH}")
|
||||
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}"
|
||||
@ -125,7 +160,7 @@ for addontxt in $KODI_DIR/cmake/addons/bootstrap/repositories/*-addons.txt ; do
|
||||
fi
|
||||
|
||||
if [ "${KEEP_GIT_DIRS}" != "yes" ]; then
|
||||
rm -rf "${GIT_DIR}"
|
||||
[ -d "${GIT_DIR}" ] && rm -rf "${GIT_DIR}"
|
||||
fi
|
||||
else
|
||||
echo "[mkpkg] Skipped $ADDON"
|
||||
@ -134,6 +169,10 @@ for addontxt in $KODI_DIR/cmake/addons/bootstrap/repositories/*-addons.txt ; do
|
||||
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}]"
|
||||
@ -154,11 +193,18 @@ for ADDON in $(ls -1 "${ROOT}/packages/mediacenter/kodi-binary-addons"); do
|
||||
GIT_DIR="${ADDON}.git"
|
||||
GIT_REPO="$(geturl "${ADDON}")" || continue
|
||||
|
||||
git_clone ${GIT_REPO} ${GIT_DIR}
|
||||
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_hash_in_branch ${ADDON}.git ${UNOFFICIAL_ADDON_BRANCH}); then
|
||||
if RESOLVED_HASH=$(${RESOLVE_UNOFFICIAL_BRANCH}); then
|
||||
echo "Resolved hash for ${ADDON}: ${UNOFFICIAL_ADDON_BRANCH} => ${RESOLVED_HASH}"
|
||||
elif RESOLVED_HASH=$(resolve_hash_in_branch ${ADDON}.git HEAD); then
|
||||
elif RESOLVED_HASH=$(${RESOLVE_HEAD}); then
|
||||
echo "Resolved hash for ${ADDON}: HEAD => ${RESOLVED_HASH}"
|
||||
else
|
||||
msg_warn "WARNING: Could not resolve hash for ${ADDON}"
|
||||
@ -173,8 +219,10 @@ for ADDON in $(ls -1 "${ROOT}/packages/mediacenter/kodi-binary-addons"); do
|
||||
fi
|
||||
|
||||
if [ "${KEEP_GIT_DIRS}" != "yes" ]; then
|
||||
rm -rf ${GIT_DIR}
|
||||
[ -d "${GIT_DIR}" ] && rm -rf ${GIT_DIR}
|
||||
fi
|
||||
done
|
||||
|
||||
rm -rf "${TMPDIR}"
|
||||
|
||||
[ -d "${TMP_REPO_DIR}" ] && rm -rf "${TMP_REPO_DIR}"
|
||||
|
@ -5,7 +5,7 @@
|
||||
msg_color() {
|
||||
echo $(
|
||||
cd "${ROOT}"
|
||||
PROJECT=Generic ARCH=x86_64 . config/options ""
|
||||
PROJECT="${PROJECT:-Generic}" ARCH="${ARCH:-x86_64}" . config/options ""
|
||||
echo $(print_color "$1" "$2")
|
||||
)
|
||||
}
|
||||
@ -42,7 +42,7 @@ git_clone() {
|
||||
get_pkg_var() {
|
||||
local pkg_name="$1" pkg_var="$2"
|
||||
cd "${ROOT}"
|
||||
PROJECT=Generic ARCH=x86_64 source config/options ${pkg_name} &>/dev/null
|
||||
PROJECT="${PROJECT:-Generic}" ARCH="${ARCH:-x86_64}" source config/options ${pkg_name} &>/dev/null
|
||||
echo "${!pkg_var}"
|
||||
}
|
||||
|
||||
@ -60,21 +60,59 @@ resolve_hash_in_branch() {
|
||||
fi
|
||||
}
|
||||
|
||||
resolve_hash_on_gh() {
|
||||
curl -s -L -H "Authorization: token ${GITHUB_API_TOKEN}" \
|
||||
-H "Accept: application/vnd.github.VERSION.sha" \
|
||||
"${1/*github.com/https:\/\/api.github.com\/repos}/commits/$2"
|
||||
}
|
||||
|
||||
resolve_tag_in_branch() {
|
||||
local tag
|
||||
local tag tags
|
||||
if [ -d "$1" ] ; then
|
||||
cd "$1"
|
||||
if [ $# -eq 3 ] ; then
|
||||
tag=$(git describe --abbrev=0 --tags --match "$3" origin/$2 2>/dev/null)
|
||||
if [ -n "$tag" ] ; then
|
||||
echo "$tag"
|
||||
return
|
||||
fi
|
||||
tag=$(git describe --abbrev=0 --tags origin/$2 2>/dev/null)
|
||||
if [ -z "${tag}" ]; then
|
||||
return
|
||||
fi
|
||||
git describe --abbrev=0 --tags origin/$2 2>/dev/null
|
||||
tags=( $(git tag --points-at "${tag}" | sort -r -n) )
|
||||
if [ $# -eq 3 -a ${#tags[@]} -gt 1 ]; then
|
||||
for tag in "${tags[@]}"; do
|
||||
if [[ "${tag}" =~ $3 ]]; then
|
||||
echo "$tag"
|
||||
return
|
||||
fi
|
||||
done
|
||||
fi
|
||||
echo "${tags[0]}"
|
||||
fi
|
||||
}
|
||||
|
||||
resolve_tag_on_gh() {
|
||||
local tag
|
||||
|
||||
local QUERY=$(tr '\n' ' ' <<EOF
|
||||
{
|
||||
repository(owner: \\"${1}\\", name: \\"${2}\\") {
|
||||
refs(refPrefix: \\"refs/tags/\\", first: 100, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
|
||||
edges {
|
||||
node {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
tag=$(curl -s -L -H 'Content-Type: application/json' \
|
||||
-H "Authorization: bearer ${GITHUB_API_TOKEN}" \
|
||||
-X POST -d "{ \"query\": \"${QUERY}\" }" https://api.github.com/graphql | \
|
||||
jq -r '[.data.repository.refs.edges[] | select(.node.name | contains("'${3}'"))][0].node.name | select (.!=null)')
|
||||
|
||||
echo "${tag}"
|
||||
}
|
||||
|
||||
check_package_excluded() {
|
||||
local package="$1" local packages_to_exclude="$2" pkg
|
||||
[ -z "${package}" -o -z "${packages_to_exclude}" ] && return 1
|
||||
@ -183,5 +221,10 @@ validate_pkg_url() {
|
||||
|
||||
[ "${url1}" = "${url2}" ] && return 0 || return 1
|
||||
}
|
||||
|
||||
|
||||
# Get user Github token if available
|
||||
get_gh_token() {
|
||||
if [ -z "${GITHUB_API_TOKEN}" ]; then
|
||||
GITHUB_API_TOKEN=$(get_pkg_var "" GITHUB_API_TOKEN)
|
||||
fi
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ FORCE_LIBRETRO_BUMP=""
|
||||
KEEP_GIT_DIRS="yes"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [options] <kodi-branch>"
|
||||
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"
|
||||
@ -46,12 +46,19 @@ while [ $# -ne 0 ]; do
|
||||
done
|
||||
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
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.fbalpha2012
|
||||
@ -73,6 +80,14 @@ 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"
|
||||
@ -114,14 +129,33 @@ for addon in ${ADDONS_DIR}/*.*/ ; do
|
||||
NO_TAG=""
|
||||
CHECK_RETRO=""
|
||||
|
||||
git_clone "${GAME_GIT_REPO}" "${GAME_GIT_DIR}"
|
||||
GAME_NEW_VERSION=$(resolve_tag_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}" "*-${KODI_BRANCH}")
|
||||
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 "========================================================================"
|
||||
GAME_NEW_VERSION=$(resolve_hash_in_branch "${GAME_GIT_DIR}" "${GAME_GIT_BRANCH}")
|
||||
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
|
||||
@ -157,18 +191,24 @@ for addon in ${ADDONS_DIR}/*.*/ ; do
|
||||
fi
|
||||
|
||||
VERSION_INFO=$(grep "^${RETRO_NAME}" "${RETRO_VERSION_FILE}" | head -1)
|
||||
if [[ "$VERSION_INFO" =~ .zip$ ]] ; then
|
||||
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}")
|
||||
else
|
||||
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 update_pkg "${RETRO_PATH}" "${RETRO_ADDON}" "${RETRO_NEW_VERSION}"; then
|
||||
if [ -n "${RETRO_NEW_VERSION}" ] && update_pkg "${RETRO_PATH}" "${RETRO_ADDON}" "${RETRO_NEW_VERSION}"; then
|
||||
BUMPED_RETRO="yes"
|
||||
fi
|
||||
fi
|
||||
|
Loading…
x
Reference in New Issue
Block a user