Github Action 如何在另一个仓库更新时触发 (push, pull_request)?

6

我和我的朋友在搭建一个适合我们的构建链时遇到了一些问题。 我 fork 了两个仓库,官方的 ghidra 和 ghidra-ci。 ghidra-ci 是一个可以构建你 fork 的 ghidra 的仓库。当你 cherry-pick 一些 pr's 时,可以添加一些官方 ghidra 仓库尚未添加的功能。

所以,当 ghidra 仓库更新时,ghidra-ci 应该构建 ghidra 仓库。 到目前为止,我已经成功地让它在 ghidra-ci 自身更新时构建。我使用了

name: Ghidra Build
on: [push, pull_request]

(以下仅为构建作业)
所以,我知道这是错误的。 我删除了on:行,但它需要一个on:行,所以我只是粘贴了on:[workflow_dispatch]。我不知道这是否会起作用。
我有一个名为“检查新提交”的工作流程。
name: Check for new commits
on:
  schedule:
    - cron: '30 12 * * *'
  workflow_dispatch:
    inputs: {}

jobs:
  # Ensure all steps use a common revision
  check:
    name: Check for new commits since last release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          repository: Lockna/Ghidra
      - name: Check for new commits
        id: check
        run: |
          LAST_REL_NAME=$(curl --silent "https://api.github.com/repos/${{github.repository}}/releases/latest" | jq .name)
          LAST_REL_COMMITID=$(echo $LAST_REL_NAME | grep -oP "\(\K\w+(?=\))")
          COMMIT_HASH_SHORT=$(git rev-parse --short HEAD)
          COMMIT_HASH_LONG=$(git rev-parse HEAD)
          echo "Latest commit is $COMMIT_HASH_LONG"
          if [[ "$LAST_REL_NAME" == *"$COMMIT_HASH_SHORT"* ]]; then
            echo "No commits since last release $LAST_REL_NAME"
          else
            echo "Found new commits since $LAST_REL_NAME. Triggering ci."
            echo ::set-output name=trigger::true
            echo ::set-output name=rev::$COMMIT_HASH_LONG
            echo ::set-output name=lastrev::$LAST_REL_COMMITID
          fi
      - name: Trigger build
        if: steps.check.outputs.trigger
        uses: benc-uk/workflow-dispatch@v1.1
        with:
          workflow: "Ghidra Build"
          repo: Lockna/ghidra-ci
          token: ${{secrets.PAT_TOKEN}}
          inputs: '{ "rev": "${{steps.check.outputs.rev}}", "prevRev": "${{steps.check.outputs.lastrev}}" }'

因此,这个工作流程应该检查(我更喜欢在我更新ghidra本身时触发它,但我已经发现这不像我想要的那样运行)是否有一些更改,如果有,它应该触发“Ghidra Build”工作流程。为了测试,我手动运行这个构建。

Run benc-uk/workflow-dispatch@v1.1
  with:
    workflow: Ghidra Build
    repo: Lockna/ghidra-ci
    token: ***
    inputs: { "rev": "c1a1674214007bf467dd90f6d80fda453d25b16c", "prevRev": "133d6c2" }
Workflow id is: 3932827
Error: Unexpected inputs provided

这是我收到的错误信息。 我不知道还能尝试什么来使它工作。 如果有人有一个解决方案,在ghidra仓库更新后确实可以构建,我想听听。

1个回答

7
你可以让ghidra-ci监听repository_dispatch事件:
name: Listener for ghidra

on:
  repository_dispatch:
  workflow_dispatch:

jobs:
  dump:
    runs-on: ubuntu-20.04
    steps:
      - name: Dump event payload
        run: |
          jq . "$GITHUB_EVENT_PATH"

workflow_dispatch是用来手动触发工作流进行测试的。 run步骤只是转储事件有效负载,您可以将其替换为任何构建步骤;您还可以通过按事件类型过滤来进一步筛选应触发哪些事件,例如:

on:
  repository_dispatch:
    types:
      - mytrigger

在ghidra中,您可以通过向/repos/Lockna/ghidra-ci/dispatches发送POST请求来生成该事件,例如使用GitHub CLI
name: Notify ghidra-ci

on:
  push:
  workflow_dispatch:

jobs:
  notify:
    runs-on: ubuntu-20.04
    steps:
      - name: Create repository dispatch event
        env:
          GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
        run: |
          gh api repos/Lockna/ghidra-ci/dispatches \
              --raw-field event_type=mytrigger

再次强调,workflow_dispatch 触发器可以手动触发工作流。

在身份验证方面,您必须使用至少具有 public_repo 权限范围的个人访问令牌;仅使用 $GITHUB_TOKEN 是不起作用的。

设置 event_type 的值会显示为事件有效载荷中的 action


指定 workflow_dispatchtypes 似乎不再起作用了(6/22)。文档中也没有提到(https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch)。 - j2L4e
@j2L4e 这应该是 repository_dispatch 而不是 workflow_dispatchrepository_dispatch 确实 有一个类型,由实际负载确定。 - Benjamin W.
我明白了。谢谢! - j2L4e

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