AMO CI 总是给出 Duplicate add-on ID found

AMO CI always gives Duplicate add-on ID found

我目前正在尝试使用此 API / 端点 https://addons.mozilla.org/api/v3/addons.

在我的构建管道中自动更新我的 Web 扩展

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

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}"
    }
}

如果我删除这个 "applications" 属性,它就会通过,但它会创建一个新的扩展而不是更新现有的扩展。我已经区分了现有扩展和新扩展的清单,除了 JSON 的某些格式和版本属性的明显差异外,它们看起来完全相同。

我错过了什么,AMO API 实际上无法将我的更新与我现有的扩展相匹配?

虽然我没有测试过,但您显然是在将请求发送到 URL,这是针对您的附加组件的 WebExtensions without an ID rather than the URL which is for uploading a new version,并带有一个 ID。 AMO 使用附加组件 ID 将附加组件与当前存在的附加组件相匹配。 WebExtension 唯一没有 ID 的情况是您第一次将新扩展上传到 AMO(并且您选择在开发期间不自己分配 ID)。

首次将加载项上传到 AMO 并列出 WebExtension 后,它就有一个 ID。因此,我假设文档不是 100% 清楚上传没有 ID 是 only 上传 new 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 实际使用的描述。

请对此进行测试,以验证您是否可以使用正常 URL 上传新版本(包括 manifest.json 中的 applications) ] 用于上传版本。如果您确认可行,我将向文档提交拉取请求以使其更加清晰。

注意:documentation on MDN 在谈到更新您的附加组件时指出:

It's essential with this workflow that you update the add-on manually using its page on AMO, otherwise AMO will not understand that the submission is an update to an existing add-on, and will treat the update as a brand-new add-on.

但是,应该注意的是,即使该部分也在讨论更新没有在 applications 键中指定的 ID 的附加组件。因此,即使是该文档也不是 100% 清楚的。

其他可能性

如果您使用的 URL 实际上是为没有 ID 的新 WebExtensions 和 具有 ID 的现有 WebExtensions 的新版本设计的:

  1. 您已经上传了 1.0.17 版的插件。如果是这样,则存在 returns "Duplicate add-on ID found." 错误而不是让错误文本解释此 ID 存在重复版本的错误。如果是这种情况,那么我会考虑在文档中也需要澄清 URL 适用于带 ID 和不带 ID 的 WebExtensions:声明它没有 ID 仅针对 URL 使用和参数传递给 API.
  2. 您还没有上传 1.0.17 版的插件。如果是这样,则存在不允许上传现有附加 ID 的新版本的错误。一个简单的解决方案是声明这是预期的操作并更改文档以明确应该使用“with ID”URL/PUT 而不是新的附加组件,“without ID " URL/POST.