scripts: add update-modules helper (#2294)
Iterates over all configured modules and checks them for updates.
This commit is contained in:
parent
bf79ab93f5
commit
66d3b1749b
3
Makefile
3
Makefile
@ -100,6 +100,9 @@ refresh-patches: FORCE
|
||||
update-feeds: FORCE
|
||||
@$(GLUON_ENV) scripts/feeds.sh
|
||||
|
||||
update-modules: FORCE
|
||||
@scripts/update-modules.sh
|
||||
|
||||
update-ci: FORCE
|
||||
@scripts/update-ci.sh
|
||||
|
||||
|
69
scripts/update-modules.sh
Executable file
69
scripts/update-modules.sh
Executable file
@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
# move to basedir, in case the script is not executed via `make update-modules`
|
||||
cd "$(dirname "$0")/.." || exit 1
|
||||
|
||||
# shellcheck source=./modules
|
||||
source ./modules
|
||||
|
||||
git diff --quiet ./modules || {
|
||||
1>&2 echo "Your modules file is dirty, aborting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
LOCAL_BRANCH=$(git branch --show-current)
|
||||
[[ $LOCAL_BRANCH != *-updates ]] && LOCAL_BRANCH+=-updates
|
||||
|
||||
for MODULE in "OPENWRT" "PACKAGES_PACKAGES" "PACKAGES_ROUTING" "PACKAGES_GLUON"; do
|
||||
_REMOTE_URL=${MODULE}_REPO
|
||||
_REMOTE_BRANCH=${MODULE}_BRANCH
|
||||
_LOCAL_HEAD=${MODULE}_COMMIT
|
||||
|
||||
REMOTE_URL="${!_REMOTE_URL}"
|
||||
REMOTE_BRANCH="${!_REMOTE_BRANCH}"
|
||||
LOCAL_HEAD="${!_LOCAL_HEAD}"
|
||||
|
||||
# get default branch name if none is set
|
||||
[ -z "${REMOTE_BRANCH}" ] && {
|
||||
REMOTE_BRANCH=$(git ls-remote --symref "${REMOTE_URL}" HEAD | awk '/^ref:/ { sub(/refs\/heads\//, "", $2); print $2 }')
|
||||
}
|
||||
|
||||
# fetch the commit id for the HEAD of the module
|
||||
REMOTE_HEAD=$(git ls-remote "${REMOTE_URL}" "${REMOTE_BRANCH}" | awk '{ print $1 }')
|
||||
|
||||
# skip ahead if the commit id did not change
|
||||
[ "$LOCAL_HEAD" == "$REMOTE_HEAD" ] && continue 1
|
||||
|
||||
# switch to local working branch, if we found changes
|
||||
[ "$(git branch --show-current)" != "${LOCAL_BRANCH}" ] && {
|
||||
git switch -c "${LOCAL_BRANCH}" || git switch "${LOCAL_BRANCH}"
|
||||
}
|
||||
|
||||
CHECKOUT=$(mktemp -d)
|
||||
|
||||
# clone the target branch
|
||||
git clone --bare "${REMOTE_URL}" --branch="${REMOTE_BRANCH}" "${CHECKOUT}"
|
||||
|
||||
# prepare the commit message
|
||||
# shellcheck disable=SC2001
|
||||
MODULE=$(echo ${MODULE,,} | sed 's/packages_//')
|
||||
TITLE="modules: update ${MODULE}"
|
||||
MESSAGE="$(mktemp)"
|
||||
{
|
||||
echo "${TITLE}"
|
||||
printf '\n\n'
|
||||
git -C "${CHECKOUT}" log --oneline --no-decorate --no-merges "${LOCAL_HEAD}..${REMOTE_HEAD}" | cat
|
||||
} > "$MESSAGE"
|
||||
|
||||
# modify modules file
|
||||
sed -i "s/${LOCAL_HEAD}/${REMOTE_HEAD}/" ./modules
|
||||
git add ./modules
|
||||
|
||||
git commit -F "${MESSAGE}"
|
||||
|
||||
# remove the checkout
|
||||
rm -fr "${CHECKOUT}"
|
||||
done
|
||||
|
Loading…
Reference in New Issue
Block a user