prepare_vscode.sh 11 KB

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