在我的一个存储库(存储库A)中,有一个脚本可以获取另一个存储库(存储库B,不是我的存储库)上文件的内容。因此,每当存储库B有推送时,我希望在存储库A上触发GitHub操作。我没有看到这种情况在GitHub操作触发文档中,这可能吗?
您可以使用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)")
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
编辑:由于 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
) 的工作流程。这将产生以下事件:
on: push
工作流被触发,并运行调用 Repo A API 端点 (例如使用 curl
) 的步骤。on: repository_dispatch
工作流程。