prepare_vscode.sh 12 KB

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