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

GitHub Actions自动向上游仓库创建PR报HttpError:Not Found如何解决

错误原因

HttpError: Not Found 由多处配置错误共同导致:

  • 接口请求的目标仓库参数错误:原代码从context.repo取到的owner是fork仓库所属的组织账号,不是上游私有原始仓库的所属个人账号,同时repo字段填了完整URL占位,GitHub API的该字段仅接受仓库短名称,最终请求打到了错误的仓库地址,直接返回404
  • 跨仓库PR的head参数格式错误:跨fork创建PR时,head参数必须遵循fork所有者:分支名的格式,原代码只填了分支名main,GitHub会默认去目标上游仓库里找main分支作为PR源分支,不存在对应源分支就会报404
  • 步骤ID缺失:原代码中获取npm版本的步骤没有配置id,后续步骤无法读取到版本输出值
  • 触发条件冗余:pull_request事件会在PR发起、更新时触发,而非合并到main后触发,会导致工作流在PR未合入时就提前运行
  • 权限配置问题:如果Personal Token没有勾选私有仓库访问权限、secret存错位置、组织开启SAML后未给PAT授权,也会返回404无权限错误
修正后的工作流配置
name: CI

on:
  push:
    branches: [ "main" ]
  workflow_dispatch:

jobs:
  create-upstream-pr:
    runs-on: ubuntu-latest
    env:
      # 替换成你自己的上游仓库信息,不要填完整URL
      UPSTREAM_OWNER: 你的个人账号ID
      UPSTREAM_REPO_NAME: 原始私有仓库的短名称
      FORK_OWNER: ${{ github.repository_owner }}

    steps:
      - uses: actions/checkout@v3
      
      - name: Get current package version
        id: get-version # 必须配置步骤ID,后续才能读取输出
        uses: martinbeentjes/npm-get-version-action@v1.2.3

      - name: Print release version
        run: echo "Preparing to create upstream PR for version v${{ steps.get-version.outputs.current-version }}"
        
      - name: Create Pull Request to upstream
        uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.API_GITHUB }}
          script: |
            // 先判断是否已经存在开放的同版本PR,避免重复创建
            const existPr = await github.rest.pulls.list({
              owner: process.env.UPSTREAM_OWNER,
              repo: process.env.UPSTREAM_REPO_NAME,
              state: 'open',
              head: `${process.env.FORK_OWNER}:${{ github.ref_name }}`,
              base: 'main'
            })
            if (existPr.data.length > 0) {
              console.log("Existing open PR found, skip creation")
              return
            }
            const result = await github.rest.pulls.create({
              title: `release v${{ steps.get-version.outputs.current-version }}`,
              owner: process.env.UPSTREAM_OWNER,
              repo: process.env.UPSTREAM_REPO_NAME,
              head: `${process.env.FORK_OWNER}:${{ github.ref_name }}`,
              base: 'main',
              maintainer_can_modify: true
            });
            console.log(`PR created, address: ${result.data.html_url}`)
            
      - name: Task done
        run: echo "Upstream PR creation task finished"
前置检查项
  • 生成Personal Token时必须勾选完整的repo权限范围,否则无法操作私有仓库
  • API_GITHUB这个secret必须配置在组织账号下的fork仓库中,不要配置在个人账号或者组织全局层级
  • 如果组织开启了SAML单点登录,需要在Personal Token的配置页给该token授权对应组织的访问权限
  • 确认fork仓库和上游原始仓库的默认分支都是main,如果上游默认分支是master需要同步修改base参数值

内容的提问来源于stack exchange,提问作者Adrián

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:54:14