prepare_vscode.sh 10 KB

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