【问题标题】:Trigger a GitHub Action when another repository creates a new release当另一个存储库创建新版本时触发 GitHub 操作
【发布时间】:2020-02-16 06:56:39
【问题描述】:

我正在尝试构建一个 GitHub 工作流,该工作流将在另一个存储库创建新版本时触发。

在文档中,有一段:on.event_name.types 其中event_name 将是release

问题是:有没有办法引用另一个仓库的release事件?

【问题讨论】:

  • 我不这么认为。您需要访问创建版本的存储库。

标签: github github-actions github-webhook


【解决方案1】:

有没有办法引用另一个仓库的发布事件?

很确定这个功能不存在。

如果您有权访问创建版本的存储库,那么您可以调用 webhook 事件来触发 on: repository_dispatch 工作流以在另一个存储库中运行。在这种情况下,repository-dispatch 操作可以提供帮助。

如果您无权访问创建版本的存储库(我假设这里就是这种情况),那么这就是我的建议。首先,创建以下工作流,定期检查您要跟踪的存储库的发布版本标签。如果它与您当前保存在存储库中的发布版本不同,则将提交新版本。

请注意,您必须首先准备目标文件(例如 release-versions/swagger-ui-latest.txt),以便修改文件检查工作。 此外,您必须使用repo 范围令牌而不是默认的GITHUB_TOKEN。有关详细信息,请参阅Push to origin from GitHub action

name: Get latest release version
on:
  schedule:
    - cron:  '0 10 * * *'
jobs:
  get-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          token: ${{ secrets.REPO_SCOPED_TOKEN }}
      - name: Fetch release version
        run: |
          curl -sL https://api.github.com/repos/swagger-api/swagger-ui/releases/latest | \
          jq -r ".tag_name" > release-versions/swagger-ui-latest.txt
      - name: Check for modified files
        id: git-check
        run: echo ::set-output name=modified::$([ -z "`git status --porcelain`" ] && echo "false" || echo "true")
      - name: Commit latest release version
        if: steps.git-check.outputs.modified == 'true'
        run: |
          git config --global user.name 'Your Name'
          git config --global user.email 'your-email@users.noreply.github.com'
          git commit -am "New release version"
          git push

然后您可以创建第二个工作流,该工作流仅在看到目录release-versions 发生任何更改时运行。

on:
  push:
    paths:
      - 'release-versions/*'

在此工作流程中,您可以使用保存的版本来获取您需要的资产并进行任何您需要的处理。

这里是a similar example,它提出了一个拉取请求,而不是立即提交。

【讨论】:

  • 很遗憾你证实了我的预感。此外,感谢您分享您的方法。
  • 我想补充一下我的经验:而不是使用这个:$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi) 我认为最好使用:$([ -z "`git status --porcelain`" ] && echo "false" || echo "true") 为什么? git diff-index 也会在文件的修改时间戳发生变化的情况下返回一个值。这将导致提交失败,因为没有要提交的更改。使用git status 只会在实际内容发生变化时返回一些东西。
  • 我可以访问父仓库,请问您能否为我的案例编写示例代码?
  • @Boris,我发现本教程实现了触发另一个存储库工作流:keithweaver.ca/lessons/…
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2021-04-09
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
相关资源
最近更新 更多