0

我在 Github Action/Workflow 的以下部分遇到问题,该部分旨在拉取远程私有 repo(例如,不是包含 Action 本身的 repo)的 PR 列表(带有一些过滤)。

  - run: echo "PR2=$( gh pr list --head "${{ env.BRANCH_NAME }}" --repo github.com/[OWNER]/[REMOTE_REPO] | tr -s [:space:] ' ' | cut -d' ' -f1 )" >> $GITHUB_ENV
     env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

但是,我收到以下错误:GraphQL: Could not resolve to a Repository with the name '[OWNER]/[REMOTE_REPO]'. (repository)

我认为某处的身份验证存在一些问题,因为在使用 gh auth 进行身份验证后,这些命令可以在终端中完美运行。我是 Github 整体、Actions 和 CLI 的新手,因此任何关于如何在操作中正确进行身份验证的建议都会令人惊叹。

编辑:找到解决方案/解决方法。

使用 git ls-remote 获取 PR 和分支的列表,然后使用 ID 链接两者。备查:

id=$(git ls-remote git@github.com:[OWNER]/[REMOTE_REPO] | grep "${{ env.BRANCH_NAME }}" | head -c 40)
PR=$(git ls-remote git@github.com:[OWNER]/[REMOTE_REPO] | grep "${id}.*refs/pull" | cut -b 52- | rev | cut -b 6- | rev)
4

2 回答 2

0

您不需要专门使用 进行身份验证gh auth,但在这种情况下,您应该使用生成的 PAT 可以访问私有存储库。

  1. 例如,生成一个可以访问您的私人仓库的 PAT,步骤:https ://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

  2. 将 PAT 作为机密添加到您拥有工作流程的存储库中,例如PRIVATE_REPO_PAT,步骤:https ://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-一个存储库

然后,您可以在工作流程中使用它,例如:

- run: echo "PR2=$( gh pr list --head "${{ env.BRANCH_NAME }}" --repo github.com/[OWNER]/[REMOTE_REPO] | tr -s [:space:] ' ' | cut -d' ' -f1 )" >> $GITHUB_ENV
     env:
      GITHUB_TOKEN: ${{ secrets.PRIVATE_REPO_PAT }}

请注意,如果您确实想以“非交互方式”使用 gh auth,例如在 shell 脚本中,您始终可以使用:

echo "$GH_CONFIG_TOKEN" | gh auth login --with-token

其中 GH_CONFIG_TOKEN 是默认的 GITHUB_TOKEN 或生成的 PAT。

为了在 Github Actions 中使用,当您在env 变量中传入正确的GITHUB_TOKEN时,此身份验证是隐式的。

于 2022-01-06T20:43:01.413 回答
0

有一个非交互式身份验证的开放功能请求:Add flags to gh auth login 以替换交互式提示

你可以使用github-script

steps:
  - name: Find Pull Request
    uses: actions/github-script@v5
    with:
      github-token: ${{ secrets.TOKEN_FOR_PRIVATE_REPO }}
      script: |
        const pulls = github.rest.pulls.list({
          owner: '[OWNER]',
          head: '${{ env.BRANCH_NAME }}',
          repo: '[REMOTE_REPO]',
        });

请注意它如何传递一个单独的github-token. 默认令牌 ( secrets.GITHUB_TOKEN) 无法访问您的其他私有存储库,因此您必须发出另一个令牌并将其设置为 secret

如果你不想使用 github 脚本,你也可以使用普通 curl 和新发行的令牌。这是 REST API 上的文档:https ://docs.github.com/en/rest/reference/pulls#list-pull-requests以及如何使用令牌:https ://docs.github.com/en/休息/概述/其他身份验证方法#via-oauth-and-personal-access-tokens

于 2021-12-14T07:27:40.317 回答