From 78f79d0ec685be56b722d1b01c336860d63ba253 Mon Sep 17 00:00:00 2001 From: emaryn Date: Fri, 18 Jul 2025 11:06:32 +0800 Subject: [PATCH 1/2] vscode-extension-update: remove unused script --- .../vscode_extension_batch_update.py | 102 ------------------ 1 file changed, 102 deletions(-) delete mode 100755 pkgs/by-name/vs/vscode-extension-update/vscode_extension_batch_update.py diff --git a/pkgs/by-name/vs/vscode-extension-update/vscode_extension_batch_update.py b/pkgs/by-name/vs/vscode-extension-update/vscode_extension_batch_update.py deleted file mode 100755 index 7d85cde5a9c2..000000000000 --- a/pkgs/by-name/vs/vscode-extension-update/vscode_extension_batch_update.py +++ /dev/null @@ -1,102 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i python3 -p nix python3 python3Packages.loguru nix-search-tv vscode-extension-update gitMinimal - -import argparse -import subprocess - -from loguru import logger - - -class VSCodeExtensionBatchUpdater: - # Extensions to be skipped - _excluded_extensions = [ - # wrong upstream constraint: 0.10.x - "vscode-extensions.ms-vscode.theme-tomorrowkit", - "vscode-extensions.richie5um2.snake-trail", - # not supported - "vscode-extensions.ms-ceintl.vscode-language-pack-cs", - "vscode-extensions.ms-ceintl.vscode-language-pack-de", - "vscode-extensions.ms-ceintl.vscode-language-pack-es", - "vscode-extensions.ms-ceintl.vscode-language-pack-fr", - "vscode-extensions.ms-ceintl.vscode-language-pack-it", - "vscode-extensions.ms-ceintl.vscode-language-pack-ja", - "vscode-extensions.ms-ceintl.vscode-language-pack-ko", - "vscode-extensions.ms-ceintl.vscode-language-pack-pl", - "vscode-extensions.ms-ceintl.vscode-language-pack-pt-br", - "vscode-extensions.ms-ceintl.vscode-language-pack-qps-ploc", - "vscode-extensions.ms-ceintl.vscode-language-pack-ru", - "vscode-extensions.ms-ceintl.vscode-language-pack-tr", - "vscode-extensions.ms-ceintl.vscode-language-pack-zh-hans", - "vscode-extensions.ms-ceintl.vscode-language-pack-zh-hant", - ] - - # Unable to determine the correct file location - _extension_file_map = { - "vscode-extensions.hashicorp.terraform": "pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix", - "vscode-extensions.betterthantomorrow.calva": "pkgs/applications/editors/vscode/extensions/betterthantomorrow.calva/default.nix", - } - - def __init__(self): - self.parser = argparse.ArgumentParser( - description="Batch update VSCode extensions" - ) - - def execute_command( - self, command, env: dict[str, str] = None, shell: bool = False - ) -> str: - logger.debug("Executing command: {} (shell={})", command, shell) - return subprocess.run( - command, - check=True, - capture_output=True, - text=True, - env=env, - shell=shell, - ).stdout.strip() - - def _get_extension_list(self) -> list[str]: - # Get extension list from nix-search-tv output - command = "nix-search-tv print | grep '^nixpkgs/ vscode-extensions\\.' | cut -d' ' -f2-" - output = self.execute_command(command, shell=True) - extension_list = output.splitlines() - logger.info("Found {} extensions: {}", len(extension_list), extension_list) - return extension_list - - def _has_update_script(self, extension: str) -> bool: - try: - result = self._get_nix_attribute(f"{extension}.updateScript") - return "not found" not in result - except subprocess.CalledProcessError: - return False - - def _get_nix_attribute(self, attribute: str) -> str: - return self.execute_command(["nix", "eval", "--raw", "-f", ".", attribute]) - - def _get_extension_filename(self, extension: str) -> str | None: - return self._extension_file_map.get(extension) - - def _update_extension(self, extension: str) -> None: - logger.info("Updating extension: {}", extension) - if extension in self._excluded_extensions: - return - try: - if self._has_update_script(extension): - return - update_command = ["vscode-extension-update", extension, "--commit"] - filename = self._get_extension_filename(extension) - if filename: - update_command.extend(["--override-filename", filename]) - self.execute_command(update_command) - logger.info("Updated extension: {}", extension) - except subprocess.CalledProcessError: - logger.error("Failed to update extension: {}", extension) - self.execute_command(["git", "restore", "."]) - - def run(self) -> None: - for extension in self._get_extension_list(): - self._update_extension(extension) - - -if __name__ == "__main__": - updater = VSCodeExtensionBatchUpdater() - updater.run() From 86a0cbb90ee4832554a43766cc7778ef86f1c86c Mon Sep 17 00:00:00 2001 From: emaryn Date: Fri, 18 Jul 2025 11:06:57 +0800 Subject: [PATCH 2/2] vscode-extension-update: fix some ruff warning --- .../vscode_extension_update.py | 137 ++++++++---------- 1 file changed, 59 insertions(+), 78 deletions(-) diff --git a/pkgs/by-name/vs/vscode-extension-update/vscode_extension_update.py b/pkgs/by-name/vs/vscode-extension-update/vscode_extension_update.py index 979e44a3bcee..d1e179e23e2a 100755 --- a/pkgs/by-name/vs/vscode-extension-update/vscode_extension_update.py +++ b/pkgs/by-name/vs/vscode-extension-update/vscode_extension_update.py @@ -7,6 +7,8 @@ import os import re import subprocess import sys +from pathlib import Path +from typing import Optional from loguru import logger @@ -69,7 +71,7 @@ class VSCodeExtensionUpdater: logger.info(f"Extension Current Version: {self.current_version}") def execute_command( - self, commandline: list[str], env: dict[str, str] = None + self, commandline: list[str], env: Optional[dict[str, str]] = None ) -> str: """ Executes a shell command and returns its output. @@ -116,33 +118,27 @@ class VSCodeExtensionUpdater: return "targetPlatform=" in source_url def _get_nix_vscode_extension_src_hash(self, system: str) -> str: - url = self.execute_command( - [ - "nix", - "eval", - "--raw", - "-f", - ".", - f"{self.attribute_path}.src.url", - "--system", - system, - ] - ) - if "warning" not in url: - sha256 = self.execute_command(["nix-prefetch-url", url]) - hash = self.execute_command( - [ - "nix", - "hash", - "convert", - "--to", - "sri", - "--hash-algo", - "sha256", - sha256, - ] - ) - return hash + url = self.execute_command([ + "nix", + "eval", + "--raw", + "-f", + ".", + f"{self.attribute_path}.src.url", + "--system", + system, + ]) + sha256 = self.execute_command(["nix-prefetch-url", url]) + return self.execute_command([ + "nix", + "hash", + "convert", + "--to", + "sri", + "--hash-algo", + "sha256", + sha256, + ]) def get_target_platform(self, nix_system: str) -> str: """ @@ -185,16 +181,14 @@ class VSCodeExtensionUpdater: """ try: return json.loads( - self.execute_command( - [ - "nix", - "eval", - "--json", - "-f", - ".", - f"{self.attribute_path}.meta.platforms", - ] - ) + self.execute_command([ + "nix", + "eval", + "--json", + "-f", + ".", + f"{self.attribute_path}.meta.platforms", + ]) ) except subprocess.CalledProcessError: return [] @@ -261,14 +255,12 @@ class VSCodeExtensionUpdater: engine_version_constraint ) try: - self.execute_command( - [ - "semver", - self.target_vscode_version, - "-r", - engine_version_constraint, - ] - ) + self.execute_command([ + "semver", + self.target_vscode_version, + "-r", + engine_version_constraint, + ]) logger.info(f"Compatible version found: {candidate_version}") return candidate_version except (ValueError, subprocess.CalledProcessError): @@ -277,13 +269,11 @@ class VSCodeExtensionUpdater: ) continue return candidate_version - else: - logger.error("Error: not found compatible version.") - sys.exit(1) + logger.error("Error: not found compatible version.") + sys.exit(1) def replace_version_symbol(self, version: str) -> str: - version = re.sub(r"^\^", ">=", version) - return version + return re.sub(r"^\^", ">=", version) def update_version_for_default_nix(self, content: str, new_version: str): target_name = self.attribute_path.removeprefix("vscode-extensions.") @@ -326,12 +316,7 @@ class VSCodeExtensionUpdater: updated_content = ( content[:brace_start] + new_block_text + content[block_end + 1 :] ) - with open( - self.override_filename, - "w", - encoding="utf-8", - ) as f: - f.write(updated_content) + Path(self.override_filename).write_text(updated_content, encoding="utf-8") def run_nix_update(self, new_version: str, system: str) -> None: """ @@ -353,9 +338,9 @@ class VSCodeExtensionUpdater: if ( "pkgs/applications/editors/vscode/extensions/vscode-utils.nix" in self.override_filename - ) and os.path.exists( + ) and Path( "pkgs/applications/editors/vscode/extensions/default.nix" - ): + ).exists(): self.override_filename = ( "pkgs/applications/editors/vscode/extensions/default.nix" ) @@ -365,22 +350,17 @@ class VSCodeExtensionUpdater: in self.override_filename ): with logger.catch(exception=(IOError, ValueError)): - with open( - self.override_filename, - "r", - encoding="utf-8", - ) as f: - content = f.read() + content = Path(self.override_filename).read_text(encoding="utf-8") if content.count(self.current_version) > 1: self.update_version_for_default_nix(content, new_version) new_version = "skip" if system not in self.supported_nix_systems: - hash = self._get_nix_vscode_extension_src_hash(system) + src_hash = self._get_nix_vscode_extension_src_hash(system) update_command = [ "update-source-version", self.attribute_path, self.new_version, - hash, + src_hash, f"--system={system}", "--ignore-same-version", "--ignore-same-hash", @@ -412,9 +392,12 @@ class VSCodeExtensionUpdater: self.get_target_platform(self.nix_vscode_extension_platforms[0]), ) try: - self.execute_command( - ["semver", self.current_version, "-r", f"<{self.new_version}"] - ) + self.execute_command([ + "semver", + self.current_version, + "-r", + f"<{self.new_version}", + ]) except subprocess.CalledProcessError: logger.info("Already up to date or new version is older!") sys.exit(0) @@ -423,14 +406,12 @@ class VSCodeExtensionUpdater: self.run_nix_update(version, system) if self.commit: self.execute_command(["git", "add", self.override_filename]) - self.execute_command( - [ - "git", - "commit", - "-m", - f"{self.attribute_path}: {self.current_version} -> {self.new_version}", - ] - ) + self.execute_command([ + "git", + "commit", + "-m", + f"{self.attribute_path}: {self.current_version} -> {self.new_version}", + ]) if __name__ == "__main__":