prepare_vscode.sh 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #!/usr/bin/env bash
  2. # shellcheck disable=SC1091,2154
  3. set -e
  4. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  5. cp -rp src/insider/* vscode/
  6. else
  7. cp -rp src/stable/* vscode/
  8. fi
  9. cp -f LICENSE vscode/LICENSE.txt
  10. cd vscode || { echo "'vscode' dir not found"; exit 1; }
  11. # {{{ product.json
  12. cp product.json{,.bak}
  13. setpath() {
  14. local jsonTmp
  15. { set +x; } 2>/dev/null
  16. jsonTmp=$( jq --arg 'value' "${3}" "setpath(path(.${2}); \$value)" "${1}.json" )
  17. echo "${jsonTmp}" > "${1}.json"
  18. set -x
  19. }
  20. setpath_json() {
  21. local jsonTmp
  22. { set +x; } 2>/dev/null
  23. jsonTmp=$( jq --argjson 'value' "${3}" "setpath(path(.${2}); \$value)" "${1}.json" )
  24. echo "${jsonTmp}" > "${1}.json"
  25. set -x
  26. }
  27. setpath "product" "checksumFailMoreInfoUrl" "https://go.microsoft.com/fwlink/?LinkId=828886"
  28. setpath "product" "documentationUrl" "https://go.microsoft.com/fwlink/?LinkID=533484#vscode"
  29. setpath_json "product" "extensionsGallery" '{"serviceUrl": "https://open-vsx.org/vscode/gallery", "itemUrl": "https://open-vsx.org/vscode/item", "latestUrlTemplate": "https://open-vsx.org/vscode/gallery/{publisher}/{name}/latest", "controlUrl": "https://raw.githubusercontent.com/EclipseFdn/publish-extensions/refs/heads/master/extension-control/extensions.json"}'
  30. setpath "product" "introductoryVideosUrl" "https://go.microsoft.com/fwlink/?linkid=832146"
  31. setpath "product" "keyboardShortcutsUrlLinux" "https://go.microsoft.com/fwlink/?linkid=832144"
  32. setpath "product" "keyboardShortcutsUrlMac" "https://go.microsoft.com/fwlink/?linkid=832143"
  33. setpath "product" "keyboardShortcutsUrlWin" "https://go.microsoft.com/fwlink/?linkid=832145"
  34. setpath "product" "licenseUrl" "https://github.com/VSCodium/vscodium/blob/master/LICENSE"
  35. setpath_json "product" "linkProtectionTrustedDomains" '["https://open-vsx.org"]'
  36. setpath "product" "releaseNotesUrl" "https://go.microsoft.com/fwlink/?LinkID=533483#vscode"
  37. setpath "product" "reportIssueUrl" "https://github.com/VSCodium/vscodium/issues/new"
  38. setpath "product" "requestFeatureUrl" "https://go.microsoft.com/fwlink/?LinkID=533482"
  39. setpath "product" "tipsAndTricksUrl" "https://go.microsoft.com/fwlink/?linkid=852118"
  40. setpath "product" "twitterUrl" "https://go.microsoft.com/fwlink/?LinkID=533687"
  41. if [[ "${DISABLE_UPDATE}" != "yes" ]]; then
  42. setpath "product" "updateUrl" "https://raw.githubusercontent.com/VSCodium/versions/refs/heads/master"
  43. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  44. setpath "product" "downloadUrl" "https://github.com/VSCodium/vscodium-insiders/releases"
  45. else
  46. setpath "product" "downloadUrl" "https://github.com/VSCodium/vscodium/releases"
  47. fi
  48. fi
  49. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  50. setpath "product" "nameShort" "VSCodium - Insiders"
  51. setpath "product" "nameLong" "VSCodium - Insiders"
  52. setpath "product" "applicationName" "codium-insiders"
  53. setpath "product" "dataFolderName" ".vscodium-insiders"
  54. setpath "product" "linuxIconName" "vscodium-insiders"
  55. setpath "product" "quality" "insider"
  56. setpath "product" "urlProtocol" "vscodium-insiders"
  57. setpath "product" "serverApplicationName" "codium-server-insiders"
  58. setpath "product" "serverDataFolderName" ".vscodium-server-insiders"
  59. setpath "product" "darwinBundleIdentifier" "com.vscodium.VSCodiumInsiders"
  60. setpath "product" "win32AppUserModelId" "VSCodium.VSCodiumInsiders"
  61. setpath "product" "win32DirName" "VSCodium Insiders"
  62. setpath "product" "win32MutexName" "vscodiuminsiders"
  63. setpath "product" "win32NameVersion" "VSCodium Insiders"
  64. setpath "product" "win32RegValueName" "VSCodiumInsiders"
  65. setpath "product" "win32ShellNameShort" "VSCodium Insiders"
  66. setpath "product" "win32AppId" "{{EF35BB36-FA7E-4BB9-B7DA-D1E09F2DA9C9}"
  67. setpath "product" "win32x64AppId" "{{B2E0DDB2-120E-4D34-9F7E-8C688FF839A2}"
  68. setpath "product" "win32arm64AppId" "{{44721278-64C6-4513-BC45-D48E07830599}"
  69. setpath "product" "win32UserAppId" "{{ED2E5618-3E7E-4888-BF3C-A6CCC84F586F}"
  70. setpath "product" "win32x64UserAppId" "{{20F79D0D-A9AC-4220-9A81-CE675FFB6B41}"
  71. setpath "product" "win32arm64UserAppId" "{{2E362F92-14EA-455A-9ABD-3E656BBBFE71}"
  72. setpath "product" "tunnelApplicationName" "codium-tunnel-insiders"
  73. setpath "product" "win32TunnelServiceMutex" "vscodiuminsiders-tunnelservice"
  74. setpath "product" "win32TunnelMutex" "vscodiuminsiders-tunnel"
  75. setpath "product" "win32ContextMenu.x64.clsid" "90AAD229-85FD-43A3-B82D-8598A88829CF"
  76. setpath "product" "win32ContextMenu.arm64.clsid" "7544C31C-BDBF-4DDF-B15E-F73A46D6723D"
  77. else
  78. setpath "product" "nameShort" "VSCodium"
  79. setpath "product" "nameLong" "VSCodium"
  80. setpath "product" "applicationName" "codium"
  81. setpath "product" "linuxIconName" "vscodium"
  82. setpath "product" "quality" "stable"
  83. setpath "product" "urlProtocol" "vscodium"
  84. setpath "product" "serverApplicationName" "codium-server"
  85. setpath "product" "serverDataFolderName" ".vscodium-server"
  86. setpath "product" "darwinBundleIdentifier" "com.vscodium"
  87. setpath "product" "win32AppUserModelId" "VSCodium.VSCodium"
  88. setpath "product" "win32DirName" "VSCodium"
  89. setpath "product" "win32MutexName" "vscodium"
  90. setpath "product" "win32NameVersion" "VSCodium"
  91. setpath "product" "win32RegValueName" "VSCodium"
  92. setpath "product" "win32ShellNameShort" "VSCodium"
  93. setpath "product" "win32AppId" "{{763CBF88-25C6-4B10-952F-326AE657F16B}"
  94. setpath "product" "win32x64AppId" "{{88DA3577-054F-4CA1-8122-7D820494CFFB}"
  95. setpath "product" "win32arm64AppId" "{{67DEE444-3D04-4258-B92A-BC1F0FF2CAE4}"
  96. setpath "product" "win32UserAppId" "{{0FD05EB4-651E-4E78-A062-515204B47A3A}"
  97. setpath "product" "win32x64UserAppId" "{{2E1F05D1-C245-4562-81EE-28188DB6FD17}"
  98. setpath "product" "win32arm64UserAppId" "{{57FD70A5-1B8D-4875-9F40-C5553F094828}"
  99. setpath "product" "tunnelApplicationName" "codium-tunnel"
  100. setpath "product" "win32TunnelServiceMutex" "vscodium-tunnelservice"
  101. setpath "product" "win32TunnelMutex" "vscodium-tunnel"
  102. setpath "product" "win32ContextMenu.x64.clsid" "D910D5E6-B277-4F4A-BDC5-759A34EEE25D"
  103. setpath "product" "win32ContextMenu.arm64.clsid" "4852FC55-4A84-4EA1-9C86-D53BE3DF83C0"
  104. fi
  105. setpath_json "product" "tunnelApplicationConfig" '{}'
  106. jsonTmp=$( jq -s '.[0] * .[1]' product.json ../product.json )
  107. echo "${jsonTmp}" > product.json && unset jsonTmp
  108. cat product.json
  109. # }}}
  110. # include common functions
  111. . ../utils.sh
  112. # {{{ apply patches
  113. { set +x; } 2>/dev/null
  114. echo "APP_NAME=\"${APP_NAME}\""
  115. echo "APP_NAME_LC=\"${APP_NAME_LC}\""
  116. echo "BINARY_NAME=\"${BINARY_NAME}\""
  117. echo "GH_REPO_PATH=\"${GH_REPO_PATH}\""
  118. echo "ORG_NAME=\"${ORG_NAME}\""
  119. echo "TUNNEL_APP_NAME=\"${TUNNEL_APP_NAME}\""
  120. if [[ "${DISABLE_UPDATE}" == "yes" ]]; then
  121. mv ../patches/disable-update.patch.yet ../patches/disable-update.patch
  122. fi
  123. for file in ../patches/*.patch; do
  124. if [[ -f "${file}" ]]; then
  125. apply_patch "${file}"
  126. fi
  127. done
  128. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  129. for file in ../patches/insider/*.patch; do
  130. if [[ -f "${file}" ]]; then
  131. apply_patch "${file}"
  132. fi
  133. done
  134. fi
  135. if [[ -d "../patches/${OS_NAME}/" ]]; then
  136. for file in "../patches/${OS_NAME}/"*.patch; do
  137. if [[ -f "${file}" ]]; then
  138. apply_patch "${file}"
  139. fi
  140. done
  141. fi
  142. for file in ../patches/user/*.patch; do
  143. if [[ -f "${file}" ]]; then
  144. apply_patch "${file}"
  145. fi
  146. done
  147. set -x
  148. # }}}
  149. # {{{ install dependencies
  150. export ELECTRON_SKIP_BINARY_DOWNLOAD=1
  151. export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
  152. if [[ "${OS_NAME}" == "linux" ]]; then
  153. export VSCODE_SKIP_NODE_VERSION_CHECK=1
  154. if [[ "${npm_config_arch}" == "arm" ]]; then
  155. export npm_config_arm_version=7
  156. fi
  157. elif [[ "${OS_NAME}" == "windows" ]]; then
  158. if [[ "${npm_config_arch}" == "arm" ]]; then
  159. export npm_config_arm_version=7
  160. fi
  161. else
  162. if [[ "${CI_BUILD}" != "no" ]]; then
  163. clang++ --version
  164. fi
  165. fi
  166. mv .npmrc .npmrc.bak
  167. cp ../npmrc .npmrc
  168. for i in {1..5}; do # try 5 times
  169. if [[ "${CI_BUILD}" != "no" && "${OS_NAME}" == "osx" ]]; then
  170. CXX=clang++ npm ci && break
  171. else
  172. npm ci && break
  173. fi
  174. if [[ $i == 5 ]]; then
  175. echo "Npm install failed too many times" >&2
  176. exit 1
  177. fi
  178. echo "Npm install failed $i, trying again..."
  179. sleep $(( 15 * (i + 1)))
  180. done
  181. mv .npmrc.bak .npmrc
  182. # }}}
  183. # package.json
  184. cp package.json{,.bak}
  185. setpath "package" "version" "${RELEASE_VERSION%-insider}"
  186. replace 's|Microsoft Corporation|VSCodium|' package.json
  187. cp resources/server/manifest.json{,.bak}
  188. if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
  189. setpath "resources/server/manifest" "name" "VSCodium - Insiders"
  190. setpath "resources/server/manifest" "short_name" "VSCodium - Insiders"
  191. else
  192. setpath "resources/server/manifest" "name" "VSCodium"
  193. setpath "resources/server/manifest" "short_name" "VSCodium"
  194. fi
  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|Visual Studio Code|VSCodium|g' resources/linux/debian/control.template
  221. sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/debian/control.template
  222. sed -i 's|https://code.visualstudio.com|https://vscodium.com|' resources/linux/debian/control.template
  223. # code.spec.template
  224. sed -i 's|Microsoft Corporation|VSCodium Team|' resources/linux/rpm/code.spec.template
  225. 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
  226. sed -i 's|Visual Studio Code|VSCodium|' resources/linux/rpm/code.spec.template
  227. sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/VSCodium/vscodium#download-install|' resources/linux/rpm/code.spec.template
  228. sed -i 's|https://code.visualstudio.com|https://vscodium.com|' 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 ..