You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.5 KiB

  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-3.0+
  3. # Copyright (C) 2018, Tom Hiller <thrilleratplay@gmail.com>
  4. # shellcheck disable=SC1091
  5. source /home/coreboot/common_scripts/variables.sh
  6. IS_BUILD_DIR_EMPTY=$(ls -A "$DOCKER_COREBOOT_DIR")
  7. ################################################################################
  8. ## Update or clone git coreboot repo
  9. ################################################################################
  10. function gitUpdate() {
  11. if [ -z "$IS_BUILD_DIR_EMPTY" ]; then
  12. # Clone Coreboot and fetch submodules
  13. git clone https://github.com/coreboot/coreboot.git "$DOCKER_COREBOOT_DIR"
  14. cd "$DOCKER_COREBOOT_DIR" || exit
  15. git submodule update --init --recursive --remote
  16. # blobs are ignored from updates. Manually clone to prevent compile errors later from non empty directory cloning
  17. git clone https://github.com/coreboot/blobs.git 3rdparty/blobs/
  18. else
  19. cd "$DOCKER_COREBOOT_DIR" || exit
  20. git fetch --all --tags --prune
  21. cd "$DOCKER_COREBOOT_DIR/3rdparty/blobs/" || exit
  22. git fetch --all --tags --prune
  23. fi
  24. }
  25. ################################################################################
  26. ################################################################################
  27. ##
  28. ################################################################################
  29. function checkoutTag() {
  30. cd "$DOCKER_COREBOOT_DIR" || exit
  31. git checkout tags/"$COREBOOT_TAG" || exit
  32. git submodule update --recursive --remote
  33. }
  34. ################################################################################
  35. ################################################################################
  36. ##
  37. ################################################################################
  38. function checkoutCommit() {
  39. cd "$DOCKER_COREBOOT_DIR" || exit
  40. # bleeding-edge should checkout master
  41. git checkout "$COREBOOT_COMMIT" || exit
  42. if [ "$COREBOOT_COMMIT" == "master" ]; then
  43. git pull --all
  44. fi
  45. git submodule update --recursive --remote
  46. }
  47. ################################################################################
  48. ################################################################################
  49. ## Cherry-pick a patchset
  50. ################################################################################
  51. function cherryPickPatchset() {
  52. cd "$DOCKER_COREBOOT_DIR" || exit
  53. # Workaround git complaining about unset email
  54. git config --global user.email "dummys@docker.com" && git config --global user.name "skull.docker"
  55. git fetch "https://review.coreboot.org/coreboot" "$COREBOOT_PATCHSET" || exit
  56. git cherry-pick FETCH_HEAD || exit
  57. git submodule update --recursive --remote
  58. }
  59. ################################################################################
  60. ## Download the latest released version of Coreboot
  61. ################################################################################
  62. function downloadCoreboot() {
  63. CB_RELEASES=$(wget -q -O- https://coreboot.org/releases/sha256sum.txt | sed 's/[^*]*\*//')
  64. LATEST_RELEASE=$(echo -n "$CB_RELEASES" | grep "coreboot-" | grep -v "coreboot-blobs-" | sort -V | tail -n1)
  65. LATEST_BLOBS=$(echo -n "$CB_RELEASES" | grep "coreboot-blobs-" | sort -V | tail -n1)
  66. COREBOOT_VERSION=$(echo -n "$LATEST_RELEASE" | sed 's/coreboot-//' | sed 's/.tar.xz//')
  67. echo "Beginning download of $LATEST_RELEASE..."
  68. wget -q -O- "https://coreboot.org/releases/$LATEST_RELEASE" | unxz -c | tar -C "$DOCKER_COREBOOT_DIR" -x --strip 1
  69. wget -q -O- "https://coreboot.org/releases/$LATEST_BLOBS" | unxz -c | tar -C "$DOCKER_COREBOOT_DIR" -x --strip 1
  70. echo "Downloading $LATEST_RELEASE complete"
  71. export COREBOOT_VERSION;
  72. }
  73. ################################################################################
  74. ################################################################################
  75. ## MAIN FUNCTION: download/clone/checkout appropriate version of CoreBoot
  76. ########################################
  77. ########################################################################################################################
  78. function downloadOrUpdateCoreboot() {
  79. if [ -z "$COREBOOT_COMMIT" ] && [ -z "$COREBOOT_TAG" ] && [ -z "$IS_BUILD_DIR_EMPTY" ]; then
  80. # If a no commit nor tag is given and the directory is empty download Coreboot release
  81. downloadCoreboot;
  82. elif [ "$COREBOOT_COMMIT" ]; then
  83. # DOCKER_COMMIT?=$(shell git log -n 1 --pretty=%h)
  84. gitUpdate
  85. checkoutCommit
  86. elif [ "$COREBOOT_TAG" ]; then
  87. gitUpdate
  88. checkoutTag
  89. fi
  90. if [ "$COREBOOT_PATCHSET" ]; then
  91. cherryPickPatchset
  92. fi
  93. }
  94. ################################################################################