diff --git a/requirements.txt b/requirements.txt index 92add4689..eb1db817d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ attrs==26.1.0 -certifi==2026.6.17 +certifi==2026.7.22 charset-normalizer==3.4.9 idna==3.18 jsonschema==4.25.1 diff --git a/src/pl.arm64.json b/src/pl.arm64.json index 8c63ddb5a..665a97463 100644 --- a/src/pl.arm64.json +++ b/src/pl.arm64.json @@ -121,10 +121,10 @@ { "folder-name": "HTMLTag", "display-name": "HTML Tag", - "version": "1.6.0.0", + "version": "1.6.1.0", "npp-compatible-versions": "[8.3,]", - "id": "0f172f4244f31c180953682d3d30ba0c912ded7e2b235fea22aa9a117cb327bb", - "repository": "https://github.com/rdipardo/nppHTMLTag/releases/download/v1.6.0/HTMLTag_v1.6.0_arm64.zip", + "id": "870a1bd94c141e1c7d441a5ec1ae01a1c2650a86759b2b56822411738d4d1491", + "repository": "https://github.com/rdipardo/nppHTMLTag/releases/download/v1.6.1/HTMLTag_v1.6.1_arm64.zip", "description": "Provides three core functions:\r\n- HTML and XML tag jumping, like the built-in brace matching and selection\r\n of tags and/or contents.\r\n- HTML entity encoding/decoding (example: é to é)\r\n- JS character encoding/decoding (example: é to \\u00E9)", "author": "Martijn Coppoolse", "homepage": "https://github.com/rdipardo/nppHTMLTag" @@ -184,10 +184,10 @@ { "folder-name": "MarkdownTableEditor", "display-name": "Markdown Table Editor", - "version": "11.0.2", + "version": "11.1.0", "npp-compatible-versions": "[8.3.1,]", - "id": "e6652a689d6b1781a23fb578eb9034dbbfd483ca608348ca4379b708465c0c6e", - "repository": "https://github.com/krotname/NppMarkdownTableEditor/releases/download/v11.0.2/MarkdownTableEditor-11.0.2-arm64-pluginadmin.zip", + "id": "37ed2e3ac28b514d3267e9bcd0cca18683d67ae817075e9f91a5b944c78e18ea", + "repository": "https://github.com/krotname/NppMarkdownTableEditor/releases/download/v11.1.0/MarkdownTableEditor-11.1.0-arm64-pluginadmin.zip", "description": "Edits Markdown pipe tables as aligned text. Align, fit width, narrow or widen columns, navigate, insert, delete, move and sort rows or columns, convert CSV/TSV blocks, and insert new tables from Notepad++.", "author": "Kreout", "homepage": "https://github.com/krotname/NppMarkdownTableEditor" diff --git a/src/pl.x64.json b/src/pl.x64.json index bd531efed..7e8ab11a1 100644 --- a/src/pl.x64.json +++ b/src/pl.x64.json @@ -656,11 +656,11 @@ { "folder-name": "HTMLTag", "display-name": "HTML Tag", - "version": "1.6.0.0", + "version": "1.6.1.0", "npp-compatible-versions": "[8.3,]", "old-versions-compatibility": "[,1.1][,8.2.1]", - "id": "0281be7b6f0c77661ba004e0c2f52f7f8b3289071535042879f8c69b242af5f4", - "repository": "https://github.com/rdipardo/nppHTMLTag/releases/download/v1.6.0/HTMLTag_v1.6.0_x64.zip", + "id": "32127f58479d106840a9790ed52296d62406e5715b63740ac96338d8ae8d515b", + "repository": "https://github.com/rdipardo/nppHTMLTag/releases/download/v1.6.1/HTMLTag_v1.6.1_x64.zip", "description": "Provides three core functions:\r\n- HTML and XML tag jumping, like the built-in brace matching and selection\r\n of tags and/or contents.\r\n- HTML entity encoding/decoding (example: é to é)\r\n- JS character encoding/decoding (example: é to \\u00E9)", "author": "Martijn Coppoolse", "homepage": "https://github.com/rdipardo/nppHTMLTag" @@ -867,10 +867,10 @@ { "folder-name": "MarkdownTableEditor", "display-name": "Markdown Table Editor", - "version": "11.0.2", + "version": "11.1.0", "npp-compatible-versions": "[8.3.1,]", - "id": "1c22f73d52b3586e00d8a757dd9af52589d497659dca81fb2c5b26d06d2ed553", - "repository": "https://github.com/krotname/NppMarkdownTableEditor/releases/download/v11.0.2/MarkdownTableEditor-11.0.2-x64-pluginadmin.zip", + "id": "a39a5f4cce2b726c585b80d142c755b1d2cd7cd3ef8c1afe6e3be41c0ff5fa40", + "repository": "https://github.com/krotname/NppMarkdownTableEditor/releases/download/v11.1.0/MarkdownTableEditor-11.1.0-x64-pluginadmin.zip", "description": "Edits Markdown pipe tables as aligned text. Align, fit width, narrow or widen columns, navigate, insert, delete, move and sort rows or columns, convert CSV/TSV blocks, and insert new tables from Notepad++.", "author": "Kreout", "homepage": "https://github.com/krotname/NppMarkdownTableEditor" diff --git a/src/pl.x86.json b/src/pl.x86.json index b7399f244..67c499eba 100644 --- a/src/pl.x86.json +++ b/src/pl.x86.json @@ -655,11 +655,11 @@ { "folder-name": "HTMLTag_unicode", "display-name": "HTML Tag", - "version": "1.6.0.0", + "version": "1.6.1.0", "npp-compatible-versions": "[7.7,]", "old-versions-compatibility": "[,1.1][,7.6.6]", - "id": "94872e5cc49d7b7e8bff641b1fc292ffbaba7a2d6841fe708137d4276d1384f6", - "repository": "https://github.com/rdipardo/nppHTMLTag/releases/download/v1.6.0/HTMLTag_v1.6.0.zip", + "id": "1d4fb8d05d14837620af8efa9314beb999ee99ab6760d0d3ea511afcab489808", + "repository": "https://github.com/rdipardo/nppHTMLTag/releases/download/v1.6.1/HTMLTag_v1.6.1.zip", "description": "Provides three core functions:\r\n- HTML and XML tag jumping, like the built-in brace matching and selection\r\n of tags and/or contents.\r\n- HTML entity encoding/decoding (example: é to é)\r\n- JS character encoding/decoding (example: é to \\u00E9)", "author": "Martijn Coppoolse", "homepage": "https://github.com/rdipardo/nppHTMLTag" @@ -882,10 +882,10 @@ { "folder-name": "MarkdownTableEditor", "display-name": "Markdown Table Editor", - "version": "11.0.2", + "version": "11.1.0", "npp-compatible-versions": "[7.5.9,]", - "id": "2f8fe08ab6c4c55b2111df2de398ecb185fa2691dea41083fad0e1f2138cb785", - "repository": "https://github.com/krotname/NppMarkdownTableEditor/releases/download/v11.0.2/MarkdownTableEditor-11.0.2-x86-pluginadmin.zip", + "id": "8d5b66e539cceef2bce664433616eacdf57c22cbd590d155f11c5d6266877bf5", + "repository": "https://github.com/krotname/NppMarkdownTableEditor/releases/download/v11.1.0/MarkdownTableEditor-11.1.0-x86-pluginadmin.zip", "description": "Edits Markdown pipe tables as aligned text. Align, fit width, narrow or widen columns, navigate, insert, delete, move and sort rows or columns, convert CSV/TSV blocks, and insert new tables from Notepad++.", "author": "Kreout", "homepage": "https://github.com/krotname/NppMarkdownTableEditor" diff --git a/validator.py b/validator.py index 816ece204..62c0d0305 100755 --- a/validator.py +++ b/validator.py @@ -10,11 +10,26 @@ import requests from jsonschema import Draft202012Validator, FormatChecker +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry from win32api import GetFileVersionInfo, LOWORD, HIWORD, error as win32api_error api_url = os.environ.get('APPVEYOR_API_URL') has_error = False +# Every run downloads the archive of every plugin in the list, so a single transient hiccup on any +# entry - a dropped connection, a gateway timeout - fails the whole validation and hides the real +# result. Retry those, and give up only when a host is genuinely unreachable. +DOWNLOAD_TIMEOUT_SECONDS = 60 +DOWNLOAD_RETRIES = Retry( + total=3, + backoff_factor=2, + status_forcelist=(408, 425, 429, 500, 502, 503, 504), + allowed_methods=frozenset(['GET']), + # Let the existing status code check report a persistent failure with its own message. + raise_on_status=False, +) + # Constants for creating the plugin list overview C_LINE_BREAK = '\x0d' C_LINE_FEED = '\x0a' @@ -38,6 +53,14 @@ def get_version_number(filename): return '.'.join(map(str, [HIWORD(ms), LOWORD(ms), HIWORD(ls), LOWORD(ls)])) +def create_download_session(): + session = requests.Session() + adapter = HTTPAdapter(max_retries=DOWNLOAD_RETRIES) + session.mount('https://', adapter) + session.mount('http://', adapter) + return session + + def post_error(message): global has_error @@ -182,6 +205,7 @@ def parse(filename): shutil.rmtree("./" + provided_architecture, True) os.mkdir("./" + provided_architecture) + download_session = create_download_session() for plugin in pl["npp-plugins"]: print(plugin["display-name"], end='') @@ -201,7 +225,10 @@ def parse(filename): print(f' *** {"; ".join(compatibility_messages)} ***') try: - response = requests.get(unquote_url(plugin["repository"])) + response = download_session.get( + unquote_url(plugin["repository"]), + timeout=DOWNLOAD_TIMEOUT_SECONDS, + ) except requests.exceptions.RequestException as e: post_error(f'{plugin["display-name"]}: {str(e)}') continue