flatcar-scripts/.github/workflows/kernel-apply-patch.sh

94 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
source "${GHA_SCRIPTS_DIR}/.github/workflows/common.sh"
prepare_git_repo
if ! check_remote_branch "linux-${VERSION_NEW}-${TARGET_BRANCH}"; then
echo "remote branch already exists, nothing to do"
exit 0
fi
# Dive into ebuild repo section of SDK
pushd "${SDK_OUTER_OVERLAY}"
# trim the 3rd part in the input semver, e.g. from 5.4.1 to 5.4
VERSION_SHORT=${VERSION_NEW%.*}
VERSION_OLD=$(sed -n "s/^DIST patch-\(${VERSION_SHORT}\.[0-9]*\).*/\1/p" sys-kernel/coreos-sources/Manifest)
if [[ -z "${VERSION_OLD}" ]]; then
VERSION_OLD=$(sed -n "s/^DIST linux-\(${VERSION_SHORT}*\).*/\1/p" sys-kernel/coreos-sources/Manifest)
fi
if [[ "${VERSION_NEW}" = "${VERSION_OLD}" ]]; then
echo "already the latest Kernel, nothing to do"
exit 0
fi
extra_pkgs=(
sys-kernel/coreos-modules
sys-kernel/coreos-kernel
)
for pkg in sources modules kernel; do
pushd "sys-kernel/coreos-${pkg}"
git mv "coreos-${pkg}"-*.ebuild "coreos-${pkg}-${VERSION_NEW}.ebuild"
sed -i -e '/^COREOS_SOURCE_REVISION=/s/=.*/=""/' "coreos-${pkg}-${VERSION_NEW}.ebuild"
popd
done
if [[ -d app-emulation/hv-daemons ]]; then
# Update hyperv daemons ebuild soft-link to reflect new kernel version
find -D exec app-emulation/hv-daemons/ -type l -exec rm '{}' \;
ln --relative -s app-emulation/hv-daemons/hv-daemons-9999.ebuild \
app-emulation/hv-daemons/hv-daemons-${VERSION_NEW}.ebuild
extra_pkgs+=( app-emulation/hv-daemons )
fi
# Leave ebuild repo section of SDK
popd
function get_lwn_link() {
local LINUX_VERSION="${1}"; shift
local url
if ! curl -sfA 'Chrome' -L 'http://www.google.com/search?hl=en&q=site%3Alwn.net+linux+'"${LINUX_VERSION}" -o search.html >&2; then
echo 'curl failed' >&2
touch search.html
fi
# can't use grep -m 1 -o … to replace head -n 1, because all the links
# seem to happen in one line, so grep prints all the links in the line
url=$({ grep -o 'https://lwn.net/Articles/[0-9]\+' search.html || true ; } | head -n 1)
if [[ ! "${url}" ]]; then
echo 'no valid links found in the search result' >&2
url="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tag/?h=v${LINUX_VERSION}"
fi
rm search.html
echo "${url}"
}
PATCH_VERSION_OLD=${VERSION_OLD##*.}
PATCH_VERSION_NEW=${VERSION_NEW##*.}
PATCH_NUM=$((PATCH_VERSION_NEW - 1))
OLD_VERSIONS_AND_URLS=()
while [[ ${PATCH_NUM} -gt ${PATCH_VERSION_OLD} ]]; do
TMP_VERSION="${VERSION_SHORT}.${PATCH_NUM}"
TMP_URL=$(get_lwn_link "${TMP_VERSION}")
OLD_VERSIONS_AND_URLS+=( "${TMP_VERSION}" "${TMP_URL}" )
: $((PATCH_NUM--))
done
URL=$(get_lwn_link "${VERSION_NEW}")
generate_update_changelog 'Linux' "${VERSION_NEW}" "${URL}" 'linux' "${OLD_VERSIONS_AND_URLS[@]}"
commit_changes sys-kernel/coreos-sources "${VERSION_OLD}" "${VERSION_NEW}" "${extra_pkgs[@]}"
cleanup_repo
echo "VERSION_OLD=${VERSION_OLD}" >>"${GITHUB_OUTPUT}"
echo 'UPDATE_NEEDED=1' >>"${GITHUB_OUTPUT}"