Github Action 触发另一个存储库更新(push、pull_request)

Loc*_*kna 6 continuous-integration github continuous-deployment

我在为我和一些朋友设置适当的构建链时遇到一些麻烦。因此,我分叉了两个存储库:官方 ghidra 和 ghidra-ci。ghidra-ci 是一个构建您的 ghidra 分支的存储库,当您挑选一些 pr 时,您可以添加一些尚未添加到官方 ghidra 存储库中的内容。

因此,ghidra-ci 应该在 ghidra 存储库更新时构建 ghidra 存储库。到目前为止,我设法在 ghidra-ci 本身更新时构建它。我用了

name: Ghidra Build
on: [push, pull_request]
Run Code Online (Sandbox Code Playgroud)

(此后仅是构建作业)

所以,我知道这是错误的。我删除了该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}}" }'
Run Code Online (Sandbox Code Playgroud)

所以,这个工作流程应该检查(我希望它在我更新 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
Run Code Online (Sandbox Code Playgroud)

这就是我收到的错误消息。我不知道我还可以尝试什么来完成这项工作。如果有人有一个在 ghidra 存储库更新时真正构建的解决方案,我很想听听。

Ben*_* W. 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"
Run Code Online (Sandbox Code Playgroud)

workflow_dispatch在那里您可以手动触发工作流程以进行测试。该run步骤只是转储事件负载,您可以将其替换为您想要的任何构建步骤;您可以通过按事件类型过滤来进一步过滤应触发的事件,例如

on:
  repository_dispatch:
    types:
      - mytrigger
Run Code Online (Sandbox Code Playgroud)

在 ghidra 中,您可以通过向 发送 POST 请求来生成该事件/repos/Lockna/ghidra-ci/dispatches,例如使用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
Run Code Online (Sandbox Code Playgroud)

同样,workflow_dispatch触发器允许手动触发。

对于身份验证,您必须使用至少具有public_repo范围的个人访问令牌;$GITHUB_TOKEN单独是行不通的。

设置的值event_type显示action在事件负载中。