prepare_vscode.sh 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. #!/usr/bin/env bash
  2. # shellcheck disable=SC1091,2154
  3. set -e
  4. # include common functions
  5. . ./utils.sh
  6. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  7. cp -rp src/insider/* vscode/
  8. else
  9. cp -rp src/stable/* vscode/
  10. fi
  11. cp -f LICENSE vscode/LICENSE.txt
  12. cd vscode || { echo "'vscode' dir not found"; exit 1; }
  13. ../update_settings.sh
  14. # apply patches
  15. { set +x; } 2>/dev/null
  16. for file in ../patches/*.patch; do
  17. if [[ -f "${file}" ]]; then
  18. echo applying patch: "${file}";
  19. # grep '^+++' "${file}" | sed -e 's#+++ [ab]/#./vscode/#' | while read line; do shasum -a 256 "${line}"; done
  20. if ! git apply --ignore-whitespace "${file}"; then
  21. echo failed to apply patch "${file}" >&2
  22. exit 1
  23. fi
  24. fi
  25. done
  26. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  27. for file in ../patches/insider/*.patch; do
  28. if [[ -f "${file}" ]]; then
  29. echo applying patch: "${file}";
  30. if ! git apply --ignore-whitespace "${file}"; then
  31. echo failed to apply patch "${file}" >&2
  32. exit 1
  33. fi
  34. fi
  35. done
  36. fi
  37. for file in ../patches/user/*.patch; do
  38. if [[ -f "${file}" ]]; then
  39. echo applying user patch: "${file}";
  40. if ! git apply --ignore-whitespace "${file}"; then
  41. echo failed to apply patch "${file}" >&2
  42. exit 1
  43. fi
  44. fi
  45. done
  46. set -x
  47. export ELECTRON_SKIP_BINARY_DOWNLOAD=1
  48. export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
  49. if [[ "${OS_NAME}" == "linux" ]]; then
  50. export VSCODE_SKIP_NODE_VERSION_CHECK=1
  51. if [[ -f "../.nvmrc.linux" ]]; then
  52. mv ../.nvmrc.linux ../.nvmrc
  53. fi
  54. for file in ../patches/linux/*.patch; do
  55. if [[ -f "${file}" ]]; then
  56. echo applying patch: "${file}";
  57. if ! git apply --ignore-whitespace "${file}"; then
  58. echo failed to apply patch "${file}" >&2
  59. exit 1
  60. fi
  61. fi
  62. done
  63. fi
  64. if [[ "${OS_NAME}" == "linux" ]]; then
  65. if [[ "${npm_config_arch}" == "arm" ]]; then
  66. export npm_config_arm_version=7
  67. fi
  68. if [[ "${CI_BUILD}" == "no" ]]; then
  69. yarn --frozen-lockfile --check-files
  70. else
  71. mkdir -p .build
  72. export VSCODE_SYSROOT_PREFIX='-glibc-2.17'
  73. VSCODE_HOST_MOUNT="$( pwd )"
  74. export VSCODE_HOST_MOUNT
  75. # if [[ "${VSCODE_ARCH}" == "x64" || "${VSCODE_ARCH}" == "arm64" ]]; then
  76. # VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:centos7-devtoolset8-${VSCODE_ARCH}"
  77. # elif [[ "${VSCODE_ARCH}" == "armhf" ]]; then
  78. # VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:bionic-devtoolset-arm32v7"
  79. # elif [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
  80. # VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:bionic-devtoolset-ppc64le"
  81. # fi
  82. # export VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME
  83. for i in {1..5}; do # try 5 times
  84. yarn --cwd build --frozen-lockfile --check-files && break
  85. if [[ $i == 3 ]]; then
  86. echo "Yarn failed too many times" >&2
  87. exit 1
  88. fi
  89. echo "Yarn failed $i, trying again..."
  90. done
  91. ./build/azure-pipelines/linux/install.sh
  92. EXPECTED_GLIBC_VERSION="2.17" EXPECTED_GLIBCXX_VERSION="3.4.22" ./build/azure-pipelines/linux/verify-glibc-requirements.sh
  93. node build/azure-pipelines/distro/mixin-npm
  94. fi
  95. elif [[ "${OS_NAME}" == "osx" ]]; then
  96. CHILD_CONCURRENCY=1 yarn --frozen-lockfile --network-timeout 180000
  97. yarn postinstall
  98. else
  99. # TODO: Should be replaced with upstream URL once https://github.com/nodejs/node-gyp/pull/2825
  100. # gets merged.
  101. rm -rf .build/node-gyp
  102. mkdir -p .build/node-gyp
  103. cd .build/node-gyp
  104. git config --global user.email "$( echo "${GITHUB_USERNAME}" | awk '{print tolower($0)}' )-ci@not-real.com"
  105. git config --global user.name "${GITHUB_USERNAME} CI"
  106. git clone https://github.com/nodejs/node-gyp.git .
  107. git checkout v9.4.0
  108. git am --3way --whitespace=fix ../../build/npm/gyp/patches/gyp_spectre_mitigation_support.patch
  109. npm install
  110. npm_config_node_gyp="$( pwd )/bin/node-gyp.js"
  111. export npm_config_node_gyp
  112. cd ../..
  113. if [[ "${npm_config_arch}" == "arm" ]]; then
  114. export npm_config_arm_version=7
  115. fi
  116. CHILD_CONCURRENCY=1 yarn --frozen-lockfile --check-files --network-timeout 180000
  117. fi
  118. setpath() {
  119. local jsonTmp
  120. { set +x; } 2>/dev/null
  121. jsonTmp=$( jq --arg 'path' "${2}" --arg 'value' "${3}" 'setpath([$path]; $value)' "${1}.json" )
  122. echo "${jsonTmp}" > "${1}.json"
  123. set -x
  124. }
  125. setpath_json() {
  126. local jsonTmp
  127. { set +x; } 2>/dev/null
  128. jsonTmp=$( jq --arg 'path' "${2}" --argjson 'value' "${3}" 'setpath([$path]; $value)' "${1}.json" )
  129. echo "${jsonTmp}" > "${1}.json"
  130. set -x
  131. }
  132. # product.json
  133. cp product.json{,.bak}
  134. setpath "product" "checksumFailMoreInfoUrl" "https://go.microsoft.com/fwlink/?LinkId=828886"
  135. setpath "product" "documentationUrl" "https://go.microsoft.com/fwlink/?LinkID=533484#vscode"
  136. setpath_json "product" "extensionsGallery" '{"serviceUrl": "https://open-vsx.org/vscode/gallery", "itemUrl": "https://open-vsx.org/vscode/item"}'
  137. setpath "product" "introductoryVideosUrl" "https://go.microsoft.com/fwlink/?linkid=832146"
  138. setpath "product" "keyboardShortcutsUrlLinux" "https://go.microsoft.com/fwlink/?linkid=832144"
  139. setpath "product" "keyboardShortcutsUrlMac" "https://go.microsoft.com/fwlink/?linkid=832143"
  140. setpath "product" "keyboardShortcutsUrlWin" "https://go.microsoft.com/fwlink/?linkid=832145"
  141. setpath "product" "licenseUrl" "https://github.com/VSCodium/vscodium/blob/master/LICENSE"
  142. setpath_json "product" "linkProtectionTrustedDomains" '["https://open-vsx.org"]'
  143. setpath "product" "releaseNotesUrl" "https://go.microsoft.com/fwlink/?LinkID=533483#vscode"
  144. setpath "product" "reportIssueUrl" "https://github.com/VSCodium/vscodium/issues/new"
  145. setpath "product" "requestFeatureUrl" "https://go.microsoft.com/fwlink/?LinkID=533482"
  146. setpath "product" "tipsAndTricksUrl" "https://go.microsoft.com/fwlink/?linkid=852118"
  147. setpath "product" "twitterUrl" "https://go.microsoft.com/fwlink/?LinkID=533687"
  148. if [[ "${DISABLE_UPDATE}" != "yes" ]]; then
  149. setpath "product" "updateUrl" "https://vscodium.now.sh"
  150. setpath "product" "downloadUrl" "https://github.com/VSCodium/vscodium/releases"
  151. fi
  152. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  153. setpath "product" "nameShort" "VSCodium - Insiders"
  154. setpath "product" "nameLong" "VSCodium - Insiders"
  155. setpath "product" "applicationName" "codium-insiders"
  156. setpath "product" "dataFolderName" ".vscodium-insiders"
  157. setpath "product" "linuxIconName" "vscodium-insiders"
  158. setpath "product" "quality" "insider"
  159. setpath "product" "urlProtocol" "vscodium-insiders"
  160. setpath "product" "serverApplicationName" "codium-server-insiders"
  161. setpath "product" "serverDataFolderName" ".vscodium-server-insiders"
  162. setpath "product" "darwinBundleIdentifier" "com.vscodium.VSCodiumInsiders"
  163. setpath "product" "win32AppUserModelId" "VSCodium.VSCodiumInsiders"
  164. setpath "product" "win32DirName" "VSCodium Insiders"
  165. setpath "product" "win32MutexName" "vscodiuminsiders"
  166. setpath "product" "win32NameVersion" "VSCodium Insiders"
  167. setpath "product" "win32RegValueName" "VSCodiumInsiders"
  168. setpath "product" "win32ShellNameShort" "VSCodium Insiders"
  169. setpath "product" "win32AppId" "{{EF35BB36-FA7E-4BB9-B7DA-D1E09F2DA9C9}"
  170. setpath "product" "win32x64AppId" "{{B2E0DDB2-120E-4D34-9F7E-8C688FF839A2}"
  171. setpath "product" "win32arm64AppId" "{{44721278-64C6-4513-BC45-D48E07830599}"
  172. setpath "product" "win32UserAppId" "{{ED2E5618-3E7E-4888-BF3C-A6CCC84F586F}"
  173. setpath "product" "win32x64UserAppId" "{{20F79D0D-A9AC-4220-9A81-CE675FFB6B41}"
  174. setpath "product" "win32arm64UserAppId" "{{2E362F92-14EA-455A-9ABD-3E656BBBFE71}"
  175. else
  176. setpath "product" "nameShort" "VSCodium"
  177. setpath "product" "nameLong" "VSCodium"
  178. setpath "product" "applicationName" "codium"
  179. setpath "product" "linuxIconName" "vscodium"
  180. setpath "product" "quality" "stable"
  181. setpath "product" "urlProtocol" "vscodium"
  182. setpath "product" "serverApplicationName" "codium-server"
  183. setpath "product" "serverDataFolderName" ".vscodium-server"
  184. setpath "product" "darwinBundleIdentifier" "com.vscodium"
  185. setpath "product" "win32AppUserModelId" "VSCodium.VSCodium"
  186. setpath "product" "win32DirName" "VSCodium"
  187. setpath "product" "win32MutexName" "vscodium"
  188. setpath "product" "win32NameVersion" "VSCodium"
  189. setpath "product" "win32RegValueName" "VSCodium"
  190. setpath "product" "win32ShellNameShort" "VSCodium"
  191. setpath "product" "win32AppId" "{{763CBF88-25C6-4B10-952F-326AE657F16B}"
  192. setpath "product" "win32x64AppId" "{{88DA3577-054F-4CA1-8122-7D820494CFFB}"
  193. setpath "product" "win32arm64AppId" "{{67DEE444-3D04-4258-B92A-BC1F0FF2CAE4}"
  194. setpath "product" "win32UserAppId" "{{0FD05EB4-651E-4E78-A062-515204B47A3A}"
  195. setpath "product" "win32x64UserAppId" "{{2E1F05D1-C245-4562-81EE-28188DB6FD17}"
  196. setpath "product" "win32arm64UserAppId" "{{57FD70A5-1B8D-4875-9F40-C5553F094828}"
  197. fi
  198. jsonTmp=$( jq -s '.[0] * .[1]' product.json ../product.json )
  199. echo "${jsonTmp}" > product.json && unset jsonTmp
  200. cat product.json
  201. # package.json
  202. cp package.json{,.bak}
  203. setpath "package" "version" "$( echo "${RELEASE_VERSION}" | sed -n -E "s/^(.*)\.([0-9]+)(-insider)?$/\1/p" )"
  204. setpath "package" "release" "$( echo "${RELEASE_VERSION}" | sed -n -E "s/^(.*)\.([0-9]+)(-insider)?$/\2/p" )"
  205. replace 's|Microsoft Corporation|VSCodium|' package.json
  206. # announcements
  207. replace "s|\\[\\/\\* BUILTIN_ANNOUNCEMENTS \\*\\/\\]|$( tr -d '\n' < ../announcements-builtin.json )|" src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
  208. ../undo_telemetry.sh
  209. replace 's|Microsoft Corporation|VSCodium|' build/lib/electron.js
  210. replace 's|Microsoft Corporation|VSCodium|' build/lib/electron.ts
  211. replace 's|([0-9]) Microsoft|\1 VSCodium|' build/lib/electron.js
  212. replace 's|([0-9]) Microsoft|\1 VSCodium|' build/lib/electron.ts
  213. if [[ "${OS_NAME}" == "linux" ]]; then
  214. # microsoft adds their apt repo to sources
  215. # unless the app name is code-oss
  216. # as we are renaming the application to vscodium
  217. # we need to edit a line in the post install template
  218. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  219. sed -i "s/code-oss/codium-insiders/" resources/linux/debian/postinst.template
  220. else
  221. sed -i "s/code-oss/codium/" resources/linux/debian/postinst.template
  222. fi
  223. # fix the packages metadata
  224. # code.appdata.xml
  225. sed -i 's|Visual Studio Code|VSCodium|g' resources/linux/code.appdata.xml
  226. sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/code.appdata.xml
  227. sed -i 's|https://code.visualstudio.com/home/home-screenshot-linux-lg.png|https://vscodium.com/img/vscodium.png|' resources/linux/code.appdata.xml
  228. sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/code.appdata.xml
  229. # control.template
  230. sed -i 's|Microsoft Corporation <vscode-linux@microsoft.com>|VSCodium Team https://github.com/VSCodium/vscodium/graphs/contributors|' resources/linux/debian/control.template
  231. sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/debian/control.template
  232. sed -i 's|Visual Studio Code|VSCodium|g' resources/linux/debian/control.template
  233. sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/debian/control.template
  234. # code.spec.template
  235. sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/rpm/code.spec.template
  236. sed -i 's|Microsoft Corporation|VSCodium Team|' resources/linux/rpm/code.spec.template
  237. sed -i 's|Visual Studio Code Team <vscode-linux@microsoft.com>|VSCodium Team https://github.com/VSCodium/vscodium/graphs/contributors|' resources/linux/rpm/code.spec.template
  238. sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/rpm/code.spec.template
  239. sed -i 's|Visual Studio Code|VSCodium|' resources/linux/rpm/code.spec.template
  240. # snapcraft.yaml
  241. sed -i 's|Visual Studio Code|VSCodium|' resources/linux/rpm/code.spec.template
  242. elif [[ "${OS_NAME}" == "windows" ]]; then
  243. # code.iss
  244. sed -i 's|https://code.visualstudio.com|https://vscodium.com|' build/win32/code.iss
  245. sed -i 's|Microsoft Corporation|VSCodium|' build/win32/code.iss
  246. fi
  247. cd ..