diff --git a/layers/meta-netmodule-legacy-bsp/recipes-kernel/linux/linux-nrsw_git.bb b/layers/meta-netmodule-legacy-bsp/recipes-kernel/linux/linux-nrsw_git.bb index 1787092..b1ac7c1 100644 --- a/layers/meta-netmodule-legacy-bsp/recipes-kernel/linux/linux-nrsw_git.bb +++ b/layers/meta-netmodule-legacy-bsp/recipes-kernel/linux/linux-nrsw_git.bb @@ -26,3 +26,8 @@ PV = "${LINUX_VERSION}+git${SRCPV}" COMPATIBLE_MACHINE = "netmodule-hw*" KERNEL_FEATURES ?= "initrd.scc" + + +# This is set by linux-yocto but we need to remove it in +# order to automatically update the SRCREV +unset RECIPE_NO_UPDATE_REASON diff --git a/scripts/update-source-revisions.sh b/scripts/update-source-revisions.sh new file mode 100755 index 0000000..b6a6411 --- /dev/null +++ b/scripts/update-source-revisions.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +# This script will look for git recipes in our own layers and +# automatically check if there are new upstream commit in order +# to update the SRCREV entry in the recipe. +# +# For it to work properly, UPSTREAM_CHECK_COMMITS = "1" must be set +# in your local.conf (see our template) +# +# This script does not commit anything, please review the changes +# before committing and pushing. + +set -euo pipefail + + +ABSOLUTE_PATH="$(readlink -f "$0")" +SCRIPTS_DIR=$(dirname "${ABSOLUTE_PATH}") +YOCTO_DIR=$(readlink -f "${SCRIPTS_DIR}/../") + + +updatable_recipes=() +updatable_packages=() + +get_updatable_recipes() +{ + all_recipes=$(find "${YOCTO_DIR}"/layers -name "*.bb") + for recipe in ${all_recipes}; do + if grep -q SRCREV "${recipe}"; then + updatable_recipes+=("${recipe}") + fi + done +} + +convert_recipes_to_package_names() +{ + for file in "${updatable_recipes[@]}"; do + filename=$(basename "${file}") + package_name=${filename/_git\.bb/} + updatable_packages+=("${package_name}") + done +} + +get_new_commit_lines() +{ + # Load build environment (disable flags to avoid problems while sourcing + set +eu + export BB_ENV_PASSTHROUGH_ADDITIONS="UPSTREAM_CHECK_COMMITS" + export MACHINE=netmodule-hw20 + export UPSTREAM_CHECK_COMMITS="1" + # shellcheck source=/dev/null + source "${YOCTO_DIR}"/nwl-init-build-env >/dev/null + set -eu + + # the relevant output is on stderr + if ! upgrade_status=$(devtool check-upgrade-status "${updatable_packages[@]}" 2>&1 >/dev/null); + then + echo "devtool failed" + exit 1 + fi + + if ! new_commit_lines=$(grep "new commits" <<< "${upgrade_status}") + then + echo "Nothing to update" + exit 0 + fi +} + +get_bbfile_from_package() +{ + package="${1}" + for file in "${updatable_recipes[@]}"; do + # The grepped output will be used by caller + if grep "${package}" <<< "${file}"; then + return + fi + done +} + + +get_updatable_recipes +#echo -e "Found bbfiles: \n" "${updatable_recipes[@]}\n" + +convert_recipes_to_package_names +echo -e "Looking for updates for these packages: \n" "${updatable_packages[@]}" "\n" + +get_new_commit_lines +echo -e "New commits: \n${new_commit_lines}\n" + +echo "Starting to update files" +IFS=$'\n' # Read line by line instead of word by word +for line in ${new_commit_lines}; do + # Get package name (2nd word of the line) + package_name=$(cut -d " " -f 2 <<< "${line}") + # Convert to recipe filename + bbfile=$(get_bbfile_from_package "${package_name}") + relative_bbfile_path=$(realpath --relative-to="${YOCTO_DIR}" "${bbfile}") + + # The commit is the last word of the line + newrev=$(grep --only-matching --extended-regexp '[^ ]+\s?$' <<< "${line}") + newrev=$(tr -d " " <<< "${newrev}") + + echo "Updating ${relative_bbfile_path}" + echo "To ${newrev}" + echo + sed -i "s/^SRCREV.*/SRCREV = \"${newrev}\"/g" "${bbfile}" +done + +exit 0