mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-04-24 04:31:38 +02:00
The GitHub CI was sometimes still building some tools again even when the same version was already pre-built. This change fixes the problem and should improve the speed of the GitHub CI actions. The duration of the "Build tools" step will be reduced from 5 to 20 minutes down to 10 to 15 seconds. make also checks that dependencies are not more recent than the target it wants to build. Previously find returned files in an arbitrary order and touch set the current timestamp. Since touch is called per file the timestamps differ in fractional seconds, so not all files got the same time. make detected a more recent dependency and started to rebuild. Now all files are set to the same timestamp and make will assume everything is up to date. It is sufficient to only touch the stamp files to prevent rebuilding. Link: https://github.com/openwrt/openwrt/pull/22888 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
111 lines
3.1 KiB
Bash
Executable File
111 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
TOOLS_TAR=""
|
|
HOST_BUILD_DIR=$(pwd)/"build_dir/host"
|
|
HOST_STAGING_DIR_STAMP=$(pwd)/"staging_dir/host/stamp"
|
|
|
|
extract_prebuilt_tar() {
|
|
tar -xf "$1"
|
|
}
|
|
|
|
refresh_prebuilt_tools() {
|
|
if [ ! -d "$HOST_BUILD_DIR" ]; then
|
|
echo "Can't find Host Build Dir "$HOST_BUILD_DIR"" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$HOST_STAGING_DIR_STAMP" ]; then
|
|
echo "Can't find Host Staging Dir Stamp "$HOST_STAGING_DIR_STAMP"" >&2
|
|
exit 1
|
|
fi
|
|
|
|
local now
|
|
now=$(date +%Y%m%d%H%M.%S)
|
|
find -H "$HOST_BUILD_DIR" "$HOST_STAGING_DIR_STAMP" \
|
|
-type f -empty -print0 | xargs -0 touch -t "$now"
|
|
|
|
return 0
|
|
}
|
|
|
|
install_prebuilt_tools() {
|
|
extract_prebuilt_tar "$TOOLS_TAR"
|
|
|
|
refresh_prebuilt_tools
|
|
|
|
return 0
|
|
}
|
|
|
|
while [ -n "$1" ]; do
|
|
arg="$1"; shift
|
|
case "$arg" in
|
|
--host-build-dir)
|
|
[ -d "$1" ] || {
|
|
echo "Directory '$1' does not exist." >&2
|
|
exit 1
|
|
}
|
|
HOST_BUILD_DIR="$(cd "$1"; pwd)"; shift
|
|
;;
|
|
|
|
--host-staging-dir-stamp)
|
|
[ -d "$1" ] || {
|
|
echo "Directory '$1' does not exist." >&2
|
|
exit 1
|
|
}
|
|
HOST_STAGING_DIR_STAMP="$(cd "$1"; pwd)"; shift
|
|
;;
|
|
|
|
--tools)
|
|
[ -f "$1" ] || {
|
|
echo "Tools tar file '$1' does not exist." >&2
|
|
exit 1
|
|
}
|
|
TOOLS_TAR="$1"; shift
|
|
install_prebuilt_tools
|
|
|
|
exit $?
|
|
;;
|
|
|
|
--refresh)
|
|
refresh_prebuilt_tools
|
|
|
|
exit $?
|
|
;;
|
|
|
|
-h|--help)
|
|
me="$(basename "$0")"
|
|
echo -e "\nUsage:\n" >&2
|
|
echo -e " $me --host-build-dir {directory}" >&2
|
|
echo -e " Set to refresh timestamp of this build directory" >&2
|
|
echo -e " with --tools." >&2
|
|
echo -e " THIS OPTION MUST BE SET BEFORE --tools." >&2
|
|
echo -e " If not provided the default directory is:" >&2
|
|
echo -e " $(pwd)/build_dir/host\n" >&2
|
|
echo -e " $me --host-staging-dir-stamp {directory}" >&2
|
|
echo -e " Set to refresh staging timestamp present in this" >&2
|
|
echo -e " directory with --tools." >&2
|
|
echo -e " THIS OPTION MUST BE SET BEFORE --tools." >&2
|
|
echo -e " If not provided the default directory is:" >&2
|
|
echo -e " $(pwd)/staging_dir/host/stamp\n" >&2
|
|
echo -e " $me --tools {tar}" >&2
|
|
echo -e " Install the prebuilt tools present in the passed" >&2
|
|
echo -e " tar and prepare them." >&2
|
|
echo -e " To correctly use them it's needed to update the" >&2
|
|
echo -e " timestamp of each tools to skip recompilation.\n" >&2
|
|
echo -e " $me --refresh" >&2
|
|
echo -e " Refresh timestamps of already extracted prebuilt" >&2
|
|
echo -e " tools to correctly use them and skip" >&2
|
|
echo -e " recompilation.\n" >&2
|
|
echo -e " $me --help" >&2
|
|
echo -e " Display this help text and exit.\n\n" >&2
|
|
exit 1
|
|
;;
|
|
|
|
*)
|
|
echo "Unknown argument '$arg'" >&2
|
|
exec $0 --help
|
|
;;
|
|
esac
|
|
done
|
|
|
|
exec $0 --help
|