0

我正在创建一个 GitHub Actions 工作流来构建 npm 包并将其发布到 GitHub 包。repo 是一个带有多个包的 monorepo,所以我使用了 semantic-release-monorepo 工具。但是,发布步骤失败了,我不知道为什么。

我的 GitHub Actions 工作流文件如下(略删)

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    env:
      GH_TOKEN: ${{ secrets.MY_PAT }}

    steps:
      - name: Checkout repo
        uses: actions/checkout@v2

        run: |
          yarn install
          yarn build

      - name: Setup node for publishing to Github packages
        uses: actions/setup-node@v2
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          node-version: "12.x"
          registry-url: "https://npm.pkg.github.com"

      - name: Yarn publish packages
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 
        run: |
          yarn publish-packages

yarn publish-packages运行一个脚本,该脚本执行 lerna 命令以进行语义释放

lerna exec --concurrency 1 -- npx --no-install semantic-release -e semantic-release-monorepo

我已确保每个包的 repo package.json 和 package.json 都具有正确的存储库 url https://github.com/owner/repo.git,. 我的个人访问令牌有权回购、写入和删除包。

无论我更改什么配置,该步骤都会失败并显示以下消息:

命令“git push --dry-run --no-verify https://[secure]@github.com/xxx/xxx.git HEAD:develop”失败并显示错误消息远程:找不到存储库。26 致命:未找到存储库“https://github.com/xxx/xxx.git/”。

第二条消息是

EGITNOPERMISSION: '语义发布无法将版本标签推送到develop带有 URL 的远程 Git 存储库上 的分支https://[secure]@github.com/xxx/xxx.git

我尝试过的其他事情:

  • 在阅读GH 文档“GitHub Packages only support scoped npm packages”后,将 scope="@xxx" 添加到 setup-node 步骤
  • 根据语义发布文档,我尝试将 GH_TOKEN、GITHUB_TOKEN 和 NPM_TOKEN 设置为我的 PAT 或秘密中的 GITHUB_TOKEN 的每个组合。我相信文档说只支持 PAT。此外,不应要求 NPM_TOKEN,因为将 registry-url 与 setup-node 操作一起使用会创建一个NODE_AUTH_TOKEN默认使用的 .npmrc 文件。
  • 这里有一个几乎类似的问题但添加.git到他的存储库 url 似乎已经为他解决了这个问题
  • Github 文档说我应该能够使用 PAT 或 GITHUB_TOKEN 作为 .npmrc 文件中的身份验证令牌,所以这不应该是问题

我浏览了有关语义发布、语义发布-monorepo、GitHub Actions 和 GitHub Packages 的文档。如果我需要包含任何其他信息,请告诉我。

4

1 回答 1

0

经过更多的尝试和错误,我发现了原因。如果我的理解是正确的,Github 工作流程将在使用actions/checkout. 然后,它会保留此步骤中的凭据并将其重新用于发布包的步骤,即使我将个人访问令牌作为环境变量注入该步骤。

最后,解决方法是像这样在第一步中使用该persist-credentials选项

steps:
  - name: Checkout repo
    uses: actions/checkout@v2
    with:
      persist-credentials: false

然后在最后一步中使用个人访问令牌向 GitHub 进行身份验证,就像我指出的那样,我认为在我的问题中应该是正确的方法,因为语义发布文档声明仅支持 PAT 身份验证。

于 2021-06-15T12:26:55.663 回答