prepare_vscode.sh 12 KB

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