vscode-extension-update-script: improve

This commit is contained in:
emaryn
2025-04-10 12:29:21 +08:00
parent 3c3d212a24
commit 6ef835f39d
4 changed files with 18 additions and 35 deletions
@@ -45,7 +45,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
ln -sf ${lib.getExe ruff} "$out/$installPrefix/bundled/libs/bin/ruff"
'';
passthru.updateScript = vscode-extension-update-script { extraArgs = [ "--platforms" ]; };
passthru.updateScript = vscode-extension-update-script { };
meta = {
license = lib.licenses.mit;
@@ -35,7 +35,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
// sources.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
passthru.updateScript = vscode-extension-update-script { extraArgs = [ "--platforms" ]; };
passthru.updateScript = vscode-extension-update-script { };
meta = {
description = "Jujutsu version control integration, for simpler Git workflow";
@@ -21,6 +21,7 @@ class VSCodeExtensionBatchUpdater:
"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",
@@ -39,13 +40,6 @@ class VSCodeExtensionBatchUpdater:
self.parser = argparse.ArgumentParser(
description="Batch update VSCode extensions"
)
# By default, update command skips extensions with updateScript or need '--platforms'
self.parser.add_argument(
"--platforms",
action="store_true",
help="add '--platforms' to update command from some extensions",
)
self.platforms = self.parser.parse_args().platforms
def execute_command(
self, command, env: dict[str, str] = None, shell: bool = False
@@ -75,10 +69,6 @@ class VSCodeExtensionBatchUpdater:
except subprocess.CalledProcessError:
return False
def _has_platform_source(self, extension: str) -> bool:
source_url = self._get_nix_attribute(f"{extension}.src.url")
return "targetPlatform=" in source_url
def _get_nix_attribute(self, attribute: str) -> str:
return self.execute_command(["nix", "eval", "--raw", "-f", ".", attribute])
@@ -93,11 +83,6 @@ class VSCodeExtensionBatchUpdater:
if self._has_update_script(extension):
return
update_command = ["vscode-extension-update", extension, "--commit"]
if self._has_platform_source(extension):
if self.platforms:
update_command.append("--platforms")
else:
return
filename = self._get_extension_filename(extension)
if filename:
update_command.extend(["--override-filename", filename])
@@ -34,11 +34,6 @@ class VSCodeExtensionUpdater:
action="store_true",
help="allow check pre-release versions",
)
self.parser.add_argument(
"--platforms",
action="store_true",
help="set system according to meta.platforms for nix-update",
)
self.parser.add_argument(
"--commit", action="store_true", help="commit the updated package"
)
@@ -58,18 +53,16 @@ class VSCodeExtensionUpdater:
f"{self.extension_publisher}.{self.extension_name}"
)
self.nix_system = self.get_nix_system()
self.nix_systems = self._get_nix_vscode_extension_platforms() or [
nix_vscode_extension_platforms = self._get_nix_vscode_extension_platforms()
if not nix_vscode_extension_platforms and self._has_platform_source():
logger.error("Error: not found meta.platforms.")
sys.exit(1)
self.nix_vscode_extension_platforms = nix_vscode_extension_platforms or [
self.nix_system
]
if not self.args.platforms:
self.nix_systems = (
[self.nix_system]
if self.nix_system in self.nix_systems
else self.nix_systems[:1]
)
if self.nix_system in self.nix_systems:
self.nix_systems.remove(self.nix_system)
self.nix_systems.insert(0, self.nix_system)
if self.nix_system in self.nix_vscode_extension_platforms:
self.nix_vscode_extension_platforms.remove(self.nix_system)
self.nix_vscode_extension_platforms.insert(0, self.nix_system)
self.supported_nix_systems = self.get_supported_nix_systems()
logger.info(f"VSCode version: {self.target_vscode_version}")
logger.info(f"Extension Marketplace ID: {self.extension_marketplace_id}")
@@ -118,6 +111,10 @@ class VSCodeExtensionUpdater:
extra_platforms = value.strip("[]").replace('"', "").split()
return ([system] if system is not None else []) + extra_platforms
def _has_platform_source(self) -> bool:
source_url = self._get_nix_attribute(f"{self.attribute_path}.src.url")
return "targetPlatform=" in source_url
def _get_nix_vscode_extension_src_hash(self, system: str) -> str:
url = self.execute_command(
[
@@ -411,7 +408,8 @@ class VSCodeExtensionUpdater:
f"Total versions found for {self.extension_marketplace_id}: {len(available_versions)}"
)
self.new_version = self.find_compatible_extension_version(
available_versions, self.get_target_platform(self.nix_systems[0])
available_versions,
self.get_target_platform(self.nix_vscode_extension_platforms[0]),
)
try:
self.execute_command(
@@ -420,7 +418,7 @@ class VSCodeExtensionUpdater:
except subprocess.CalledProcessError:
logger.info("Already up to date or new version is older!")
sys.exit(0)
for i, system in enumerate(self.nix_systems):
for i, system in enumerate(self.nix_vscode_extension_platforms):
version = self.new_version if i == 0 else "skip"
self.run_nix_update(version, system)
if self.commit: