You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在仓库上传Artifact时触发GitHub工作流?硬件测试场景需求

解决方案

1. 事件驱动触发硬件测试工作流(无需轮询)

利用GitHub Actions的workflow_run事件,让每个复刻的A-hardware-test仓库主动监听项目A的目标工作流运行状态,实现纯事件触发,完全替代轮询方案:

在A-hardware-test模板的.github/workflows/hardware-test.yml中配置触发规则:

on:
  workflow_run:
    workflows: ["项目A的构建与虚拟测试工作流名称"] # 替换为项目A实际的工作流名称
    repositories: ["你的用户名/项目A"] # 替换为项目A的完整仓库路径
    types: [in_progress] # 匹配项目A工作流运行中状态,结合v4版Artifact提前可获取的特性,实现硬件测试与虚拟测试同步启动

当项目A的目标工作流进入运行中状态时,硬件测试仓库的工作流会自动触发。后续在工作流中添加步骤,用拥有项目A读取权限的PAT拉取对应运行ID的Artifact:

jobs:
  hardware-test:
    runs-on: self-hosted # 绑定对应真实硬件的自托管Runner
    steps:
      - name: 拉取项目A的构建产物
        env:
          PAT: ${{ secrets.PROJECT_A_PAT }}
          RUN_ID: ${{ github.event.workflow_run.id }}
          REPO: "你的用户名/项目A"
        run: |
          # 调用GitHub API获取Artifact下载链接并拉取
          ARTIFACT_URL=$(curl -s -H "Authorization: token $PAT" \
            https://api.github.com/repos/$REPO/actions/runs/$RUN_ID/artifacts | \
            jq -r '.artifacts[] | select(.name == "构建产物名称") | .archive_download_url')
          curl -L -H "Authorization: token $PAT" $ARTIFACT_URL -o artifact.zip
          unzip artifact.zip

2. 向项目A的PR反馈状态

通过GitHub API直接更新项目A对应PR的状态检查,实现任务接收、测试完成的全流程状态反馈:

步骤1:提取项目A工作流关联的PR编号

在硬件测试工作流中添加步骤,从项目A的工作流运行记录中获取关联的PR信息:

- name: 获取关联PR编号
        env:
          PAT: ${{ secrets.PROJECT_A_PAT }}
          RUN_ID: ${{ github.event.workflow_run.id }}
          REPO: "你的用户名/项目A"
        run: |
          EVENT_DATA=$(curl -s -H "Authorization: token $PAT" \
            https://api.github.com/repos/$REPO/actions/runs/$RUN_ID)
          PR_NUMBER=$(echo $EVENT_DATA | jq -r '.pull_requests[0].number')
          echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV

步骤2:实时更新PR状态检查

在测试启动时标记pending状态,测试结束后根据结果标记success/failure/error:

- name: 标记任务接收状态
        env:
          PAT: ${{ secrets.PROJECT_A_PAT }}
          REPO: "你的用户名/项目A"
          RUN_ID: ${{ github.run_id }}
        run: |
          curl -X POST -H "Authorization: token $PAT" \
            https://api.github.com/repos/$REPO/statuses/${{ github.event.workflow_run.head_sha }} \
            -d '{
              "state": "pending",
              "description": "硬件测试任务已接收,正在执行",
              "context": "hardware-test/你的硬件标识"
            }'

      # 此处添加真实硬件测试的执行步骤
      - name: 执行硬件测试
        run: ./run-hardware-tests.sh

      - name: 标记测试完成状态
        if: always()
        env:
          PAT: ${{ secrets.PROJECT_A_PAT }}
          REPO: "你的用户名/项目A"
          TEST_STATUS: ${{ job.status }}
          RUN_ID: ${{ github.run_id }}
        run: |
          STATE="success"
          if [ "$TEST_STATUS" = "failure" ]; then
            STATE="failure"
          elif [ "$TEST_STATUS" = "cancelled" ]; then
            STATE="error"
          fi
          
          curl -X POST -H "Authorization: token $PAT" \
            https://api.github.com/repos/$REPO/statuses/${{ github.event.workflow_run.head_sha }} \
            -d '{
              "state": "'"$STATE"'",
              "description": "硬件测试'"$STATE"'",
              "context": "hardware-test/你的硬件标识",
              "target_url": "https://github.com/你的用户名/A-hardware-test/actions/runs/'"$RUN_ID"'"
            }'

3. 模板化适配复刻需求

在A-hardware-test模板仓库中,将用户需要自定义的配置项通过GitHub Secrets和模板变量暴露:

  • 在模板的README.md中明确说明需配置的Secrets:PROJECT_A_PAT(拥有项目A repo权限的令牌)、PROJECT_A_REPO(项目A的完整仓库路径)
  • 将工作流中的硬编码值替换为模板变量(如{{ secrets.PROJECT_A_REPO }}),让复刻仓库的用户只需配置Secrets即可快速适配自身硬件环境。

内容的提问来源于stack exchange,提问作者troglobit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:07:42