在另一个仓库推送代码时触发 GitHub Actions。

12
在我的一个存储库(存储库A)中,有一个脚本可以获取另一个存储库(存储库B,不是我的存储库)上文件的内容。因此,每当存储库B有推送时,我希望在存储库A上触发GitHub操作。我没有看到这种情况在GitHub操作触发文档中,这可能吗?

不,GitHub Actions 并不原生支持这个。你能做到的最接近的是使用 cron 触发器,然后检查是否有任何更改。 - jonrsharpe
好的,那么比如说,每天在A仓库上运行我的GitHub操作? - bretauv
是的,就是那样。 - jonrsharpe
好的,谢谢。如果您愿意,请将此作为答案。 - bretauv
这个回答解决了您的问题吗?当另一个仓库创建新版本时触发 GitHub Action - user3064538
2个回答

5

您可以使用cron每天执行一个脚本,以启动或停止工作流程。脚本可以轻松地读取另一个存储库的最后提交日期。

检测最后一次提交是否在一天之内

使用此脚本,仅当最后一次提交在一天之内时,退出代码为0。

#!/bin/bash
exit $(curl -s https://api.github.com/repos/wikimedia/mediawiki/commits/REL1_36 | jq -r "((now - (.commit.author.date | fromdateiso8601) )  / (60*60*24)  | trunc)")

每天使用cron运行脚本。
name: trigger

on:
  schedule:
    - cron:  '30 5 * * *'

  workflow_dispatch:

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - run: ./isUpdated.sh

当有新的提交自昨天以来存在时启动您的工作流程

name: Your workflow
on:
  workflow_run:
    workflows: ["trigger"]
    types: [completed]

  workflow_dispatch:

jobs:
  check:
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - run: echo ok

4

编辑:由于 OP 没有对 Repo B 进行推送访问权限,因此这种方法无法实现。

我认为你可以通过使用 repository_dispatch 事件 来获得所需的结果。当正确负载的端点被 ping 时,这个事件就会触发工作流程。

以下是文档中的描述:

要触发自定义的 repository_dispatch webhook 事件,必须向 GitHub API 端点发送 POST 请求,并提供一个 event_type 名称来描述活动类型。要触发工作流程运行,还必须配置工作流以使用 repository_dispatch 事件。

我的最佳猜测是,你可以创建两个工作流程来实现你想要的解决方案:在 Repo A 中创建一个运行 on: repository_dispatch 的工作流程,在 Repo B 中创建一个运行 on: push 并包含调用 Repo A API 步骤 (例如使用 curl) 的工作流程。这将产生以下事件:

  1. 你推送到 Repo B。
  2. Repo B 的 on: push 工作流被触发,并运行调用 Repo A API 端点 (例如使用 curl) 的步骤。
  3. Repo A 的 API 端点接收到负载并触发 on: repository_dispatch 工作流程。

3
谢谢,但 Repo B 不是我创建的,所以我不能向其推送。 - bretauv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接