prepare_vscode.sh 10 KB

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