如何用curl触发GitHub Action?遇404错误及兼容问题求助
问题解决:用Curl触发GitHub Action及统一Payload获取逻辑
一、404错误的原因及修复方案
返回Not Found通常由以下几种情况导致,逐一排查修复:
- 仓库路径拼写错误:确认API URL中的
pass-culture/pass-culture-app-native是正确的「所有者/仓库名」格式,检查大小写、拼写是否与实际仓库完全一致。 - Token有效性问题:确保生成的Token属于拥有该仓库读写权限的账号,且未过期、未被撤销(你的截图显示权限配置正确,可跳过权限检查)。
- 未指定GitHub API版本:GitHub API需要明确版本标识,将
Accept请求头修正为稳定版格式:Accept: application/vnd.github.v3+json。 - Workflow配置未同步到默认分支:修改后的
service-worker-test.yml必须提交到仓库默认分支(如master),GitHub仅读取默认分支的Workflow配置来响应repository_dispatch事件。
修正后的Curl命令
curl -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: Bearer $GITHUB_TOKEN" \ -X POST \ -d '{"event_type": "service-worker-test", "client_payload": {"versionFrom": "xxx"}}' \ https://api.github.com/repos/pass-culture/pass-culture-app-native/dispatches
(注:client_payload字段可按需添加自定义参数)
二、统一workflow_dispatch与repository_dispatch的Payload获取逻辑
通过在Workflow中添加参数统一提取逻辑,让后续业务代码无需区分触发来源:
方案1:用步骤输出统一参数
jobs: service-worker-test: runs-on: ubuntu-latest steps: - name: 统一提取参数 id: extract_params run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "versionFrom=${{ github.event.inputs.versionFrom }}" >> $GITHUB_OUTPUT elif [ "${{ github.event_name }}" = "repository_dispatch" ]; then echo "versionFrom=${{ github.event.client_payload.versionFrom }}" >> $GITHUB_OUTPUT fi - name: 执行业务逻辑 run: | echo "版本来源: ${{ steps.extract_params.outputs.versionFrom }}" # 后续代码直接使用上述统一参数即可
方案2:直接用表达式判断
在需要使用参数的位置,通过三元表达式直接获取,无需额外步骤:
- name: 执行业务逻辑 run: | echo "版本来源: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.versionFrom || github.event.client_payload.versionFrom }}"
两种方案都能让Workflow逻辑无需区分触发方式,实现参数获取的统一。
内容的提问来源于stack exchange,提问作者Dimitri Kopriwa
相关产品推荐
相关产品推荐

