如果推送另一个存储库,则触发 GitHub 操作

时间:2020-12-29 22:30:59

标签: github github-actions

在我的一个存储库(存储库 A)中,有一个脚本可以获取另一个存储库(存储库 B,而不是我的存储库)上的文件内容。因此,我想在每次对存储库 B 进行推送时触发对存储库 A 的 GitHub 操作。我没有看到这种情况 on GitHub actions trigger documentation,这可能吗?

2 个答案:

答案 0 :(得分:0)

编辑:这将不起作用,因为 OP 没有对 repo B 的推送访问

我认为您可以通过使用 repository_dispatch event 获得您想要的东西。当使用正确的有效负载 ping 端点时,这实际上会触发工作流。

来自文档:

<块引用>

要触发自定义 repository_dispatch 网络钩子事件,您必须向 GitHub API 端点发送 POST 请求并提供 event_type 名称来描述活动类型。要触发工作流运行,您还必须将工作流配置为使用 repository_dispatch 事件。

我最好的猜测是,您想要的解决方案可以通过创建 2 个工作流来实现:1 个在运行 on: repository_dispatch 的 Repo A 中,1 个在运行 on: push 并包含命中 Repo 的步骤的 Repo B 中A 的 API(例如使用 curl)。这将为您提供以下事件:

  1. 您推送到回购 B。
  2. 存储库 B 的 on: push 工作流被触发,并运行命中存储库 A 的 API 端点(例如使用 curl)的步骤。
  3. 存储库 A 的 API 端点接收负载并触发 on: repository_dispatch 工作流。

答案 1 :(得分:0)

您可以每天使用 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