AMO CI始终提供重复的附加ID

时间:2017-06-10 10:25:36

标签: firefox firefox-webextensions amo

我目前正尝试使用此API /端点https://addons.mozilla.org/api/v3/addons在我的构建管道中自动更新我的网络扩展程序。

所以我使用的实际命令如下所示:

curl "https://addons.mozilla.org/api/v3/addons/" -g -XPOST --form "upload=@dist/firefox/psono.firefox.PW.zip" -F "version=1.0.17" -H "Authorization: JWT ABCDEFG..."

(文档http://addons-server.readthedocs.io/en/latest/topics/api/signing.html#uploading-without-an-id

我现在所处的地方(经过大量尝试和身份验证错误后):

{"error":"Duplicate add-on ID found."} 

我明白了这一点:

"manifest_version": 2,
"name": "psono.PW",
"description": "Psono Password Manager",
"version": "1.0.17",

... alot of other stuff ...

"applications": {
    "gecko": {
        "id": "{3dce78ca-2a07-4017-9111-998d4f826625}"
    }
}

如果我删除这个"应用程序"属性,然后它通过,但它创建一个新的扩展而不是更新现有的扩展。我已经将现有扩展和新版本的清单区分开了,除了JSON的一些格式和版本属性的明显区别之外,它们看起来完全相同。

我缺少什么,AMO API实际上无法将我的更新与我现有的扩展名匹配?

1 个答案:

答案 0 :(得分:2)

虽然我尚未对其进行测试,但您显然是将请求发送到WebExtensions without an ID的网址,而不是带有ID的加载项uploading a new version的网址。 AMO使用附加ID来匹配当前存在的附加组件。 WebExtension没有ID的唯一时间是您第一次将新扩展名上传到AMO(并且您已选择在开发期间不自行分配ID)。

首次将附加组件上传到AMO并列出WebExtension后,它会有一个ID。因此,我认为文档并非100%明确表示没有ID的上传仅 用于上传 WebExtension插件。唯一能让我认为你正在使用的URL 用于带有ID的WebExtensions的错误消息是声称可能的错误消息,但错误列表可能只是一个副本和放大器; - 从另一部分开始。

上传新的WebExtensions插件(不含ID):

curl "https://addons.mozilla.org/api/v3/addons/"
    -g -XPOST -F "upload=@build/my-addon.xpi" -F "version=1.0"
    -H "Authorization: JWT <jwt-token>"

上传新版附加组件(带ID):

curl "https://addons.mozilla.org/api/v3/addons/@my-addon/versions/1.0/"
    -g -XPUT --form "upload=@build/my-addon.xpi"
    -H "Authorization: JWT <jwt-token>"

例如在你的情况下:

curl "https://addons.mozilla.org/api/v3/addons/{3dce78ca-2a07-4017-9111-998d4f826625}/versions/1.0.17/"
    -g -XPUT --form "upload=@dist/firefox/psono.firefox.PW.zip"
    -H "Authorization: JWT ABCDEFG..."

我认为这是上传过程文档中的一个问题,其中应明确说明WebExtensions-no-ID URL的实际使用情况。

请对此进行测试,以验证您是否可以使用普通网址上传新版本(包括 manifest.json 中的applications)以上传版本。如果您确认有效,我会向文档提交拉取请求以使其更清晰。

注意:documentation on MDN在谈到更新您的插件时说明:

  

在此工作流程中,您必须使用其在AMO 上的页面手动更新加载项,否则AMO将无法理解提交是对现有加载项的更新,并将对待将更新作为全新的附加组件。

但是,应该注意的是,即使该部分也在讨论在没有applications密钥中指定的ID的情况下更新加载项。因此,即使该文件也不是100%明确。

替代可能性

如果您使用的URL实际上适用于没有ID 的现有WebExtensions的新版本的新WebExtensions:

  1. 您已经上传了1.0.17版的附加组件。如果是这样,有一个错误会返回"Duplicate add-on ID found."错误,而不是让错误文本说明此ID存在重复版本。如果是这种情况,那么我认为文档中还需要澄清URL是针对带有和没有ID的WebExtensions:表明它没有ID只是关于使用的URL和传递给它的参数。 API。
  2. 您尚未上传附加组件的1.0.17版本。如果是这样,则存在一个错误,该错误不允许上载已存在的附加ID的新版本。对此的一个简单解决方法就是声明这是预期的操作并更改文档以清楚地表明应该使用“with ID”URL / PUT而不是new-add-on,“without ID”URL / POST。