Last active
November 20, 2025 12:07
-
-
Save svor/ff68371ab9448275dc655e29b5632f24 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [ | |
| { | |
| "id": "donjayamanne.githistory", | |
| "version": "0.6.20" | |
| }, | |
| { | |
| "id": "yzane.markdown-pdf", | |
| "version": "1.5.0" | |
| }, | |
| { | |
| "id": "DavidAnson.vscode-markdownlint", | |
| "version": "0.60.0" | |
| }, | |
| { | |
| "id": "robocorp.robotframework-lsp", | |
| "version": "1.13.0" | |
| }, | |
| { | |
| "id": "shardulm94.trailing-spaces", | |
| "version": "0.4.1" | |
| }, | |
| { | |
| "id": "adamhartford.vscode-base64", | |
| "version": "0.1.0" | |
| }, | |
| { | |
| "id": "usernamehw.indent-one-space", | |
| "version": "0.3.0" | |
| }, | |
| { | |
| "id": "redhat.vscode-xml", | |
| "version": "0.29.0" | |
| }, | |
| { | |
| "id": "redhat.vscode-yaml", | |
| "version": "1.18.0" | |
| }, | |
| { | |
| "id": "vscode.github-authentication", | |
| "version": "1.95.3" | |
| }, | |
| { | |
| "id": "GitHub.vscode-pull-request-github", | |
| "version": "0.108.0" | |
| }, | |
| { | |
| "id": "vscode.typescript-language-features", | |
| "version": "1.95.3" | |
| }, | |
| { | |
| "id": "llvm-vs-code-extensions.vscode-clangd", | |
| "version": "0.2.0" | |
| }, | |
| { | |
| "id": "eclipse-cdt.cdt-gdb-vscode", | |
| "version": "2.1.0" | |
| }, | |
| { | |
| "id": "bmewburn.vscode-intelephense-client", | |
| "version": "1.14.4" | |
| }, | |
| { | |
| "id": "ms-python.python", | |
| "version": "2025.4.0" | |
| }, | |
| { | |
| "id": "ms-python.black-formatter", | |
| "version": "2024.6.0" | |
| }, | |
| { | |
| "id": "ms-python.debugpy", | |
| "version": "2025.6.0" | |
| }, | |
| { | |
| "id": "ms-python.pylint", | |
| "version": "2024.2.0" | |
| }, | |
| { | |
| "id": "ms-python.isort", | |
| "version": "2023.11.0-dev" | |
| }, | |
| { | |
| "id": "ms-toolsai.jupyter", | |
| "version": "2025.3.0" | |
| }, | |
| { | |
| "id": "ms-toolsai.jupyter-keymap", | |
| "version": "1.1.2" | |
| }, | |
| { | |
| "id": "ms-toolsai.jupyter-renderers", | |
| "version": "1.3.0" | |
| }, | |
| { | |
| "id": "ms-toolsai.vscode-jupyter-cell-tags", | |
| "version": "0.1.9" | |
| }, | |
| { | |
| "id": "ms-toolsai.vscode-jupyter-slideshow", | |
| "version": "0.1.6" | |
| }, | |
| { | |
| "id": "golang.Go", | |
| "version": "0.48.0" | |
| }, | |
| { | |
| "id": "ms-kubernetes-tools.vscode-kubernetes-tools", | |
| "version": "1.3.25" | |
| }, | |
| { | |
| "id": "redhat.java", | |
| "version": "1.43.1" | |
| }, | |
| { | |
| "id": "vscjava.vscode-java-debug", | |
| "version": "0.58.2" | |
| }, | |
| { | |
| "id": "vscjava.vscode-java-test", | |
| "version": "0.43.1" | |
| }, | |
| { | |
| "id": "redhat.vscode-microprofile", | |
| "version": "0.14.0" | |
| }, | |
| { | |
| "id": "vscode.html-language-features", | |
| "version": "1.95.3" | |
| }, | |
| { | |
| "id": "redhat.vscode-quarkus", | |
| "version": "1.21.0" | |
| }, | |
| { | |
| "id": "redhat.fabric8-analytics", | |
| "version": "0.9.6" | |
| }, | |
| { | |
| "id": "redhat.vscode-redhat-account", | |
| "version": "0.2.0" | |
| }, | |
| { | |
| "id": "redhat.vscode-openshift-connector", | |
| "version": "1.20.0" | |
| }, | |
| { | |
| "id": "xdebug.php-debug", | |
| "version": "1.36.0" | |
| }, | |
| { | |
| "id": "ms-dotnettools.vscode-dotnet-runtime", | |
| "version": "2.3.6" | |
| }, | |
| { | |
| "id": "muhammad-sammy.csharp", | |
| "version": "2.84.19" | |
| }, | |
| { | |
| "id": "SonarSource.sonarlint-vscode", | |
| "version": "4.27.0" | |
| }, | |
| { | |
| "id": "vscode.git-base", | |
| "version": "1.95.3" | |
| }, | |
| { | |
| "id": "vscode.git", | |
| "version": "1.95.3" | |
| }, | |
| { | |
| "id": "dbaeumer.vscode-eslint", | |
| "version": "3.0.10" | |
| }, | |
| { | |
| "id": "redhat.vscode-commons", | |
| "version": "0.0.6" | |
| }, | |
| { | |
| "id": "atlassian.atlascode", | |
| "version": "3.8.6" | |
| }, | |
| { | |
| "id": "JFrog.jfrog-vscode-extension", | |
| "version": "2.14.0" | |
| }, | |
| { | |
| "id": "SonatypeCommunity.vscode-iq-plugin", | |
| "version": "1.3.4" | |
| }, | |
| { | |
| "id": "GitLab.gitlab-workflow", | |
| "version": "6.35.0" | |
| }, | |
| { | |
| "id": "timonwong.shellcheck", | |
| "version": "0.38.1" | |
| }, | |
| { | |
| "id": "redhat.ansible", | |
| "version": "25.7.2" | |
| }, | |
| { | |
| "id": "vscode.npm", | |
| "version": "1.95.3" | |
| }, | |
| { | |
| "id": "esbenp.prettier-vscode", | |
| "version": "11.0.0" | |
| }, | |
| { | |
| "id": "eamodio.gitlens", | |
| "version": "17.3.1" | |
| }, | |
| { | |
| "id": "Continue.continue", | |
| "version": "1.0.19" | |
| }, | |
| { | |
| "id": "typefox.open-collaboration-tools", | |
| "version": "0.3.4" | |
| }, | |
| { | |
| "id": "cnshenj.vscode-task-manager", | |
| "version": "1.0.0" | |
| }, | |
| { | |
| "id": "Kelvin.vscode-sshfs", | |
| "version": "1.26.1" | |
| }, | |
| { | |
| "id": "mongodb.mongodb-vscode", | |
| "version": "1.13.3" | |
| }, | |
| { | |
| "id": "RooVeterinaryInc.roo-cline", | |
| "version": "3.23.16" | |
| }, | |
| { | |
| "id": "saoudrizwan.claude-dev", | |
| "version": "3.19.7" | |
| }, | |
| { | |
| "id": "RooVeterinaryInc.roo-cline", | |
| "version": "3.32.0" | |
| }, | |
| { | |
| "id": "saoudrizwan.claude-dev", | |
| "version": "3.37.1" | |
| }, | |
| { | |
| "id": "Google.geminicodeassist", | |
| "version": "2.58.0" | |
| } | |
| ] | |
| =======extensions.txt========= | |
| https://open-vsx.org/api/redhat/vscode-yaml/1.19.1/file/redhat.vscode-yaml-1.19.1.vsix | |
| https://open-vsx.org/api/GitHub/vscode-pull-request-github/0.112.0/file/GitHub.vscode-pull-request-github-0.112.0.vsix | |
| https://open-vsx.org/api/eclipse-cdt/cdt-gdb-vscode/2.5.0/file/eclipse-cdt.cdt-gdb-vscode-2.5.0.vsix | |
| https://open-vsx.org/api/bmewburn/vscode-intelephense-client/1.16.0/file/bmewburn.vscode-intelephense-client-1.16.0.vsix | |
| https://open-vsx.org/api/ms-python/python/2025.16.0/file/ms-python.python-2025.16.0.vsix | |
| https://open-vsx.org/api/ms-python/black-formatter/2025.2.0/file/ms-python.black-formatter-2025.2.0.vsix | |
| https://open-vsx.org/api/ms-python/debugpy/linux-x64/2025.14.1/file/[email protected] | |
| https://open-vsx.org/api/ms-python/pylint/2025.2.0/file/ms-python.pylint-2025.2.0.vsix | |
| https://open-vsx.org/api/ms-toolsai/jupyter/2025.4.1/file/ms-toolsai.jupyter-2025.4.1.vsix | |
| https://open-vsx.org/api/golang/Go/0.50.0/file/golang.Go-0.50.0.vsix | |
| https://open-vsx.org/api/redhat/java/1.49.0/file/redhat.java-1.49.0.vsix | |
| https://open-vsx.org/api/vscjava/vscode-java-debug/0.58.3/file/vscjava.vscode-java-debug-0.58.3.vsix | |
| https://open-vsx.org/api/vscjava/vscode-java-test/0.43.2/file/vscjava.vscode-java-test-0.43.2.vsix | |
| https://open-vsx.org/api/redhat/fabric8-analytics/0.10.1/file/redhat.fabric8-analytics-0.10.1.vsix | |
| https://open-vsx.org/api/redhat/vscode-openshift-connector/linux-x64/1.21.1/file/[email protected] | |
| https://open-vsx.org/api/xdebug/php-debug/1.38.0/file/xdebug.php-debug-1.38.0.vsix | |
| https://open-vsx.org/api/muhammad-sammy/csharp/2.93.22/file/muhammad-sammy.csharp-2.93.22.vsix | |
| https://open-vsx.org/api/SonarSource/sonarlint-vscode/4.35.1/file/SonarSource.sonarlint-vscode-4.35.1.vsix | |
| https://open-vsx.org/api/dbaeumer/vscode-eslint/3.0.16/file/dbaeumer.vscode-eslint-3.0.16.vsix | |
| https://open-vsx.org/api/atlassian/atlascode/4.0.9/file/atlassian.atlascode-4.0.9.vsix | |
| https://open-vsx.org/api/JFrog/jfrog-vscode-extension/2.14.5/file/JFrog.jfrog-vscode-extension-2.14.5.vsix | |
| https://open-vsx.org/api/GitLab/gitlab-workflow/6.57.4/file/GitLab.gitlab-workflow-6.57.4.vsix | |
| https://open-vsx.org/api/timonwong/shellcheck/0.38.5/file/timonwong.shellcheck-0.38.5.vsix | |
| https://open-vsx.org/api/redhat/ansible/25.9.0/file/redhat.ansible-25.9.0.vsix | |
| https://open-vsx.org/api/eamodio/gitlens/17.7.1/file/eamodio.gitlens-17.7.1.vsix | |
| https://open-vsx.org/api/Continue/continue/linux-x64/1.2.10/file/[email protected] | |
| https://open-vsx.org/api/RooVeterinaryInc/roo-cline/3.33.2/file/RooVeterinaryInc.roo-cline-3.33.2.vsix | |
| https://open-vsx.org/api/saoudrizwan/claude-dev/3.38.1/file/saoudrizwan.claude-dev-3.38.1.vsix | |
| https://open-vsx.org/api/RooVeterinaryInc/roo-cline/3.33.2/file/RooVeterinaryInc.roo-cline-3.33.2.vsix | |
| https://open-vsx.org/api/saoudrizwan/claude-dev/3.38.1/file/saoudrizwan.claude-dev-3.38.1.vsix | |
| https://open-vsx.org/api/Google/geminicodeassist/2.58.0/file/Google.geminicodeassist-2.58.0.vsix | |
| ======update_extensions.sh======== | |
| #!/bin/bash | |
| # available under the terms of the Eclipse Public License 2.0 | |
| # which is available at https://www.eclipse.org/legal/epl-2.0/ | |
| # | |
| # SPDX-License-Identifier: EPL-2.0 | |
| # | |
| # This script checks for available versions of VS Code extensions from Open VSX and updates them in the openvsx-sync.json file. | |
| # It identifies the latest stable version compatible with the configured VS Code version, | |
| # updates the download link and checksum, and ensures that artifacts.lock.yaml reflects the correct extension versions. | |
| # If an extension already exists, it updates its metadata; otherwise, it adds a new entry. | |
| trap EXIT | |
| set -e | |
| set -o pipefail | |
| GREEN="\e[32m" | |
| RESETSTYLE="\e[0m" | |
| BOLD="\e[1m" | |
| DEFAULT_EMOJI_HEADER="🏃" # could be overiden with EMOJI_HEADER="-" | |
| EMOJI_HEADER=${EMOJI_HEADER:-$DEFAULT_EMOJI_HEADER} | |
| DEFAULT_EMOJI_PASS="✔" # could be overriden with EMOJI_PASS="[PASS]" | |
| EMOJI_PASS=${EMOJI_PASS:-$DEFAULT_EMOJI_PASS} | |
| DEFAULT_EMOJI_FAIL="✘" # could be overriden with EMOJI_FAIL="[FAIL]" | |
| EMOJI_FAIL=${EMOJI_FAIL:-$DEFAULT_EMOJI_FAIL} | |
| usage() { | |
| echo "Usage: $0 -e 1.97.0 | |
| -e|--editor-version [EDITOR_VERSION] VS Code editor version that is used to check the compatibility of the extensions" | |
| exit 1 | |
| } | |
| # commandline args | |
| while [[ "$#" -gt 0 ]]; do | |
| case $1 in | |
| '-e' | '--editor-version') | |
| EDITOR_VERSION="$2" | |
| shift 1 | |
| ;; | |
| '-h' | '--help') usage ;; | |
| esac | |
| shift 1 | |
| done | |
| function initMessage() { | |
| echo -e "${BOLD}\n${EMOJI_HEADER} ${1}${RESETSTYLE}" | |
| } | |
| # Ensure EDITOR_VERSION is set | |
| if [[ -z "$EDITOR_VERSION" ]]; then | |
| echo "[ERROR] The -e | --editor-version argument is required." | |
| usage | |
| fi | |
| echo -e "${BOLD}\n${EMOJI_HEADER}${EMOJI_HEADER}${EMOJI_HEADER} Check new versions for extensions from openvsx_sync.json: ${BASH_SOURCE[0]}${RESETSTYLE}" | |
| echo "Che Code version=${EDITOR_VERSION}" | |
| ################################################################ | |
| vsixMetadata="" | |
| getMetadata() { | |
| vsixName=$1 | |
| key=$2 | |
| # check there is no error field in the metadata and retry if there is | |
| for j in 1 2 3 4 5; do | |
| vsixMetadata=$(curl -sLS "https://open-vsx.org/api/${vsixName}/${key}") | |
| if [[ $(echo "${vsixMetadata}" | jq -r ".error") != null ]]; then | |
| echo "Attempt $j/5: Error while getting metadata for ${vsixName} version ${key}" | |
| if [[ $j -eq 5 ]]; then | |
| echo "[ERROR] Maximum of 5 attempts reached - must exit!" | |
| exit 1 | |
| fi | |
| continue | |
| else | |
| break | |
| fi | |
| done | |
| } | |
| versionsPage="" | |
| getVersions() { | |
| vsixName=$1 | |
| # check the versions page is empty and retry if it is | |
| for j in 1 2 3 4 5; do | |
| versionsPage=$(curl -sLS "https://open-vsx.org/api/${vsixName}/versions?size=400") | |
| totalSize=$(echo "${versionsPage}" | jq -r ".totalSize") | |
| if [[ "$totalSize" != "null" && "$totalSize" -eq 0 ]]; then | |
| echo "Attempt $j/5: Error while getting versions for ${vsixName}" | |
| if [[ $j -eq 5 ]]; then | |
| echo "[ERROR] Maximum of 5 attempts reached - must exit!" | |
| exit 1 | |
| fi | |
| continue | |
| else | |
| break | |
| fi | |
| done | |
| } | |
| # Extensions file path | |
| openvsxJson="extensions.json" | |
| openVsxSyncFileContent=$(cat "${openvsxJson}") | |
| numberOfExtensions=$(echo "${openVsxSyncFileContent}" | jq ". | length") | |
| echo "The number of extensions is $numberOfExtensions" | |
| IFS=$'\n' | |
| for i in $(seq 0 "$((numberOfExtensions - 1))"); do | |
| vsixFullName=$(echo "${openVsxSyncFileContent}" | jq -r ".[$i].id") | |
| vsixUpdate=$(echo "${openVsxSyncFileContent}" | jq -r ".[$i].update") | |
| if [[ $vsixUpdate == false ]]; then | |
| echo -e "${BOLD}\nSkipping ${vsixFullName}${RESETSTYLE}" | |
| continue | |
| fi | |
| vsixVersion=$(echo "${openVsxSyncFileContent}" | jq -r ".[$i].version") | |
| vsixDownloadLink=$(echo "${openVsxSyncFileContent}" | jq -r ".[$i].download") | |
| # replace the dot by / in the vsix name | |
| vsixName=$(echo "${vsixFullName}" | sed 's/\./\//g') | |
| initMessage "Checking for a new version: $vsixFullName" | |
| # version should not be empty if download link was set | |
| if [[ $vsixDownloadLink != null ]] && [[ -z "$vsixVersion" ]]; then | |
| echo -e "Version should not be empty for $vsixFullName" | |
| exit 1 | |
| fi | |
| # grab metadata for the vsix file from openvsx.org | |
| getVersions "${vsixName}" | |
| # if version wasn't set in json, grab it from metadata and add it into the file | |
| # get all versions of the extension | |
| allVersions=$(echo "${versionsPage}" | jq -r '.versions') | |
| if [[ "$allVersions" == "{}" ]]; then | |
| echo "No versions found for ${vsixName}" | |
| exit 1 | |
| fi | |
| key_value_pairs=$(echo "$allVersions" | jq -r 'to_entries[] | [ .key, .value ] | @tsv') | |
| # go through all versions of the extension to find the latest stable version that is compatible with the VS Code version | |
| resultedVersion=null | |
| while IFS=$'\t' read -r key value; do | |
| # get metadata for the version | |
| getMetadata "${vsixName}" "${key}" | |
| # check if the version is pre-release | |
| preRelease=$(echo "${vsixMetadata}" | jq -r '.preRelease') | |
| if [[ $preRelease == true ]]; then | |
| echo "Skipping pre-release version ${value}" | |
| continue | |
| fi | |
| # extract the engine version from the json metadata | |
| vscodeEngineVersion=$(echo "${vsixMetadata}" | jq -r '.engines.vscode') | |
| # remove ^ from the engine version | |
| vscodeEngineVersion="${vscodeEngineVersion//^/}" | |
| # remove >= from the engine version | |
| vscodeEngineVersion="${vscodeEngineVersion//>=/}" | |
| # replace x by 0 in the engine version | |
| vscodeEngineVersion="${vscodeEngineVersion//x/0}" | |
| # check if the extension's engine version is compatible with the code version | |
| # if the extension's engine version is ahead of the code version, check a next version of the extension | |
| if [[ "$vscodeEngineVersion" = "$(echo -e "$vscodeEngineVersion\n$EDITOR_VERSION" | sort -V | head -n1)" ]]; then | |
| #VS Code version >= Engine version, can proceed." | |
| resultedVersion=$(echo "${vsixMetadata}" | jq -r ".version") | |
| break | |
| else | |
| echo "Skipping ${value}, it is not compatible with VS Code editor $EDITOR_VERSION" | |
| continue | |
| fi | |
| done <<<"$key_value_pairs" | |
| if [[ "$vsixVersion" == "$resultedVersion" ]]; then | |
| echo "==================== The same version for $vsixName" | |
| continue | |
| fi | |
| if [[ $resultedVersion == null ]]; then | |
| echo "[ERROR] No stable version of $vsixFullName is compatible with VS Code editor verision $EDITOR_VERSION; must exit!" | |
| exit 1 | |
| else | |
| vsixVersion=$resultedVersion | |
| fi | |
| # jq --argjson i "$i" --arg version "$vsixVersion" '.[$i] += { "version": $version }' "$openvsxJson" >tmp.json && mv tmp.json "$openvsxJson" | |
| # Extract the download link from metadata | |
| vsixDownloadLink=$(echo "$vsixMetadata" | jq -r '.files.download') | |
| vsixUniversalDownloadLink=$(echo "$vsixMetadata" | jq -r '.downloads.universal // empty') | |
| vsixLinuxDownloadLink=$(echo "$vsixMetadata" | jq -r '.downloads."linux-x64" // empty') | |
| # Prioritize universal, then linux-x64, then fallback to default | |
| vsixDownloadLink=${vsixUniversalDownloadLink:-${vsixLinuxDownloadLink:-$vsixDownloadLink}} | |
| if [[ -z $vsixDownloadLink ]]; then | |
| echo "[ERROR] Failed to determine a valid VSIX download link. Exiting!" | |
| exit 1 | |
| fi | |
| # jq --argjson i "$i" --arg downloadLink "$vsixDownloadLink" '.[$i] += { "download": $downloadLink }' "$openvsxJson" >tmp.json && mv tmp.json "$openvsxJson" | |
| echo "$vsixDownloadLink" >> extensions.txt | |
| done | |
| echo -e "${GREEN}${EMOJI_PASS}${RESETSTYLE} Finished checking new versions!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment