DSH-Arch-Setup/plugins/dsh-touched-git/scripts/package-editor-preferences.py
Шурупов Илья Викторович cf9443753e Add one-command Arch DSH setup
Package the portable DSH profiles, local plugins, desktop integration, Firefox wrapper, and ownership-aware installer lifecycle. Bundle checksum-pinned OpenVSCode, editor extensions, translation assets, and cloudflared so unreliable upstream artifact downloads cannot break a clean installation.
2026-09-12 19:13:36 +03:00

56 lines
2.3 KiB
Python

import json
import sys
import xml.etree.ElementTree as element_tree
import zipfile
from pathlib import Path
source_directory = Path(sys.argv[1])
archive_path = Path(sys.argv[2])
package = json.loads((source_directory / "package.json").read_text())
namespace = "http://schemas.microsoft.com/developer/vsx-schema/2011"
element_tree.register_namespace("", namespace)
def add_element(parent, name, attributes=None, text=None):
child = element_tree.SubElement(parent, f"{{{namespace}}}{name}", attributes or {})
child.text = text
return child
manifest = element_tree.Element(f"{{{namespace}}}PackageManifest", {"Version": "2.0.0"})
metadata = add_element(manifest, "Metadata")
add_element(metadata, "Identity", {
"Language": "en-US",
"Id": package["name"],
"Version": package["version"],
"Publisher": package["publisher"],
})
add_element(metadata, "DisplayName", text=package["displayName"])
add_element(metadata, "Description", text=package["description"])
properties = add_element(metadata, "Properties")
add_element(properties, "Property", {
"Id": "Microsoft.VisualStudio.Code.Engine",
"Value": package["engines"]["vscode"],
})
add_element(properties, "Property", {
"Id": "Microsoft.VisualStudio.Code.ExtensionKind",
"Value": ",".join(package["extensionKind"]),
})
installation = add_element(manifest, "Installation")
add_element(installation, "InstallationTarget", {"Id": "Microsoft.VisualStudio.Code"})
add_element(manifest, "Dependencies")
assets = add_element(manifest, "Assets")
add_element(assets, "Asset", {
"Type": "Microsoft.VisualStudio.Code.Manifest",
"Path": "extension/package.json",
"Addressable": "true",
})
content_types = '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="json" ContentType="application/json"/><Default Extension="js" ContentType="application/javascript"/><Default Extension="vsixmanifest" ContentType="text/xml"/></Types>'
with zipfile.ZipFile(archive_path, "w", zipfile.ZIP_DEFLATED) as archive:
archive.writestr("extension.vsixmanifest", element_tree.tostring(manifest, encoding="utf-8"))
archive.writestr("[Content_Types].xml", content_types)
for filename in ("package.json", "extension.js"):
archive.write(source_directory / filename, f"extension/{filename}")