首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“GitHub CLI在尝试按其发布名称下载命名版本时未找到的”

“GitHub CLI在尝试按其发布名称下载命名版本时未找到的”
EN

Stack Overflow用户
提问于 2022-09-20 00:37:06
回答 1查看 308关注 0票数 4

即使在剪切和粘贴前面运行的gh release list --repo $repoWithToken命令返回的发行版的确切名称时,退出代码1也会引发一个gh release list --repo $repoWithToken错误。

GitHub错误日志的相关部分是:

代码语言:javascript
复制
About list releases
exact_name_of_release_linux_n.1.2       _linux_n.1.2    2022-09-19T23:28:08Z
About to download release
release not found
Error: Process completed with exit code 1.

工作流的完整代码如下:

代码语言:javascript
复制
download-a-release-linux:
  runs-on: ubuntu-latest
  steps:
    - shell: bash
      name: Download a Release
      env:
        VERSION: ${{ inputs.version }}
        GH_TOKEN: ${{ secrets.GITPAT }}
      run: |
        echo "About list releases"
        repoWithToken="https://"$GH_TOKEN"@github.com/accountName/repoName"
        gh release list --repo $repoWithToken
        echo "About to download release"
        gh release download exact_name_of_release_linux_n.1.2 --repo $repoWithToken
        echo "About to list contents of directory after download"
        ls -al

$repoWithToken变量的填充是正确的,因为gh release list --repo $repoWithToken命令运行时没有出错,如上面的日志所示。

上面使用的是来自此链接的文档。

当我们将命令更改为使用标记名作为gh release download _linux_n.1.2 --repo $repoWithToken时,会引发相同的错误,以更接近于链接中的文档中给出的示例。

问题

为了成功下载gh release download发行版,需要在下面的GitHub工作流代码中的exact_name_of_release_linux_n.1.2 CLI命令中具体更改什么?

复制步骤

  1. 创建一个空回购,只需:
代码语言:javascript
复制
- a workflow file that includes the `download-a-release-linux` job shown above, and
- a `main.py` file with a simple `print("Hello World")` command to represent an app.
  1. 使用API创建一个发行版,如下所示,这可以在上面同一工作流中的前一项工作中完成: gh api \
  2. 获取发行版的名称,上面我们将其称为exact_name_of_release_linux_n.1.2
  3. 使用上面的代码运行包含download-a-release-linux作业的工作流,并对其进行任何必要的修改,以便成功下载发行版,并列出发行版中包含的应用程序的有效内容。
EN

回答 1

Stack Overflow用户

发布于 2022-09-22 03:12:32

仔细阅读你联系的那些医生。根据gh release download的docs,该命令采用git标记名,而不是GitHub发布名。

gh发行版下载

"exact_name_of_release_linux_n.1.2“是GitHub发行版的名称,而不是发行版的git标记名。_linux_n.1.2是该版本的git标记名。在撰写本文时,gh release list并没有实际解释输出表的每一列的含义。我只通过阅读GitHub cli工具的源代码就知道了。我稍后再解释。

回答

为了成功下载GitHub发行版,需要在下面的exact_name_of_release_linux_n.1.2工作流代码中的gh release命令中具体更改哪些内容?

您需要更改对gh release download的调用,以使用发行版的git 标记名称,而不是GitHub发行版的名称。

代码语言:javascript
复制
# ...
jobs:
  download-a-release-linux:
    runs-on: ubuntu-latest
    steps:
      - shell: bash
        name: Download a Release
        env:
          VERSION: ${{ inputs.version }}
          GH_TOKEN: ${{ secrets.GITPAT }}
        run: |
          echo "About to list releases"
          repoWithToken="https://"$GH_TOKEN"@github.com/accountName/repoName"
          gh release list --repo $repoWithToken
          echo "About to download release"
          gh release download _linux_n.1.2 --repo $repoWithToken
          echo "About to list contents of directory after download"
          ls -al
# ...

注意(因为您在混淆中对此进行了评论):tarball和zipball并不是发行版资产列表的一部分,尽管它们与GitHub版本UI中发布的其他实际资产显示在同一个列表中。如果您想下载这些文件,请使用--archive命令的gh release download参数。

此外,如果您已经设置了repoWithToken环境变量,那么我不认为您需要使用GH_TOKEN。您应该能够使用accountName/repoName

源代码阅读练习

注意:这适用于v2.16.1版本的源代码,但未来的行为可能会发生变化。

如果您查看命令,您将看到它打印了一个列所在的表:

  1. 发布名(如果没有为发行版设置发布名称,默认为git标记)
  2. 一种“徽章”,表示发布是最新的版本,还是草稿,还是发布前的版本。
  3. 发行版的git标记(这是gh release download期望接收的)
  4. 发布日期

如果您查看命令,您将看到当FindDraftRelease没有找到任何版本时返回“releases”错误,并跟踪对FindDraftRelease的调用,当FetchRelease试图使用给定的git标记查找一个版本时,当它生成通过git标记获得GitHub rest版本的调用时没有发现任何非草稿版本,就会调用该错误。

我已经打开了与GitHub cli工具的维护人员讨论的一个问题,主题是gh release list命令的表列的含义没有显式记录。这个问题已经通过一个更新来解决,它添加了一个标题行,标记输出的每一列意味着什么。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73780525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档