diff --git a/README.md b/README.md index dc8660c..8622e7b 100644 --- a/README.md +++ b/README.md @@ -2,50 +2,47 @@ ![GitHub Build Status](https://img.shields.io/github/actions/workflow/status/syt2/zotero-addons-scraper/main.yml) ![GitHub Last Commit Time](https://img.shields.io/github/last-commit/syt2/zotero-addons-scraper/publish) -This is a script repository for scraping Zotero addon collections for [Zotero](https://www.zotero.org), intended for use with [Zotero addons](https://github.com/syt2/zotero-addons). - -*Switch to `(addon-scraper)` source in [Zotero addons](https://github.com/syt2/zotero-addons) to use this repository.* +This is a script repository for scraping Zotero addon collections for [Zotero](https://www.zotero.org), intended for use with [Zotero addons](https://github.com/syt2/zotero-addons). +> Switch to `(addon-scraper)` source in [Zotero addons](https://github.com/syt2/zotero-addons) to use this repository. The script utilizes the GitHub API and GitHub Actions to automatically scrape and parse addon information from the [addons](addons) folder, and publish to [`publish`](https://github.com/syt2/zotero-addons-scraper/blob/publish/addon_infos.json) branch and the latest release every day. ## Contributing New Addons If you have a new add-on to add, add an add-on information file in the [addons](addons) folder. -> typically, name it with `repo.replace('/', '#').json` -> -> If an add-on has different IDs for different Zotero versions, split them into multiple JSON files with different filename. - -The file format should be as follows: - +The file format should be as follows: ``` json { - "id": "zoteroAddons@ytshen.com", "name": "Zotero Addons", "repo": "syt2/zotero-addons", "releases": [ - { + { "targetZoteroVersion": "7", "tagName": "latest" }, - { - "targetZoteroVersion": "6", + { + "targetZoteroVersion": "6", "tagName": "0.6.0-3" } ] } ``` -or -``` json -{ - "repo": "syt2/zotero-scipdf", - "releases": [ - { - "targetZoteroVersion": "7", - "tagName": "latest" - } - ] -} -``` + +- `name`(optional): + The name of the plugin. + If not provided, the name will be extracted automatically from the XPI provided in release. +- `repo`(required): + The GitHub repository address of the plugin. +- `releases`(required): + Information about the plugin's XPI releases. + Provide at least one valid plugin release information. +- `targetZoteroVersion`(required): + The Zotero compatibility version for the plugin. + Supports `"6"` or `"7"`. +- `tagName`(required): + The release information in the GitHub repository. + Supports `"latest"`, `"pre"` or a specified tag name. + If `"latest"` or `"pre"` is used, the script will automatically retrieve the latest release information. ## Generated Format The output format for add-on information follows the format specified in [zotero-chinese/zotero-plugins](https://github.com/zotero-chinese/zotero-plugins). diff --git a/addon_keys.py b/addon_keys.py index 8b65c24..9e8eb51 100644 --- a/addon_keys.py +++ b/addon_keys.py @@ -1,4 +1,3 @@ -id = "id" name = "name" repo = "repo" releases = "releases" @@ -14,6 +13,8 @@ kgithub = "kgithub" releaseData = "releaseData" downloadCount = "downloadCount" assetId = "assetId" +id = "id" +xpiVersion = "xpiVersion" description = "description" star = "star" author = "author" @@ -24,6 +25,7 @@ avatar = "avatar" # from https://github.com/zotero-chinese/zotero-plugins/blob/main/src/plugins.ts # export interface PluginInfo { # // plugin id +# // @deprecated This property is deprecated. Use the id in releases instead. # id?: string; # # // plugin name @@ -43,7 +45,7 @@ avatar = "avatar" # // `pre`: Latest pre-release # // `string`: Corresponding to the `git.tag_name` of the release; # tagName: "latest" | "pre" | string; -# +# // @deprecated This property is deprecated. Use tagName instead. # currentVersion?: string; # xpiDownloadUrl?: { # github: string; @@ -55,6 +57,10 @@ avatar = "avatar" # releaseData?: string; # downloadCount?: number; # assetId?: number; +# // plugin xpi id +# id?: string; +# // plugin xpi version +# xpiVersion?: string; # }>; # # description?: string; diff --git a/addons/018#zotcard.json b/addons/018#zotcard.json index 7a9cbc0..56e7c8e 100644 --- a/addons/018#zotcard.json +++ b/addons/018#zotcard.json @@ -1,5 +1,4 @@ { - "id": "zoterozotcard@018.ai", "name": "ZotCard", "repo": "018/zotcard", "releases": [ diff --git a/addons/ChenglongMa#zoplicate.json b/addons/ChenglongMa#zoplicate.json index d855754..3632a82 100644 --- a/addons/ChenglongMa#zoplicate.json +++ b/addons/ChenglongMa#zoplicate.json @@ -1,5 +1,4 @@ { - "id": "zoplicate@chenglongma.com", "name": "Zoplicate", "repo": "ChenglongMa/zoplicate", "releases": [ diff --git a/addons/Dominic-DallOsto#zotero-reading-list.json b/addons/Dominic-DallOsto#zotero-reading-list.json index 1725082..2d534ab 100644 --- a/addons/Dominic-DallOsto#zotero-reading-list.json +++ b/addons/Dominic-DallOsto#zotero-reading-list.json @@ -1,5 +1,4 @@ { - "id": "reading-list@hotmail.com", "name": "Reading List for Zotero", "repo": "Dominic-DallOsto/zotero-reading-list", "releases": [ diff --git a/addons/MuiseDestiny#ZoteroStyle.json b/addons/MuiseDestiny#ZoteroStyle.json index e83cb7b..8b53d4a 100644 --- a/addons/MuiseDestiny#ZoteroStyle.json +++ b/addons/MuiseDestiny#ZoteroStyle.json @@ -1,5 +1,4 @@ { - "id": "zoterostyle@polygon.org", "name": "Ethereal Style", "repo": "MuiseDestiny/ZoteroStyle", "releases": [ diff --git a/addons/MuiseDestiny#eaiser-citation.json b/addons/MuiseDestiny#eaiser-citation.json index dad9ed1..a3606b4 100644 --- a/addons/MuiseDestiny#eaiser-citation.json +++ b/addons/MuiseDestiny#eaiser-citation.json @@ -1,5 +1,4 @@ { - "id": "zoterocitation@polygon.org", "name": "Eaiser Citation", "repo": "MuiseDestiny/eaiser-citation", "releases": [ diff --git a/addons/MuiseDestiny#zotero-figure.json b/addons/MuiseDestiny#zotero-figure.json index a99d1b2..6d2a6da 100644 --- a/addons/MuiseDestiny#zotero-figure.json +++ b/addons/MuiseDestiny#zotero-figure.json @@ -1,5 +1,4 @@ { - "id": "zoterofigure@polygon.org", "name": "PDF Figure", "repo": "MuiseDestiny/zotero-figure", "releases": [ diff --git a/addons/MuiseDestiny#zotero-gpt.json b/addons/MuiseDestiny#zotero-gpt.json index e48a44a..84cbea0 100644 --- a/addons/MuiseDestiny#zotero-gpt.json +++ b/addons/MuiseDestiny#zotero-gpt.json @@ -1,5 +1,4 @@ { - "id": "zoterogpt@polygon.org", "name": "Awesome GPT", "repo": "MuiseDestiny/zotero-gpt", "releases": [ diff --git a/addons/MuiseDestiny#zotero-reference.json b/addons/MuiseDestiny#zotero-reference.json index 6ff517c..4d7d09b 100644 --- a/addons/MuiseDestiny#zotero-reference.json +++ b/addons/MuiseDestiny#zotero-reference.json @@ -1,5 +1,4 @@ { - "id": "zoteroreference@polygon.org", "name": "Crush Reference", "repo": "MuiseDestiny/zotero-reference", "releases": [ diff --git a/addons/UB-Mannheim#zotero-ocr.json b/addons/UB-Mannheim#zotero-ocr.json index 63d1c00..ae505d0 100644 --- a/addons/UB-Mannheim#zotero-ocr.json +++ b/addons/UB-Mannheim#zotero-ocr.json @@ -1,5 +1,4 @@ { - "id": "zotero-ocr@bib.uni-mannheim.de", "name": "Zotero OCR", "repo": "UB-Mannheim/zotero-ocr", "releases": [ diff --git a/addons/argenos#zotero-mdnotes.json b/addons/argenos#zotero-mdnotes.json index ae6d05c..8a16aa7 100644 --- a/addons/argenos#zotero-mdnotes.json +++ b/addons/argenos#zotero-mdnotes.json @@ -1,5 +1,4 @@ { - "id": "mdnotes@mdnotes.github.io", "name": "Mdnotes for Zotero", "repo": "argenos/zotero-mdnotes", "releases": [ diff --git a/addons/bwiernik#zotero-shortdoi.json b/addons/bwiernik#zotero-shortdoi.json index 7871a21..e0d7f7a 100644 --- a/addons/bwiernik#zotero-shortdoi.json +++ b/addons/bwiernik#zotero-shortdoi.json @@ -1,5 +1,4 @@ { - "id": "zoteroshortdoi@wiernik.org", "name": "Zotero ShortDOI", "repo": "bwiernik/zotero-shortdoi", "releases": [ diff --git a/addons/daeh#zotero-obsidian-citations.json b/addons/daeh#zotero-obsidian-citations.json index 5f48270..befa035 100644 --- a/addons/daeh#zotero-obsidian-citations.json +++ b/addons/daeh#zotero-obsidian-citations.json @@ -1,15 +1,14 @@ { - "id": "daeda@mit.edu", "name": "MarkDBConnect", "repo": "daeh/zotero-obsidian-citations", "releases": [ - { - "targetZoteroVersion": "6", - "tagName": "latest" - }, { "targetZoteroVersion": "7", "tagName": "pre" + }, + { + "targetZoteroVersion": "6", + "tagName": "latest" } ] } diff --git a/addons/dvanoni#notero.json b/addons/dvanoni#notero.json index 6010b88..8ae4982 100644 --- a/addons/dvanoni#notero.json +++ b/addons/dvanoni#notero.json @@ -1,5 +1,4 @@ { - "id": "notero@vanoni.dev", "name": "Notero", "repo": "dvanoni/notero", "releases": [ diff --git a/addons/eschnett#zotero-citationcounts.json b/addons/eschnett#zotero-citationcounts.json index f6d0bc4..a245dbf 100644 --- a/addons/eschnett#zotero-citationcounts.json +++ b/addons/eschnett#zotero-citationcounts.json @@ -1,5 +1,4 @@ { - "id": "schnetter@gmail.com", "name": "Zotero Citation Counts Manager", "repo": "eschnett/zotero-citationcounts", "releases": [ diff --git a/addons/ethanwillis#zotero-scihub.json b/addons/ethanwillis#zotero-scihub.json index 0cd20ff..80ba475 100644 --- a/addons/ethanwillis#zotero-scihub.json +++ b/addons/ethanwillis#zotero-scihub.json @@ -1,5 +1,4 @@ { - "id": "scihub@example.com", "name": "Sci-Hub Plugin for Zotero", "repo": "ethanwillis/zotero-scihub", "releases": [ diff --git a/addons/fkguo#zotero-inspire.json b/addons/fkguo#zotero-inspire.json index 7f0abe7..1b43c5e 100644 --- a/addons/fkguo#zotero-inspire.json +++ b/addons/fkguo#zotero-inspire.json @@ -1,5 +1,4 @@ { - "id": "zoteroinspire@itp.ac.cn", "name": "Zotero Inspire", "repo": "fkguo/zotero-inspire", "releases": [ diff --git a/addons/github-young#zotero-better-authors.json b/addons/github-young#zotero-better-authors.json index ed3481b..3074e9a 100644 --- a/addons/github-young#zotero-better-authors.json +++ b/addons/github-young#zotero-better-authors.json @@ -1,5 +1,4 @@ { - "id": "betterauthors@github.com", "name": "Zotero Better Authors", "repo": "github-young/zotero-better-authors", "releases": [ diff --git a/addons/jlegewie#zotfile.json b/addons/jlegewie#zotfile.json index a461b79..252c57b 100644 --- a/addons/jlegewie#zotfile.json +++ b/addons/jlegewie#zotfile.json @@ -1,5 +1,4 @@ { - "id": "zotfile@columbia.edu", "name": "ZotFile", "repo": "jlegewie/zotfile", "releases": [ diff --git a/addons/l0o0#jasminum.json b/addons/l0o0#jasminum.json index 914b449..dd6e4d1 100644 --- a/addons/l0o0#jasminum.json +++ b/addons/l0o0#jasminum.json @@ -1,5 +1,4 @@ { - "id": "jasminum@linxzh.com", "name": "Jasminum", "repo": "l0o0/jasminum", "releases": [ diff --git a/addons/l0o0#tara.json b/addons/l0o0#tara.json index 3557761..1e2bafd 100644 --- a/addons/l0o0#tara.json +++ b/addons/l0o0#tara.json @@ -1,5 +1,4 @@ { - "id": "tara@linxzh.com", "name": "Tara", "repo": "l0o0/tara", "releases": [ diff --git a/addons/lychichem#zotfile.json b/addons/lychichem#zotfile.json index 5cb55e2..5dfb514 100644 --- a/addons/lychichem#zotfile.json +++ b/addons/lychichem#zotfile.json @@ -1,5 +1,4 @@ { - "id": "zotfile@columbia.edu", "name": "ZotFile 汉化版", "repo": "lychichem/zotfile", "releases": [ diff --git a/addons/northword#zotero-format-metadata.json b/addons/northword#zotero-format-metadata.json index bc3e7ab..fa2f1f6 100644 --- a/addons/northword#zotero-format-metadata.json +++ b/addons/northword#zotero-format-metadata.json @@ -1,5 +1,4 @@ { - "id": "zotero-format-metadata@northword.cn", "name": "Linter for Zotero", "repo": "northword/zotero-format-metadata", "releases": [ diff --git a/addons/redleafnew#delitemwithatt.json b/addons/redleafnew#delitemwithatt.json index 752829d..123021a 100644 --- a/addons/redleafnew#delitemwithatt.json +++ b/addons/redleafnew#delitemwithatt.json @@ -1,5 +1,4 @@ { - "id": "delitemwithatt@redleaf.me", "name": "DelItemWithAtt", "repo": "redleafnew/delitemwithatt", "releases": [ diff --git a/addons/redleafnew#zotero-updateifs.json b/addons/redleafnew#zotero-updateifs.json index a125155..52d5049 100644 --- a/addons/redleafnew#zotero-updateifs.json +++ b/addons/redleafnew#zotero-updateifs.json @@ -1,5 +1,4 @@ { - "id": "zoteroupdateifs@redleafnew.me", "name": "Zotero 更新影响因子", "repo": "redleafnew/zotero-updateifs", "releases": [ diff --git a/addons/redleafnew#zotero-updateifsE.json b/addons/redleafnew#zotero-updateifsE.json index 5e6c3eb..e13e0a5 100644 --- a/addons/redleafnew#zotero-updateifsE.json +++ b/addons/redleafnew#zotero-updateifsE.json @@ -1,5 +1,4 @@ { - "id": "greenfrog@redleafnew.me", "name": "Green Frog", "repo": "redleafnew/zotero-updateifsE", "releases": [ diff --git a/addons/retorquere#zotero-better-bibtex.json b/addons/retorquere#zotero-better-bibtex.json index 648a267..db9c7ba 100644 --- a/addons/retorquere#zotero-better-bibtex.json +++ b/addons/retorquere#zotero-better-bibtex.json @@ -1,5 +1,4 @@ { - "id": "better-bibtex@iris-advies.com", "name": "Better BibTex for Zotero", "repo": "retorquere/zotero-better-bibtex", "releases": [ diff --git a/addons/retorquere#zotero-open-pdf.json b/addons/retorquere#zotero-open-pdf.json index cea1c5e..221d61f 100644 --- a/addons/retorquere#zotero-open-pdf.json +++ b/addons/retorquere#zotero-open-pdf.json @@ -1,5 +1,4 @@ { - "id": "open-pdf@iris-advies.com", "name": "Open PDF", "repo": "retorquere/zotero-open-pdf", "releases": [ diff --git a/addons/retorquere#zotero-pmcid-fetcher.json b/addons/retorquere#zotero-pmcid-fetcher.json index 4803be0..ff49524 100644 --- a/addons/retorquere#zotero-pmcid-fetcher.json +++ b/addons/retorquere#zotero-pmcid-fetcher.json @@ -1,5 +1,4 @@ { - "id": "pmcid-fetcher@iris-advies.com", "name": "PMCID fetcher for Zotero", "repo": "retorquere/zotero-pmcid-fetcher", "releases": [ diff --git a/addons/retorquere#zotero-storage-scanner.json b/addons/retorquere#zotero-storage-scanner.json index 7bfd5d3..608a1ba 100644 --- a/addons/retorquere#zotero-storage-scanner.json +++ b/addons/retorquere#zotero-storage-scanner.json @@ -1,5 +1,4 @@ { - "id": "storage-scanner@iris-advies.com", "name": "Zotero Storage Scanner", "repo": "retorquere/zotero-storage-scanner", "releases": [ diff --git a/addons/scitedotai#scite-zotero-plugin.json b/addons/scitedotai#scite-zotero-plugin.json index 1a24afb..19a1818 100644 --- a/addons/scitedotai#scite-zotero-plugin.json +++ b/addons/scitedotai#scite-zotero-plugin.json @@ -1,5 +1,4 @@ { - "id": "scite@scite.ai", "name": "scite Plugin for Zotero", "repo": "scitedotai/scite-zotero-plugin", "releases": [ diff --git a/addons/syt2#Zotero-TLDR.json b/addons/syt2#Zotero-TLDR.json index 668c44f..12ab47b 100644 --- a/addons/syt2#Zotero-TLDR.json +++ b/addons/syt2#Zotero-TLDR.json @@ -1,5 +1,4 @@ { - "id": "zoterotldr@syt.com", "name": "Zotero TL;DR", "repo": "syt2/Zotero-TLDR", "releases": [ diff --git a/addons/syt2#zotero-addons.json b/addons/syt2#zotero-addons.json index 49eab3a..c9d29cb 100644 --- a/addons/syt2#zotero-addons.json +++ b/addons/syt2#zotero-addons.json @@ -1,5 +1,4 @@ { - "id": "zoteroAddons@ytshen.com", "name": "Zotero Addons", "repo": "syt2/zotero-addons", "releases": [ diff --git a/addons/syt2#zotero-scipdf .json b/addons/syt2#zotero-scipdf .json index 16dedb9..4a21506 100644 --- a/addons/syt2#zotero-scipdf .json +++ b/addons/syt2#zotero-scipdf .json @@ -1,5 +1,4 @@ { - "id": "scipdf@ytshen.com", "name": "Sci-PDF", "repo": "syt2/zotero-scipdf", "releases": [ diff --git a/addons/tefkah#zotero-night.json b/addons/tefkah#zotero-night.json index ffec416..e0824d3 100644 --- a/addons/tefkah#zotero-night.json +++ b/addons/tefkah#zotero-night.json @@ -1,5 +1,4 @@ { - "id": "night@tefkah.com", "name": "Night for Zotero", "repo": "tefkah/zotero-night", "releases": [ diff --git a/addons/volatile-static#Chartero.json b/addons/volatile-static#Chartero.json index 2fa62d0..e2b3d67 100644 --- a/addons/volatile-static#Chartero.json +++ b/addons/volatile-static#Chartero.json @@ -1,5 +1,4 @@ { - "id": "chartero@volatile.static", "name": "Chartero", "repo": "volatile-static/Chartero", "releases": [ diff --git a/addons/windingwind#zotero-actions-tags.json b/addons/windingwind#zotero-actions-tags.json index 8c1560f..29c583b 100644 --- a/addons/windingwind#zotero-actions-tags.json +++ b/addons/windingwind#zotero-actions-tags.json @@ -1,5 +1,4 @@ { - "id": "zoterotag@euclpts.com", "name": "Actions and Tags for Zotero", "repo": "windingwind/zotero-actions-tags", "releases": [ diff --git a/addons/windingwind#zotero-better-notes.json b/addons/windingwind#zotero-better-notes.json index abbb338..375a415 100644 --- a/addons/windingwind#zotero-better-notes.json +++ b/addons/windingwind#zotero-better-notes.json @@ -1,5 +1,4 @@ { - "id": "Knowledge4Zotero@windingwind.com", "name": "Better Notes for Zotero", "repo": "windingwind/zotero-better-notes", "releases": [ diff --git a/addons/windingwind#zotero-pdf-preview.json b/addons/windingwind#zotero-pdf-preview.json index a6b7740..20f1f9b 100644 --- a/addons/windingwind#zotero-pdf-preview.json +++ b/addons/windingwind#zotero-pdf-preview.json @@ -1,5 +1,4 @@ { - "id": "pdfpreview@windingwind.com", "name": "Preview for Zotero", "repo": "windingwind/zotero-pdf-preview", "releases": [ diff --git a/addons/windingwind#zotero-pdf-translate.json b/addons/windingwind#zotero-pdf-translate.json index 2b5a617..f8256dc 100644 --- a/addons/windingwind#zotero-pdf-translate.json +++ b/addons/windingwind#zotero-pdf-translate.json @@ -1,5 +1,4 @@ { - "id": "zoteropdftranslate@euclpts.com", "name": "Translate for Zotero", "repo": "windingwind/zotero-pdf-translate", "releases": [ diff --git a/addons/wshanks#Zutilo.json b/addons/wshanks#Zutilo.json index a2b5c19..d7ab90e 100644 --- a/addons/wshanks#Zutilo.json +++ b/addons/wshanks#Zutilo.json @@ -1,5 +1,4 @@ { - "id": "zutilo@www.wesailatdawn.com", "name": "Zutilo Utility for Zotero", "repo": "wshanks/Zutilo", "releases": [ diff --git a/addons/wshanks#lyz.json b/addons/wshanks#lyz.json index eba7892..4248fcb 100644 --- a/addons/wshanks#lyz.json +++ b/addons/wshanks#lyz.json @@ -1,5 +1,4 @@ { - "id": "lyz@zotero.org", "name": "LyZ", "repo": "wshanks/lyz", "releases": [ diff --git a/addons/yhmtsai#KeepZotero.json b/addons/yhmtsai#KeepZotero.json index 965cc22..c1ec47b 100644 --- a/addons/yhmtsai#KeepZotero.json +++ b/addons/yhmtsai#KeepZotero.json @@ -1,5 +1,4 @@ { - "id": "keepzotero@yhmtsai", "name": "KeepZotero", "repo": "yhmtsai/KeepZotero", "releases": [ diff --git a/main.py b/main.py index 7b80738..f5e5370 100644 --- a/main.py +++ b/main.py @@ -108,6 +108,10 @@ def parse(plugin, **kwargs): else: continue if 'tag_name' in release_info: + release[tagName] = release_info['tag_name'] + # todo: 删除currentVersion + # zotero-addons插件相关: + # 等待影响降低后再删除 (影响2023-12-14日之前的版本) release[currentVersion] = release_info['tag_name'] if 'assets' not in release_info: @@ -152,30 +156,18 @@ def parse(plugin, **kwargs): details = addon_details(xpi_filepath) except Exception as e: print(f'fetch addon detail of {plugin[repo]} failed: {e}') - # 对齐zotero-chinese的格式 - # if details: - # xpi_info = {} - # if "id" in details: - # xpi_info[id] = details["id"] - # if "name" in details: - # xpi_info[name] = details["name"] - # if "version" in details: - # xpi_info[currentVersion] = details["version"] - # if xpi_info: - # release[xpiInfo] = xpi_info if details: if detail_id := details.get('id'): - if plugin.get(id) and plugin[id] != detail_id: - print('🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘') - print(f'Addon id not matched in {plugin[repo]}') - print(f'{plugin[id]} <===> {detail_id}') - print('🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘') + release[id] = detail_id + # todo: 删除plugin外层的id + # zotero-addons插件相关: + # 等待影响降低后再删除 (影响2023-12-14日之前的版本) plugin[id] = detail_id if not plugin.get(name) and (detail_name := details.get('name')): plugin[name] = detail_name - if not release.get(currentVersion) and (detail_version := details.get('version')): - release[currentVersion] = detail_version + if detail_version := details.get('version'): + release[xpiVersion] = detail_version if not plugin.get(description) and (detail_desc := details.get('description')): if detail_desc != '__MSG_description__': plugin[description] = detail_desc @@ -260,7 +252,7 @@ def create_release(github_repository, **kwargs): 'tag_name': f'{cur_time}', 'target_commitish': 'master', 'name': f'{cur_time}', - 'body': 'publish addon_infos.json', + 'body': f'![](https://img.shields.io/github/downloads/{github_repository}/{cur_time}/total?label=downloads)\npublish addon_infos.json', 'draft': False, 'prerelease': False, 'generate_release_notes': False,