diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..486a232 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.zip filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 94eb7d2..51a7d02 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -85,6 +85,13 @@ jobs: cd VSCode-linux-${VSCODE_ARCH} tar czf ../VSCodium-linux-${VSCODE_ARCH}-${MS_TAG}.tar.gz . if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' + + - name: Move/rename build artifacts + run: | + cp out/*.AppImage* . + cp vscode/.build/linux/deb/*/deb/*.deb . + cp vscode/.build/linux/rpm/*/*.rpm . + if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Generate shasums run: ./sum.sh diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 352548e..5c91731 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -20,7 +20,13 @@ jobs: vscode_arch: [x64, ia32, arm64] steps: - - uses: actions/checkout@v2 + - name: Checkout github repo (+ download lfs dependencies) + uses: actions/checkout@v2 + with: + lfs: true + + - name: Checkout LFS objects + run: git lfs checkout - name: Setup Node.js environment uses: actions/setup-node@v1 @@ -82,6 +88,11 @@ jobs: mv vscode\\.build\\win32-${VSCODE_ARCH}\\system-setup\\VSCodeSetup.exe VSCodiumSetup-${VSCODE_ARCH}-${MS_TAG}.exe mv vscode\\.build\\win32-${VSCODE_ARCH}\\user-setup\\VSCodeSetup.exe VSCodiumUserSetup-${VSCODE_ARCH}-${MS_TAG}.exe mv vscode\\.build\\win32-${VSCODE_ARCH}\\archive\\VSCode-win32-${VSCODE_ARCH}.zip VSCodium-win32-${VSCODE_ARCH}-${MS_TAG}.zip + + if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then + mv build\\windows\\msi\\releasedir\\VSCodium-${VSCODE_ARCH}-${MS_TAG}.msi . + mv build\\windows\\msi\\releasedir\\VSCodium-${VSCODE_ARCH}-updates-disabled-${MS_TAG}.msi . + fi shell: bash if: env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' @@ -100,6 +111,7 @@ jobs: ./VSCodium*.zip ./VSCodiumUserSetup*.exe ./VSCodiumSetup*.exe + ./VSCodium*.msi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index d3953fb..1276e71 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ VS*/* out pkg2appimage-*.AppImage pkg2appimage.AppDir +build/windows/msi/releasedir +build/windows/rtf/Readme (Abridged).txt +build/windows/rtf/TXT to RTF Converter.exe diff --git a/build.sh b/build.sh index 76b72f5..0514525 100755 --- a/build.sh +++ b/build.sh @@ -22,18 +22,25 @@ if [[ "$SHOULD_BUILD" == "yes" ]]; then if [[ "$OS_NAME" == "osx" ]]; then yarn gulp "vscode-darwin-${VSCODE_ARCH}-min-ci" elif [[ "$OS_NAME" == "windows" ]]; then - cp LICENSE.txt LICENSE.rtf # windows build expects rtf license + . ../build/windows/rtf/make.sh + yarn gulp "vscode-win32-${VSCODE_ARCH}-min-ci" yarn gulp "vscode-win32-${VSCODE_ARCH}-code-helper" yarn gulp "vscode-win32-${VSCODE_ARCH}-inno-updater" yarn gulp "vscode-win32-${VSCODE_ARCH}-archive" yarn gulp "vscode-win32-${VSCODE_ARCH}-system-setup" yarn gulp "vscode-win32-${VSCODE_ARCH}-user-setup" + + if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then + . ../build/windows/msi/build.sh + . ../build/windows/msi/build-updates-disabled.sh + fi else # linux yarn gulp "vscode-linux-${VSCODE_ARCH}-min-ci" if [[ "$SKIP_LINUX_PACKAGES" != "True" ]]; then yarn gulp "vscode-linux-${VSCODE_ARCH}-build-deb" yarn gulp "vscode-linux-${VSCODE_ARCH}-build-rpm" + . ../create_appimage.sh fi fi diff --git a/build/build_windows.ps1 b/build/build_windows.ps1 index 963819a..d87d6c0 100755 --- a/build/build_windows.ps1 +++ b/build/build_windows.ps1 @@ -3,13 +3,4 @@ # first so `bash` is the one installed with `git`, avoid conflict with WSL $env:Path = "C:\Program Files\Git\bin;" + $env:Path -Remove-Item -Recurse -Force VSCode* - -bash ./get_repo.sh - -$Env:SHOULD_BUILD = 'yes' -$Env:CI_BUILD = 'no' -$Env:OS_NAME = 'windows' -$Env:VSCODE_ARCH = 'x64' - -bash ./build.sh +bash ./build/build_windows.sh diff --git a/build/build_windows.sh b/build/build_windows.sh index c6e2533..cc8b661 100755 --- a/build/build_windows.sh +++ b/build/build_windows.sh @@ -1,10 +1,11 @@ #!/bin/bash -# to run with WSL: wsl ./build/build_windows.sh +# to run with Bash: "C:\Program Files\Git\bin\bash.exe" ./build/build_windows.sh rm -rf VSCode* rm -rf vscode +rm -rf build/windows/msi/releasedir -./get_repo.sh +. get_repo.sh -SHOULD_BUILD=yes CI_BUILD=no OS_NAME=windows VSCODE_ARCH=x64 ./build.sh +SHOULD_BUILD=yes CI_BUILD=no OS_NAME=windows VSCODE_ARCH=x64 . build.sh diff --git a/build/windows/msi/build-updates-disabled.sh b/build/windows/msi/build-updates-disabled.sh new file mode 100644 index 0000000..3c0511d --- /dev/null +++ b/build/windows/msi/build-updates-disabled.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -ex + +CALLER_DIR=$( pwd ) + +cd "$( dirname "${BASH_SOURCE[0]}" )" + +SCRIPT_DIR=$( pwd ) + +cd ../../../VSCode-win32-${VSCODE_ARCH}/resources/app + +cp product.json product.json.bak +cat product.json.bak | jq "del(.updateUrl)" > product.json +rm -f product.json.bak + +cd "${SCRIPT_DIR}" + +. build.sh "updates-disabled" + +cd "${CALLER_DIR}" diff --git a/build/windows/msi/build.sh b/build/windows/msi/build.sh new file mode 100644 index 0000000..c71e719 --- /dev/null +++ b/build/windows/msi/build.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +set -ex + +CALLER_DIR=$( pwd ) + +cd "$( dirname "${BASH_SOURCE[0]}" )" + +WIN_SDK_MAJOR_VERSION="10" +WIN_SDK_FULL_VERSION="10.0.17763.0" + +PRODUCT_NAME="VSCodium" +PRODUCT_SKU="vscodium" +PRODUCT_ID=$( powershell.exe -command "[guid]::NewGuid().ToString().ToUpper()" ) +PRODUCT_ID="${PRODUCT_ID%%[[:cntrl:]]}" + +CULTURE="en-us" +LANGIDS="1033" + +SETUP_RELEASE_DIR=".\\releasedir" +SETUP_RESOURCES_DIR=".\\resources" +BINARY_DIR="..\\..\\..\\VSCode-win32-${VSCODE_ARCH}" +ICON_DIR="..\\..\\..\\src\\resources\\win32" +LICENSE_DIR="..\\..\\..\\vscode" +PROGRAM_FILES_86=$( env | sed -n 's/^ProgramFiles(x86)=//p' ) + +if [[ -z "$1" ]]; then + OUTPUT_BASE_FILENAME="${PRODUCT_NAME}-${VSCODE_ARCH}-${MS_TAG}" +else + OUTPUT_BASE_FILENAME="${PRODUCT_NAME}-${VSCODE_ARCH}-$1-${MS_TAG}" +fi + +if [[ "${VSCODE_ARCH}" == "ia32" ]]; then + export PLATFORM="x86" +else + export PLATFORM="${VSCODE_ARCH}" +fi + + +BuildSetupTranslationTransform() { + local CULTURE=$1 + local LANGID=$2 + + LANGIDS="${LANGIDS},${LANGID}" + + echo "Building setup translation for culture \"${CULTURE}\" with LangID \"${LANGID}\"..." + + "${WIX}bin\\light.exe" vscodium.wixobj "Files-${OUTPUT_BASE_FILENAME}.wixobj" -ext WixUIExtension -ext WixUtilExtension -ext WixNetFxExtension -spdb -cc "${TEMP}\\vscodium-cab-cache\\${PLATFORM}" -reusecab -out "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi" -loc "i18n\\${PRODUCT_SKU}.${CULTURE}.wxl" -cultures:"${CULTURE}" -sice:ICE60 -sice:ICE69 + + cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\WiLangId.vbs" ${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi Product "${LANGID}" + + "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\x86\\msitran" -g "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.mst" + + cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\wisubstg.vbs" ${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi ${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.mst "${LANGID}" + + cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\wisubstg.vbs" ${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi + + rm -f "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.msi" + rm -f "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.${CULTURE}.mst" +} + +"${WIX}bin\\heat.exe" dir "${BINARY_DIR}" -out "Files-${OUTPUT_BASE_FILENAME}.wxs" -t vscodium.xsl -gg -sfrag -scom -sreg -srd -ke -cg "AppFiles" -var var.AppName -var var.ProductVersion -var var.IconDir -var var.LicenseDir -var var.BinaryDir -dr APPLICATIONFOLDER -platform "${PLATFORM}" +"${WIX}bin\\candle.exe" -arch "${PLATFORM}" vscodium.wxs "Files-${OUTPUT_BASE_FILENAME}.wxs" -ext WixUIExtension -ext WixUtilExtension -ext WixNetFxExtension -dAppName=${PRODUCT_NAME} -dProductVersion="${MS_TAG}" -dProductId="${PRODUCT_ID}" -dBinaryDir="${BINARY_DIR}" -dIconDir="${ICON_DIR}" -dLicenseDir="${LICENSE_DIR}" -dSetupResourcesDir="${SETUP_RESOURCES_DIR}" -dCulture="${CULTURE}" +"${WIX}bin\\light.exe" vscodium.wixobj "Files-${OUTPUT_BASE_FILENAME}.wixobj" -ext WixUIExtension -ext WixUtilExtension -ext WixNetFxExtension -spdb -cc "${TEMP}\\vscodium-cab-cache\\${PLATFORM}" -out "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi" -loc "i18n\\${PRODUCT_SKU}.${CULTURE}.wxl" -cultures:"${CULTURE}" -sice:ICE60 -sice:ICE69 + +BuildSetupTranslationTransform de-de 1031 +BuildSetupTranslationTransform es-es 3082 +BuildSetupTranslationTransform fr-fr 1036 +BuildSetupTranslationTransform it-it 1040 +# WixUI_Advanced bug: https://github.com/wixtoolset/issues/issues/5909 +# BuildSetupTranslationTransform ja-jp 1041 +BuildSetupTranslationTransform ko-kr 1042 +BuildSetupTranslationTransform ru-ru 1049 +BuildSetupTranslationTransform zh-cn 2052 +BuildSetupTranslationTransform zh-tw 1028 + +# Add all supported languages to MSI Package attribute +cscript "${PROGRAM_FILES_86}\\Windows Kits\\${WIN_SDK_MAJOR_VERSION}\\bin\\${WIN_SDK_FULL_VERSION}\\${PLATFORM}\\WiLangId.vbs" "${SETUP_RELEASE_DIR}\\${OUTPUT_BASE_FILENAME}.msi" Package "${LANGIDS}" + +# Remove files we do not need any longer. +rm -rf "${TEMP}\\vscodium-cab-cache" +rm -f "Files-${OUTPUT_BASE_FILENAME}.wxs" +rm -f "Files-${OUTPUT_BASE_FILENAME}.wixobj" +rm -f "vscodium.wixobj" + +cd "${CALLER_DIR}" diff --git a/build/windows/msi/i18n/vscodium.de-de.wxl b/build/windows/msi/i18n/vscodium.de-de.wxl new file mode 100644 index 0000000..b33bdd0 --- /dev/null +++ b/build/windows/msi/i18n/vscodium.de-de.wxl @@ -0,0 +1,25 @@ + + + 1031 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Paket mit VSCodium + Startmenü-Verknüpfung + Startmenü-Symbol erstellen. + Desktop-Verknüpfung + Desktop-Symbol erstellen. + Dateizuordnungen + VSCodium als Editor für unterstützte Dateitypen registrieren. + Dateikontextmenü + Aktion "Mit VSCodium öffnen" dem Dateikontextmenü von Windows-Explorer hinzufügen. + Verzeichniskontextmenü + Aktion "Mit VSCodium öffnen" dem Verzeichniskontextmenü von Windows-Explorer hinzufügen. + Zu PATH hinzufügen + VSCodium zur PATH Variable hinzufügen. Nach dem Neustart verfügbar. + VSCodium ausführen + Eine neuere Version von VSCodium ist bereits installiert. + Diese Anwendung erfordert .NET Framework 4.5.2 oder höher. Bitte installieren Sie .NET Framework und führen Sie dieses Installationsprogramm erneut aus. + Windows 7 oder neuer ist erforderlich. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.en-us.wxl b/build/windows/msi/i18n/vscodium.en-us.wxl new file mode 100644 index 0000000..6456bf6 --- /dev/null +++ b/build/windows/msi/i18n/vscodium.en-us.wxl @@ -0,0 +1,25 @@ + + + 1033 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.es-es.wxl b/build/windows/msi/i18n/vscodium.es-es.wxl new file mode 100644 index 0000000..a6eaa9e --- /dev/null +++ b/build/windows/msi/i18n/vscodium.es-es.wxl @@ -0,0 +1,25 @@ + + + 3082 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.fr-fr.wxl b/build/windows/msi/i18n/vscodium.fr-fr.wxl new file mode 100644 index 0000000..ba46b09 --- /dev/null +++ b/build/windows/msi/i18n/vscodium.fr-fr.wxl @@ -0,0 +1,25 @@ + + + 1036 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.it-it.wxl b/build/windows/msi/i18n/vscodium.it-it.wxl new file mode 100644 index 0000000..201e11a --- /dev/null +++ b/build/windows/msi/i18n/vscodium.it-it.wxl @@ -0,0 +1,25 @@ + + + 1040 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.ja-jp.wxl b/build/windows/msi/i18n/vscodium.ja-jp.wxl new file mode 100644 index 0000000..9e127ad --- /dev/null +++ b/build/windows/msi/i18n/vscodium.ja-jp.wxl @@ -0,0 +1,25 @@ + + + 1041 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.ko-kr.wxl b/build/windows/msi/i18n/vscodium.ko-kr.wxl new file mode 100644 index 0000000..1c7121c --- /dev/null +++ b/build/windows/msi/i18n/vscodium.ko-kr.wxl @@ -0,0 +1,25 @@ + + + 1042 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.ru-ru.wxl b/build/windows/msi/i18n/vscodium.ru-ru.wxl new file mode 100644 index 0000000..1668fa2 --- /dev/null +++ b/build/windows/msi/i18n/vscodium.ru-ru.wxl @@ -0,0 +1,25 @@ + + + 1049 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.zh-cn.wxl b/build/windows/msi/i18n/vscodium.zh-cn.wxl new file mode 100644 index 0000000..ff4714b --- /dev/null +++ b/build/windows/msi/i18n/vscodium.zh-cn.wxl @@ -0,0 +1,25 @@ + + + 2052 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/i18n/vscodium.zh-tw.wxl b/build/windows/msi/i18n/vscodium.zh-tw.wxl new file mode 100644 index 0000000..78e1b9d --- /dev/null +++ b/build/windows/msi/i18n/vscodium.zh-tw.wxl @@ -0,0 +1,25 @@ + + + 1028 + VSCodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + https://github.com/VSCodium/vscodium + Package with VSCodium + Start Menu shortcut + Create a start menu icon. + Desktop shortcut + Create a desktop icon. + File Associations + Register VSCodium as an editor for supported file types. + Files context menu + Add "Open with VSCodium" action to Windows Explorer file contect menu. + Directory context menu + Add "Open with VSCodium" action to Windows Explorer directory contect menu. + Add to PATH + Add VSCodium to PATH environment variable. Available after restart. + Launch VSCodium + Newer version of VSCodium is already installed. + This application requires .NET Framework 4.5.2 or later. Please install the .NET Framework then run this installer again. + Windows 7 or later is required. + \ No newline at end of file diff --git a/build/windows/msi/includes/vscodium-variables.wxi b/build/windows/msi/includes/vscodium-variables.wxi new file mode 100644 index 0000000..13968a5 --- /dev/null +++ b/build/windows/msi/includes/vscodium-variables.wxi @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/windows/msi/resources/wix-banner.bmp b/build/windows/msi/resources/wix-banner.bmp new file mode 100644 index 0000000..436e0f7 Binary files /dev/null and b/build/windows/msi/resources/wix-banner.bmp differ diff --git a/build/windows/msi/resources/wix-dialog.bmp b/build/windows/msi/resources/wix-dialog.bmp new file mode 100644 index 0000000..3fbe656 Binary files /dev/null and b/build/windows/msi/resources/wix-dialog.bmp differ diff --git a/build/windows/msi/vscodium.wxs b/build/windows/msi/vscodium.wxs new file mode 100644 index 0000000..f7b10a2 --- /dev/null +++ b/build/windows/msi/vscodium.wxs @@ -0,0 +1,1507 @@ + + + + + + + + + + + + + + + + + + + + + + + = 601]]> + + + + + + + + + + + + + + + + NEWPRODUCTFOUND + + + + + + + NEWPRODUCTFOUND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed + + + + + + + + diff --git a/build/windows/msi/vscodium.xsl b/build/windows/msi/vscodium.xsl new file mode 100644 index 0000000..787a224 --- /dev/null +++ b/build/windows/msi/vscodium.xsl @@ -0,0 +1,468 @@ + + + + + + + + + + + + + + + VSCODIUM.EXE + + + + + + + VSCODIUM.EXE + + + + + + + + + BOWER.ICO + + + + + + + BOWER.ICO + + + + + + + + + C.ICO + + + + + + + C.ICO + + + + + + + + + CONFIG.ICO + + + + + + + CONFIG.ICO + + + + + + + + + CPP.ICO + + + + + + + CPP.ICO + + + + + + + + + CSHARP.ICO + + + + + + + CSHARP.ICO + + + + + + + + + CSS.ICO + + + + + + + CSS.ICO + + + + + + + + + DEFAULT.ICO + + + + + + + DEFAULT.ICO + + + + + + + + + GO.ICO + + + + + + + GO.ICO + + + + + + + + + HTML.ICO + + + + + + + HTML.ICO + + + + + + + + + JADE.ICO + + + + + + + JADE.ICO + + + + + + + + + JAVA.ICO + + + + + + + JAVA.ICO + + + + + + + + + JAVASCRIPT.ICO + + + + + + + JAVASCRIPT.ICO + + + + + + + + + JSON.ICO + + + + + + + JSON.ICO + + + + + + + + + LESS.ICO + + + + + + + LESS.ICO + + + + + + + + + MARKDOWN.ICO + + + + + + + MARKDOWN.ICO + + + + + + + + + PHP.ICO + + + + + + + PHP.ICO + + + + + + + + + POWERSHELL.ICO + + + + + + + POWERSHELL.ICO + + + + + + + + + PYTHON.ICO + + + + + + + PYTHON.ICO + + + + + + + + + REACT.ICO + + + + + + + REACT.ICO + + + + + + + + + RUBY.ICO + + + + + + + RUBY.ICO + + + + + + + + + SASS.ICO + + + + + + + SASS.ICO + + + + + + + + + SHELL.ICO + + + + + + + SHELL.ICO + + + + + + + + + SQL.ICO + + + + + + + SQL.ICO + + + + + + + + + TYPESCRIPT.ICO + + + + + + + TYPESCRIPT.ICO + + + + + + + + + VUE.ICO + + + + + + + VUE.ICO + + + + + + + + + XML.ICO + + + + + + + XML.ICO + + + + + + + + + YAML.ICO + + + + + + + YAML.ICO + + + + + + + + + + + + diff --git a/build/windows/rtf/TXT2RTF.zip b/build/windows/rtf/TXT2RTF.zip new file mode 100644 index 0000000..d73eb48 --- /dev/null +++ b/build/windows/rtf/TXT2RTF.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3eac997fba9d3d5596c503a826fe5d54c87b1cf899a790b6d077e4d196bd5e9 +size 373978 diff --git a/build/windows/rtf/make.sh b/build/windows/rtf/make.sh new file mode 100644 index 0000000..4f19bf1 --- /dev/null +++ b/build/windows/rtf/make.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -ex + +CALLER_DIR=$( pwd ) + +cd "$( dirname "${BASH_SOURCE[0]}" )" + +7z x -y TXT2RTF.zip + +LICENSE=$( powershell.exe -Command "[System.IO.Path]::GetFullPath( '../../../vscode/LICENSE.txt' )" ) + +"./TXT to RTF Converter.exe" "${LICENSE}" + +cd "${CALLER_DIR}" diff --git a/check_tags.sh b/check_tags.sh index 70b1932..5c2a40d 100755 --- a/check_tags.sh +++ b/check_tags.sh @@ -2,120 +2,131 @@ set -e -REPOSITORY=${GITHUB_REPOSITORY:-"VSCodium/vscodium"} -GITHUB_RESPONSE=$(curl -s -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/$REPOSITORY/releases/tags/$MS_TAG) -VSCODIUM_ASSETS=$(echo $GITHUB_RESPONSE | jq '.assets') +REPOSITORY="${GITHUB_REPOSITORY:-"VSCodium/vscodium"}" +GITHUB_RESPONSE=$( curl -s -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/$REPOSITORY/releases/tags/$MS_TAG) +VSCODIUM_ASSETS=$( echo $GITHUB_RESPONSE | jq -c '.assets | map(.name)' ) + +contains() { + # add " to match the end of a string so any hashs won't be matched by mistake + echo $VSCODIUM_ASSETS | grep "$1\"" +} # if we just don't have the github token, get out fast if [ "$GITHUB_TOKEN" != "" ]; then if [ "$VSCODIUM_ASSETS" != "null" ]; then + # macos if [[ "$OS_NAME" == "osx" ]]; then - HAVE_MAC=$(echo $VSCODIUM_ASSETS | jq --arg suffix "darwin-$VSCODE_ARCH-$MS_TAG.zip" 'map(.name) | contains([$suffix])') - if [[ "$HAVE_MAC" != "true" ]]; then + if [[ -z $( contains "darwin-$VSCODE_ARCH-$MS_TAG.zip" ) ]]; then echo "Building on Mac because we have no ZIP" export SHOULD_BUILD="yes" fi elif [[ "$OS_NAME" == "windows" ]]; then + # windows-arm64 if [[ $VSCODE_ARCH == "arm64" ]]; then - HAVE_ARM64_SYS=$(echo $VSCODIUM_ASSETS | jq --arg suffix "VSCodiumSetup-$VSCODE_ARCH-$MS_TAG.exe" 'map(.name) | contains([$suffix])') - HAVE_ARM64_USR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "UserSetup-$VSCODE_ARCH-$MS_TAG.exe" 'map(.name) | contains([$suffix])') - HAVE_ARM64_ZIP=$(echo $VSCODIUM_ASSETS | jq --arg suffix "win32-$VSCODE_ARCH-$MS_TAG.zip" 'map(.name) | contains([$suffix])') - if [[ "$HAVE_ARM64_SYS" != "true" ]]; then + if [[ -z $( contains "VSCodiumSetup-$VSCODE_ARCH-$MS_TAG.exe" ) ]]; then echo "Building on Windows arm64 because we have no system setup" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_ARM64_USR" != "true" ]]; then + if [[ -z $( contains "UserSetup-$VSCODE_ARCH-$MS_TAG.exe" ) ]]; then echo "Building on Windows arm64 because we have no user setup" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_ARM64_ZIP" != "true" ]]; then + if [[ -z $( contains "win32-$VSCODE_ARCH-$MS_TAG.zip" ) ]]; then echo "Building on Windows arm64 because we have no zip" export SHOULD_BUILD="yes" fi if [[ "$SHOULD_BUILD" != "yes" ]]; then echo "Already have all the Windows arm64 builds" fi + # windows-ia32 elif [[ $VSCODE_ARCH == "ia32" ]]; then - HAVE_IA32_SYS=$(echo $VSCODIUM_ASSETS | jq --arg suffix "VSCodiumSetup-$VSCODE_ARCH-$MS_TAG.exe" 'map(.name) | contains([$suffix])') - HAVE_IA32_USR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "UserSetup-$VSCODE_ARCH-$MS_TAG.exe" 'map(.name) | contains([$suffix])') - HAVE_IA32_ZIP=$(echo $VSCODIUM_ASSETS | jq --arg suffix "win32-$VSCODE_ARCH-$MS_TAG.zip" 'map(.name) | contains([$suffix])') - if [[ "$HAVE_IA32_SYS" != "true" ]]; then + if [[ -z $( contains "VSCodiumSetup-$VSCODE_ARCH-$MS_TAG.exe" ) ]]; then echo "Building on Windows ia32 because we have no system setup" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_IA32_USR" != "true" ]]; then + if [[ -z $( contains "UserSetup-$VSCODE_ARCH-$MS_TAG.exe" ) ]]; then echo "Building on Windows ia32 because we have no user setup" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_IA32_ZIP" != "true" ]]; then + if [[ -z $( contains "win32-$VSCODE_ARCH-$MS_TAG.zip" ) ]]; then echo "Building on Windows ia32 because we have no zip" export SHOULD_BUILD="yes" fi + if [[ -z $( contains "VSCodium-$VSCODE_ARCH-$MS_TAG.msi" ) ]]; then + echo "Building on Windows ia32 because we have no msi" + export SHOULD_BUILD="yes" + fi + if [[ -z $( contains "VSCodium-$VSCODE_ARCH-updates-disabled-$MS_TAG.msi" ) ]]; then + echo "Building on Windows ia32 because we have no updates-disabled msi" + export SHOULD_BUILD="yes" + fi if [[ "$SHOULD_BUILD" != "yes" ]]; then echo "Already have all the Windows ia32 builds" fi - else # Windows x64 - HAVE_X64_SYS=$(echo $VSCODIUM_ASSETS | jq --arg suffix "VSCodiumSetup-$VSCODE_ARCH-$MS_TAG.exe" 'map(.name) | contains([$suffix])') - HAVE_X64_USR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "UserSetup-$VSCODE_ARCH-$MS_TAG.exe" 'map(.name) | contains([$suffix])') - HAVE_X64_ZIP=$(echo $VSCODIUM_ASSETS | jq --arg suffix "win32-$VSCODE_ARCH-$MS_TAG.zip" 'map(.name) | contains([$suffix])') - if [[ "$HAVE_X64_SYS" != "true" ]]; then + # windows-x64 + else + if [[ -z $( contains "VSCodiumSetup-$VSCODE_ARCH-$MS_TAG.exe" ) ]]; then echo "Building on Windows x64 because we have no system setup" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_X64_USR" != "true" ]]; then + if [[ -z $( contains "UserSetup-$VSCODE_ARCH-$MS_TAG.exe" ) ]]; then echo "Building on Windows x64 because we have no user setup" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_X64_ZIP" != "true" ]]; then + if [[ -z $( contains "win32-$VSCODE_ARCH-$MS_TAG.zip" ) ]]; then echo "Building on Windows x64 because we have no zip" export SHOULD_BUILD="yes" fi + if [[ -z $( contains "VSCodium-$VSCODE_ARCH-$MS_TAG.msi" ) ]]; then + echo "Building on Windows x64 because we have no msi" + export SHOULD_BUILD="yes" + fi + if [[ -z $( contains "VSCodium-$VSCODE_ARCH-updates-disabled-$MS_TAG.msi" ) ]]; then + echo "Building on Windows x64 because we have no updates-disabled msi" + export SHOULD_BUILD="yes" + fi if [[ "$SHOULD_BUILD" != "yes" ]]; then echo "Already have all the Windows x64 builds" fi fi elif [[ "$OS_NAME" == "linux" ]]; then + # linux-arm64 if [[ $VSCODE_ARCH == "arm64" ]]; then - HAVE_ARM64_DEB=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["arm64.deb"])') - HAVE_ARM64_TAR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "arm64-$MS_TAG.tar.gz" 'map(.name) | contains([$suffix])') - if [[ "$HAVE_ARM64_DEB" != "true" ]]; then + if [[ -z $( contains "arm64.deb" ) ]]; then echo "Building on Linux arm64 because we have no DEB" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_ARM64_TAR" != "true" ]]; then + if [[ -z $( contains "arm64-$MS_TAG.tar.g" ) ]]; then echo "Building on Linux arm64 because we have no TAR" export SHOULD_BUILD="yes" fi if [[ "$SHOULD_BUILD" != "yes" ]]; then echo "Already have all the Linux arm64 builds" fi + # linux-armhf elif [[ $VSCODE_ARCH == "armhf" ]]; then - HAVE_ARM_DEB=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["armhf.deb"])') - HAVE_ARM_TAR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "armhf-$MS_TAG.tar.gz" 'map(.name) | contains([$suffix])') - if [[ "$HAVE_ARM_DEB" != "true" ]]; then + if [[ -z $( contains "armhf.deb" ) ]]; then echo "Building on Linux arm because we have no DEB" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_ARM_TAR" != "true" ]]; then + if [[ -z $( contains "armhf-${MS_TAG}.tar.gz" ) ]]; then echo "Building on Linux arm because we have no TAR" export SHOULD_BUILD="yes" fi if [[ "$SHOULD_BUILD" != "yes" ]]; then echo "Already have all the Linux arm builds" fi - else # Linux x64 - HAVE_64_RPM=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["x86_64.rpm"])') - HAVE_64_DEB=$(echo $VSCODIUM_ASSETS | jq 'map(.name) | contains(["amd64.deb"])') - HAVE_64_TAR=$(echo $VSCODIUM_ASSETS | jq --arg suffix "x64-$MS_TAG.tar.gz" 'map(.name) | contains([$suffix])') - if [[ "$HAVE_64_RPM" != "true" ]]; then + # linux-x64 + else + if [[ -z $( contains "x86_64.rpm" ) ]]; then echo "Building on Linux x64 because we have no RPM" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_64_DEB" != "true" ]]; then + if [[ -z $( contains "amd64.deb" ) ]]; then echo "Building on Linux x64 because we have no DEB" export SHOULD_BUILD="yes" fi - if [[ "$HAVE_64_TAR" != "true" ]]; then + if [[ -z $( contains "x64-$MS_TAG.tar.gz" ) ]]; then echo "Building on Linux x64 because we have no TAR" export SHOULD_BUILD="yes" fi diff --git a/docs/build.md b/docs/build.md index d0c8f2a..2facca7 100644 --- a/docs/build.md +++ b/docs/build.md @@ -32,6 +32,8 @@ - powershell - sed +- 7z +- [WiX Toolset](http://wixtoolset.org/releases/) ## Build Scripts diff --git a/icons/build_icons.sh b/icons/build_icons.sh index 4f97df7..81a1ca9 100755 --- a/icons/build_icons.sh +++ b/icons/build_icons.sh @@ -134,6 +134,14 @@ build_win32() { convert -size 138x140 xc:white "${SRC_PREFIX}src/resources/win32/inno-small-250.bmp" composite -size 116x -gravity center icons/codium_only.svg "${SRC_PREFIX}src/resources/win32/inno-small-250.bmp" "${SRC_PREFIX}src/resources/win32/inno-small-250.bmp" fi + if [ ! -f "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp" ]; then + convert -size 493x58 xc:white "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp" + composite -geometry +438+6 \( icons/codium_only.svg -resize 50x50 \) "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp" "${SRC_PREFIX}build/windows/msi/resources/wix-banner.bmp" + fi + if [ ! -f "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp" ]; then + convert -size 493x312 xc:white "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp" + composite -geometry +22+152 \( icons/codium_only.svg -resize 120x90 \) "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp" "${SRC_PREFIX}build/windows/msi/resources/wix-dialog.bmp" + fi } if [ "$0" == "$BASH_SOURCE" ]; diff --git a/prepare_vscode.sh b/prepare_vscode.sh index 8f68e99..50fe74e 100755 --- a/prepare_vscode.sh +++ b/prepare_vscode.sh @@ -3,6 +3,8 @@ set -e cp -rp src/* vscode/ +cp -f LICENSE vscode/LICENSE.txt + cd vscode || exit ../update_settings.sh diff --git a/sum.sh b/sum.sh index f1dc057..cd0c37c 100755 --- a/sum.sh +++ b/sum.sh @@ -17,11 +17,8 @@ if [[ "$SHOULD_BUILD" == "yes" ]]; then sum_file VSCodiumSetup-*.exe sum_file VSCodiumUserSetup-*.exe sum_file VSCodium-win32-*.zip + sum_file VSCodium-*.msi else # linux - cp out/*.AppImage* . - cp vscode/.build/linux/deb/*/deb/*.deb . - cp vscode/.build/linux/rpm/*/*.rpm . - sum_file VSCodium-*.AppImage sum_file VSCodium-linux*.tar.gz sum_file *.deb diff --git a/update_version.sh b/update_version.sh index c9974f6..f68c112 100755 --- a/update_version.sh +++ b/update_version.sh @@ -115,6 +115,20 @@ elif [[ "$OS_NAME" == "windows" ]]; then VERSION_PATH="win32/${VSCODE_ARCH}/archive" JSON="$(generateJson ${ASSET_NAME})" updateLatestVersion "$VERSION_PATH" "$JSON" + + if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then + # msi + ASSET_NAME=VSCodium-${VSCODE_ARCH}-${MS_TAG}.msi + VERSION_PATH="win32/${VSCODE_ARCH}/msi" + JSON="$(generateJson ${ASSET_NAME})" + updateLatestVersion "$VERSION_PATH" "$JSON" + + # updates-disabled msi + ASSET_NAME=VSCodium-${VSCODE_ARCH}-updates-disabled-${MS_TAG}.msi + VERSION_PATH="win32/${VSCODE_ARCH}/msi-updates-disabled" + JSON="$(generateJson ${ASSET_NAME})" + updateLatestVersion "$VERSION_PATH" "$JSON" + fi else # linux # update service links to tar.gz file # see https://update.code.visualstudio.com/api/update/linux-x64/stable/VERSION