Github 操作增量版本推送到 main

use*_*536 10 github-actions

我想在 GitHub 操作中使用纯解决方案来增加包的版本。我不想使用 GitHub 市场中的任何现有操作,例如“gh-action-bump-version”。我有这个工作流程,它将增加版本并创建标签。

name: Version Increment

on:
  push:
    branches:
      - main
    tags-ignore:
      - v*

jobs:
  version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.ACCESS_TOKEN }}
      - run: git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
      - run: git config user.name "$GITHUB_ACTOR"
      - run: npm version minor -m "v%s"
      - run: VERSION=$(node -p "require('./package.json').version")
      - run: git tag ${VERSION}
      - run: git push origin --tags
      - run: git push origin --follow-tags
Run Code Online (Sandbox Code Playgroud)

它有效,但由于最后一行,它也会导致操作的循环运行。我知道我可以使用像“[RELEASE]”这样的自定义消息,并放置一个“if”条件并跳过这些提交。但我的问题是,是否有更好的解决方案可以从此操作中跳过这些提交并且不使用“if”条件?因为“标签忽略”显然不起作用。

use*_*536 14

所以我找到了几种解决方案。第一个是你可以将“[skip actions]”添加到提交消息中,并且该提交将跳过应在提交中运行的任何 github 操作。第二种是使用带有访问令牌的存储库地址。

这对我来说效果很好:

name: Version Increment

on:
  push:
    branches:
      - main

jobs:
  version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
      - run: git config user.name "$GITHUB_ACTOR"
      - run: npm version minor -m "v%s"
      - run: VERSION=$(node -p "require('./package.json').version")
      - run: git tag ${VERSION}
      - run: git push "https://$GITHUB_ACTOR:${{ secrets.ACCESS_TOKEN }}@github.com/$GITHUB_REPOSITORY.git" --follow-tags
      - run: git push "https://$GITHUB_ACTOR:${{ secrets.ACCESS_TOKEN }}@github.com/$GITHUB_REPOSITORY.git" --tags
Run Code Online (Sandbox Code Playgroud)


ske*_*s88 9

尝试使用内置的GITHUB_TOKEN而不是自定义的ACCESS_TOKEN。这应该可以防止工作流程触发另一个工作流程。

来自文档(https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow):

当您使用存储库的 GITHUB_TOKEN 执行任务时,GITHUB_TOKEN 触发的事件不会创建新的工作流运行。这可以防止您意外创建递归工作流运行。例如,如果工作流运行使用存储库的 GITHUB_TOKEN 推送代码,则即使存储库包含配置为在推送事件发生时运行的工作流,新工作流也不会运行。