package_reh.sh 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. #!/usr/bin/env bash
  2. # shellcheck disable=SC1091
  3. set -ex
  4. if [[ "${CI_BUILD}" == "no" ]]; then
  5. exit 1
  6. fi
  7. # include common functions
  8. . ./utils.sh
  9. mkdir -p assets
  10. tar -xzf ./vscode.tar.gz
  11. cd vscode || { echo "'vscode' dir not found"; exit 1; }
  12. GLIBC_VERSION="2.28"
  13. GLIBCXX_VERSION="3.4.26"
  14. NODE_VERSION="22.15.1"
  15. export VSCODE_NODEJS_URLROOT='/download/release'
  16. export VSCODE_NODEJS_URLSUFFIX=''
  17. if [[ "${VSCODE_ARCH}" == "x64" ]]; then
  18. GLIBC_VERSION="2.17"
  19. GLIBCXX_VERSION="3.4.22"
  20. VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-x64"
  21. export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org'
  22. export VSCODE_NODEJS_URLSUFFIX='-glibc-217'
  23. export VSCODE_SKIP_SETUPENV=1
  24. elif [[ "${VSCODE_ARCH}" == "arm64" ]]; then
  25. EXPECTED_GLIBC_VERSION="2.30"
  26. VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-arm64"
  27. export VSCODE_SKIP_SYSROOT=1
  28. export USE_GNUPP2A=1
  29. elif [[ "${VSCODE_ARCH}" == "armhf" ]]; then
  30. EXPECTED_GLIBC_VERSION="2.30"
  31. VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-armhf"
  32. export VSCODE_SKIP_SYSROOT=1
  33. export USE_GNUPP2A=1
  34. elif [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
  35. VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-ppc64le"
  36. VSCODE_SYSROOT_PREFIX="-glibc-${GLIBC_VERSION}"
  37. export VSCODE_SYSROOT_REPOSITORY='VSCodium/vscode-linux-build-agent'
  38. export VSCODE_SYSROOT_VERSION='20240129-253798'
  39. elif [[ "${VSCODE_ARCH}" == "riscv64" ]]; then
  40. NODE_VERSION="20.16.0"
  41. VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-riscv64"
  42. export VSCODE_SKIP_SETUPENV=1
  43. export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org'
  44. elif [[ "${VSCODE_ARCH}" == "loong64" ]]; then
  45. NODE_VERSION="20.16.0"
  46. VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:beige-devtoolset-loong64"
  47. export VSCODE_SKIP_SETUPENV=1
  48. export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org'
  49. elif [[ "${VSCODE_ARCH}" == "s390x" ]]; then
  50. VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-s390x"
  51. VSCODE_SYSROOT_PREFIX="-glibc-${GLIBC_VERSION}"
  52. export VSCODE_SYSROOT_REPOSITORY='VSCodium/vscode-linux-build-agent'
  53. export VSCODE_SYSROOT_VERSION='20241108'
  54. fi
  55. export ELECTRON_SKIP_BINARY_DOWNLOAD=1
  56. export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
  57. export VSCODE_PLATFORM='linux'
  58. export VSCODE_SKIP_NODE_VERSION_CHECK=1
  59. if [[ -z "${VSCODE_SYSROOT_PREFIX}" ]]; then
  60. export VSCODE_SYSROOT_PREFIX="-glibc-${GLIBC_VERSION}-gcc-10.5.0"
  61. else
  62. export VSCODE_SYSROOT_PREFIX
  63. fi
  64. EXPECTED_GLIBC_VERSION="${EXPECTED_GLIBC_VERSION:=GLIBC_VERSION}"
  65. VSCODE_HOST_MOUNT="$( pwd )"
  66. export VSCODE_HOST_MOUNT
  67. export VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME
  68. sed -i "/target/s/\"22.*\"/\"${NODE_VERSION}\"/" remote/.npmrc
  69. if [[ -d "../patches/linux/reh/" ]]; then
  70. for file in "../patches/linux/reh/"*.patch; do
  71. if [[ -f "${file}" ]]; then
  72. apply_patch "${file}"
  73. fi
  74. done
  75. fi
  76. if [[ -d "../patches/linux/reh/${VSCODE_ARCH}/" ]]; then
  77. for file in "../patches/linux/reh/${VSCODE_ARCH}/"*.patch; do
  78. if [[ -f "${file}" ]]; then
  79. apply_patch "${file}"
  80. fi
  81. done
  82. fi
  83. if [[ -n "${USE_GNUPP2A}" ]]; then
  84. INCLUDES=$(cat <<EOF
  85. {
  86. "target_defaults": {
  87. "conditions": [
  88. ["OS=='linux'", {
  89. 'cflags_cc!': [ '-std=gnu++20' ],
  90. 'cflags_cc': [ '-std=gnu++2a' ],
  91. }]
  92. ]
  93. }
  94. }
  95. EOF
  96. )
  97. if [ ! -d "${HOME}/.gyp" ]; then
  98. mkdir -p "${HOME}/.gyp"
  99. fi
  100. echo "${INCLUDES}" > "${HOME}/.gyp/include.gypi"
  101. fi
  102. mv .npmrc .npmrc.bak
  103. cp ../npmrc .npmrc
  104. for i in {1..5}; do # try 5 times
  105. npm ci --prefix build && break
  106. if [[ $i == 5 ]]; then
  107. echo "Npm install failed too many times" >&2
  108. exit 1
  109. fi
  110. echo "Npm install failed $i, trying again..."
  111. done
  112. if [[ -z "${VSCODE_SKIP_SETUPENV}" ]]; then
  113. if [[ -n "${VSCODE_SKIP_SYSROOT}" ]]; then
  114. source ./build/azure-pipelines/linux/setup-env.sh --skip-sysroot
  115. else
  116. source ./build/azure-pipelines/linux/setup-env.sh
  117. fi
  118. export VSCODE_SYSROOT_DIR="${VSCODE_REMOTE_SYSROOT_DIR}"
  119. else
  120. mkdir -p .build/x86_64-linux-gnu/x86_64-linux-gnu/bin
  121. ln -s $( which objdump ) .build/x86_64-linux-gnu/x86_64-linux-gnu/bin/objdump
  122. export VSCODE_SYSROOT_DIR=".build"
  123. fi
  124. for i in {1..5}; do # try 5 times
  125. npm ci && break
  126. if [[ $i == 5 ]]; then
  127. echo "Npm install failed too many times" >&2
  128. exit 1
  129. fi
  130. echo "Npm install failed $i, trying again..."
  131. # remove dependencies that fail during cleanup
  132. rm -rf node_modules/@vscode node_modules/node-pty
  133. done
  134. if [[ "${VSCODE_ARCH}" == "x64" ]]; then
  135. pushd "remote"
  136. for LIB in @parcel/watcher @vscode/spdlog kerberos node-pty
  137. do
  138. pushd "node_modules/${LIB}"
  139. CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" npx node-gyp rebuild
  140. popd
  141. done
  142. popd
  143. VERIFY_CXX11=1
  144. fi
  145. mv .npmrc.bak .npmrc
  146. node build/azure-pipelines/distro/mixin-npm
  147. export VSCODE_NODE_GLIBC="-glibc-${GLIBC_VERSION}"
  148. if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
  149. echo "Building REH"
  150. npm run gulp minify-vscode-reh
  151. npm run gulp "vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
  152. EXPECTED_GLIBC_VERSION="${EXPECTED_GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh
  153. if [[ -n "${VERIFY_CXX11}" ]]; then
  154. SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh
  155. fi
  156. pushd "../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}"
  157. if [[ -f "../build/linux/${VSCODE_ARCH}/ripgrep.sh" ]]; then
  158. bash "../build/linux/${VSCODE_ARCH}/ripgrep.sh" "node_modules"
  159. fi
  160. echo "Archiving REH"
  161. tar czf "../assets/${APP_NAME_LC}-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz" .
  162. popd
  163. fi
  164. if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then
  165. echo "Building REH-web"
  166. npm run gulp minify-vscode-reh-web
  167. npm run gulp "vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
  168. EXPECTED_GLIBC_VERSION="${EXPECTED_GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh
  169. if [[ -n "${VERIFY_CXX11}" ]]; then
  170. SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh
  171. fi
  172. pushd "../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}"
  173. if [[ -f "../build/linux/${VSCODE_ARCH}/ripgrep.sh" ]]; then
  174. bash "../build/linux/${VSCODE_ARCH}/ripgrep.sh" "node_modules"
  175. fi
  176. echo "Archiving REH-web"
  177. tar czf "../assets/${APP_NAME_LC}-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz" .
  178. popd
  179. fi
  180. cd ..
  181. npm install -g checksum
  182. sum_file() {
  183. if [[ -f "${1}" ]]; then
  184. echo "Calculating checksum for ${1}"
  185. checksum -a sha256 "${1}" > "${1}".sha256
  186. checksum "${1}" > "${1}".sha1
  187. fi
  188. }
  189. cd assets
  190. for FILE in *; do
  191. if [[ -f "${FILE}" ]]; then
  192. sum_file "${FILE}"
  193. fi
  194. done
  195. cd ..