PageRenderTime 2511ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/scripts/cleanup.sh

https://gitlab.com/lede/buildbot
Shell | 99 lines | 66 code | 23 blank | 10 comment | 14 complexity | d8a3247d1da5c9c8cd18e7b5132fbcce MD5 | raw file
  1. #!/bin/bash
  2. export LC_ALL=C
  3. master_url="$1"
  4. current_slave="$2"
  5. current_builder="$3"
  6. current_mode="$4"
  7. running_builders="$(wget -qO- "${master_url%/}/json/slaves/$current_slave?as_text=1" | sed -ne 's,^.*"builderName": "\(.*\)".*$,\1,p')"
  8. find /tmp/ -maxdepth 1 -mtime +1 '(' -name 'npm-*' -or -name 'jsmake-*' ')' -print0 | xargs -0 -r rm -vr
  9. is_running() {
  10. local running_builder
  11. for running_builder in $running_builders; do
  12. if [ "${running_builder//\//_}" = "${1//\//_}" ]; then
  13. return 0
  14. fi
  15. done
  16. return 1
  17. }
  18. do_cleanup() {
  19. printf "Cleaning up '$current_builder' work directory"
  20. if [ -d .git ]; then
  21. echo " using git"
  22. git reset --hard HEAD
  23. git clean -f -d -x
  24. else
  25. find . -mindepth 1 -maxdepth 1 | while read entry; do
  26. rm -vrf "$entry" | while read entry2; do
  27. case "$entry2" in *directory[:\ ]*)
  28. printf "."
  29. esac
  30. done
  31. done
  32. fi
  33. echo ""
  34. }
  35. #
  36. # Sanity check, current builder should be in running builders list
  37. #
  38. if ! is_running "$current_builder"; then
  39. echo "Current builder '$current_builder' not found in current builders list, aborting cleanup."
  40. exit 1
  41. fi
  42. #
  43. # Clean up leftovers
  44. #
  45. if [ "$current_mode" = full ]; then
  46. (
  47. if ! flock -x -w 2700 200; then
  48. echo "Unable to obtain exclusive lock, aborting cleanup."
  49. exit 1
  50. fi
  51. for build_dir in ../*; do
  52. build_dir="$(readlink -f "$build_dir")"
  53. if [ -z "$build_dir" ] || [ -L "$build_dir" ] || [ ! -d "$build_dir/build" ]; then
  54. continue
  55. fi
  56. current_builder="${build_dir##*/}"
  57. if is_running "$current_builder"; then
  58. echo "Skipping currently active '$current_builder' work directory."
  59. continue
  60. fi
  61. (
  62. cd "$build_dir/build"
  63. do_cleanup
  64. )
  65. done
  66. ) 200>../cleanup.lock
  67. #
  68. # Clean up current build
  69. #
  70. else
  71. if [ -d build ]; then (
  72. cd build
  73. do_cleanup
  74. ); fi
  75. fi
  76. exit 0