Github 创建版本和发布版本之间的操作不同

Github Action different between release created and published

因为 Github Releases 实际上是一个 Git Tags,我想自动在有新版本(和标签)时升级我的 package.json 版本,使用 Github Action.

我知道我需要触发一个jobon: release,但是根据Github Actions docs我不知道我是否需要在created时触发,published,两者还是全部?

Git集线器说:

Note: The release event is not triggered for draft releases.

并且我创建了两个管道:一个 on: release, type: created 和一个 on: release, type: published

然后我 创建了 一个 draft 版本,然后我 发布了 它。

只有 published 管道被触发,而且是在我 发布 发布时触发的。

可以创建但不能发布版本。 草稿 版本就是这种情况。

我建议使用 published 类型的版本。

我的经历与所描述的相反here on the forum。测试时:

  • 如果发布是从 /releases 页面上的 "Draft a new release" 按钮创建的,随着发布从状态 "draft" 变为 "published",这两个事件都会触发。
  • 如果发布是由release-it这样的脚本创建的,绕过"draft"阶段直接变成"published",只有release:published会触发

显然,无需创建即可发布版本。确实很奇怪。我会选择 published

如果您试图将 Github 操作触发的发布的创建和发布捕获到另一个工作流程中,那么它是行不通的。

解决方案是将两个工作流程统一为一个工作流程,以便在创建发布后继续下一个工作流程。

来源:https://twitter.com/ethomson/status/1183838077166477316

示例:

name: Create Release and Publish

# Trigger the create release workflow
on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    name: Create Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          draft: false
          prerelease: false

  publish-gpr:
    needs: release # After release is created then run the second workflow
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: 10
          registry-url: https://npm.pkg.github.com/
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}