From 38908b9a250b88acbc61d88246497826acedb695 Mon Sep 17 00:00:00 2001 From: Olaf Date: Tue, 25 Aug 2026 09:30:56 +0200 Subject: [PATCH] Release testing --- Makefile | 1 + XPI/signed/LinkLog-dummy.xpi | Bin 0 -> 24225 bytes XPI/unsigned/LinkLog-0.1.0.xpi | Bin 24178 -> 24225 bytes scripts/release/validate_release.py | 7 +++- scripts/release/validate_xpi.py | 62 ++++++++++++++++++++++++++++ webextension/manifest.json | 4 ++ 6 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 XPI/signed/LinkLog-dummy.xpi create mode 100644 scripts/release/validate_xpi.py diff --git a/Makefile b/Makefile index f213b4d..0740ac2 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ xpi: logos @mkdir -p $(XPI_UNSIGNED_DIR) $(XPI_SIGNED_DIR) @rm -f $(XPI_OUTPUT) @cd webextension && zip -q -9 "../$(XPI_OUTPUT)" $(EXTENSION_FILES) + @python3 scripts/release/validate_xpi.py "$(XPI_OUTPUT)" webextension/manifest.json @echo "Created $(XPI_OUTPUT)" check-tools: diff --git a/XPI/signed/LinkLog-dummy.xpi b/XPI/signed/LinkLog-dummy.xpi new file mode 100644 index 0000000000000000000000000000000000000000..e3a1bd7f13f5c63dc33e5a6d99b3e70801c753ae GIT binary patch literal 24225 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 literal 0 HcmV?d00001 diff --git a/XPI/unsigned/LinkLog-0.1.0.xpi b/XPI/unsigned/LinkLog-0.1.0.xpi index f5e851f1eed7f1ee8e9f09042e00f1ce363bb708..e3a1bd7f13f5c63dc33e5a6d99b3e70801c753ae 100644 GIT binary patch delta 635 zcmV->0)+kYyaA!T0e?_S0|XQR0ssgAfJ+%&XUu_%xd8wGmID9)4FDVfZDDR{W@U49 zE^2dcZdFtX00RI-jcNcyjcRpx3jhHG_5lC@1QY-O0BusiZrd;nz2_?opIbX=il8Zm zVZ*LH?p6eb>@W@&S<*zh*-+%)N6Jp@b-Nfc-_v`KBHtHTmVbA~;Q@%NH;9DZ<@k9x zzvgGC2^qfXA|U_HcXxBDPupg!Qg=7tGV|?&ID^h!V;z|TJ(p#RT+I3@y)}nY=Y1~& zFQYk^bu_LymYqRYN(T7F;52PH2vYHbq|?!7n${4Asvf72>DH_Hi2b!OK7gy_>12_G z!m$UHS_E7ce*m-50n%6vfJ+%&XUu_%xd8wGmXokrCjtOOlMY=SllEF30ssP&7F$dK zIFn;rPyzpwv|CUCO_K#&Py#A1lUH0%0dAA0Tu=dnllWXw0whS2OI=O@PLrBlP67u} Vlj>bg0v}Y9I$kmc###UX007Q=7ghiO delta 600 zcmV-e0;m0XX4FDVfZDDR{W@U49 zE^2dcZdFtX00S05jcR*BjcRpx3jhHG_5lC@1QY-O0Bw@NZrd;nhVOX_!ROUVnj&b5 zqA0LykGlUO%isa`?seht34i7+Fy+b7Qu6R(} zA4zbg2l**p(4Ag}; z@pgdNBPA@!?cWlTplKN2;g_kiM*_q?3gr6BrlvxUuNiUl@_=tSkH*?+h?bsacVg#C zKSxgs2Qyf%7=PLR_vD2hd>BH~^PxO)Z~wJmvj9tcvrGOIz1i%_;I2%Owzpr>_BKmd zxybjD%S;l@Ro>ly`S0!*sA50o*zc~O5m85fCWsXUXz+kdMZk=%qh*a9G$+3Zq||Lf zrg>T4J)gWi$(oct&gJKcL~OX~(JgkT*sS-{T1>Vfv{Z&6%^=A~=0FcxcgW>}tGzV` zo%((wjn~nfbsddsj=DGK^ciaSU~nmk9)VQ8kz}0m%w6+&4XGM%Ze7~Glzh_unw$^d zDtUq|lvp?pkWj13>JPF4(pU}gNf})TN@i4w0RR9Vliyk=0v17&JzX7>C0iZ>(E*c1 zTTB57lagCd0nn4 None: if frontend_version != extension_version: fail(f'frontend version {frontend_version} does not match extension version {extension_version}') + gecko_settings = manifest.get('browser_specific_settings', {}).get('gecko', {}) + data_permissions = gecko_settings.get('data_collection_permissions') + if data_permissions != {'required': ['websiteActivity'], 'optional': []}: + fail('Firefox data_collection_permissions must require websiteActivity and have no optional categories') + settings = SETTINGS_PATH.read_text() match = re.search(r"version: str = os\.getenv\('LINKLOG_VERSION', '([^']+)'\)", settings) if not match: @@ -52,7 +57,7 @@ def main() -> None: fail('signed XPI contains a corrupt member') updates = json.loads(UPDATES_PATH.read_text()) - addon_id = manifest['browser_specific_settings']['gecko']['id'] + addon_id = gecko_settings['id'] update_entries = updates.get('addons', {}).get(addon_id, {}).get('updates', []) if not any(entry.get('version') == extension_version for entry in update_entries): fail(f'webextension/updates.json has no update entry for {extension_version}') diff --git a/scripts/release/validate_xpi.py b/scripts/release/validate_xpi.py new file mode 100644 index 0000000..1a87b51 --- /dev/null +++ b/scripts/release/validate_xpi.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +"""Validate an unsigned LinkLog XPI produced by the Makefile.""" + +import json +import sys +import zipfile +from pathlib import Path + + +REQUIRED_FILES = { + 'manifest.json', + 'logo.svg', + 'icon-16.png', + 'icon-32.png', + 'icon-48.png', + 'icon-96.png', + 'options.css', + 'options.html', + 'options.js', + 'popup.css', + 'popup.html', + 'popup.js', +} + + +def fail(message: str) -> None: + raise SystemExit(f'XPI validation failed: {message}') + + +def main() -> None: + if len(sys.argv) != 3: + fail('usage: validate_xpi.py ') + + xpi_path = Path(sys.argv[1]) + source_manifest_path = Path(sys.argv[2]) + try: + source_manifest = json.loads(source_manifest_path.read_text()) + with zipfile.ZipFile(xpi_path) as archive: + names = set(archive.namelist()) + corrupt_member = archive.testzip() + if corrupt_member is not None: + fail(f'corrupt archive member: {corrupt_member}') + if 'manifest.json' not in names: + fail('manifest.json is missing') + packaged_manifest = json.loads(archive.read('manifest.json')) + except (OSError, zipfile.BadZipFile, json.JSONDecodeError) as error: + fail(str(error)) + + missing_files = REQUIRED_FILES - names + if missing_files: + fail(f'missing required files: {", ".join(sorted(missing_files))}') + unexpected_files = names - REQUIRED_FILES + if any(name.startswith('__MACOSX/') or name == '.DS_Store' for name in unexpected_files): + fail('archive contains macOS metadata') + if packaged_manifest != source_manifest: + fail('packaged manifest does not match webextension/manifest.json') + + print(f'validated unsigned XPI {xpi_path}') + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/webextension/manifest.json b/webextension/manifest.json index dd3412a..52d6c9d 100644 --- a/webextension/manifest.json +++ b/webextension/manifest.json @@ -27,6 +27,10 @@ "gecko": { "id": "linklog@kolkman.org", "strict_min_version": "109.0", + "data_collection_permissions": { + "required": ["websiteActivity"], + "optional": [] + }, "update_url": "https://git.kolkman.org/olaf/Link-Log/raw/branch/main/webextension/updates.json" } },