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

推送新提交后GitHub Action执行失败,求代码修改及用户通知方案

多语言手册分支管理GitHub Action修复与功能增强

问题概述

我有一个用于自动创建和更新PR的GitHub Action,负责多语言手册的分支管理:创建handbook_v1.1_en这类英文分支完成版本变更后,Action会自动生成7个对应其他语言的分支及PR,首次运行正常。但给英文PR推送新提交后执行报错,同时需要实现PR创建或更新时按语言通知指定用户(比如法语PR通知用户A,西班牙语PR通知用户B和C)。

错误原因分析

报错核心原因有两个:一是PR已存在时重复执行gh pr create触发"pull request already exists"错误;二是原分支同步的git pull命令格式错误,无法正确基于英文分支更新语言分支。

修改后的完整Action代码

name: Create Translation Branches and PRs

on:
  pull_request:
    types: [opened, reopened, synchronize]

jobs:
  create_translation_branches:
    if: startsWith(github.head_ref, 'handbook_v') && endsWith(github.head_ref, '_en') 
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0 # 拉取完整分支历史,避免rebase失败

      - name: Set up Git
        run: |
          git config --global user.name 'ntluong95'
          git config --global user.email 'ph.ntluong95@gmail.com'

      - name: Install GitHub CLI
        run: |
          sudo apt update
          sudo apt install -y gh

      - name: Create language branches and PRs
        run: |
          # 定义语言与通知用户的映射关系
          declare -A LANG_USERS=(
            ["fr"]="@userA"
            ["es"]="@userB @userC"
            ["vn"]="@userD"
            ["jp"]="@userE"
            ["tr"]="@userF"
            ["pt"]="@userG"
            ["ru"]="@userH"
          )
          
          PR_BRANCH="${{ github.head_ref }}"  
          VERSION_SUFFIX="${PR_BRANCH#handbook_}"
          BASE_BRANCH="main"

          for lang in "${!LANG_USERS[@]}"; do
            NEW_BRANCH="handbook_${VERSION_SUFFIX/_en/_$lang}"
            NOTIFY_USERS="${LANG_USERS[$lang]}"
            
            # 拉取远程分支(不存在则忽略)
            git fetch origin "$NEW_BRANCH" || true
            
            # 处理分支创建或同步逻辑
            if ! git rev-parse --verify --quiet "$NEW_BRANCH"; then
              # 从英文分支创建新语言分支
              git checkout -b "$NEW_BRANCH" "$PR_BRANCH"
            else
              # 切换到现有分支,基于英文分支rebase同步最新变更
              git checkout "$NEW_BRANCH"
              git rebase "$PR_BRANCH"
            fi
            
            # 安全强制推送rebase后的分支
            git push origin "$NEW_BRANCH" --force-with-lease
            
            # 检查PR是否已存在,存在则更新,不存在则创建
            PR_NUMBER=$(gh pr list --base "$BASE_BRANCH" --head "$NEW_BRANCH" --json number --jq '.[0].number')
            if [ -n "$PR_NUMBER" ]; then
              # 更新PR内容并添加通知
              gh pr edit "$PR_NUMBER" --body "Automated pull request for $lang handbook version ${VERSION_SUFFIX/_en/}\n\nPlease review: $NOTIFY_USERS"
            else
              # 创建新PR并通知指定用户
              gh pr create --base "$BASE_BRANCH" --head "$NEW_BRANCH" \
                --title "Handbook ${VERSION_SUFFIX/_en/} $lang" \
                --body "Automated pull request for $lang handbook version ${VERSION_SUFFIX/_en/}\n\nPlease review: $NOTIFY_USERS"
            fi
          done
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

关键修改说明

  1. 修复分支同步逻辑:

    • 改用git rebase "$PR_BRANCH"替代错误的git pull命令,确保语言分支基于最新的英文分支同步变更
    • 添加fetch-depth: 0拉取完整仓库历史,避免rebase时找不到对应提交
    • 使用--force-with-lease安全强制推送rebase后的分支,防止覆盖他人未提交的修改
  2. 解决重复创建PR报错:

    • 通过gh pr list查询PR是否已存在,存在则执行gh pr edit更新内容,不存在才创建新PR
  3. 实现按语言通知用户:

    • 新增LANG_USERS关联数组,直接定义每个语言对应的通知用户
    • 在PR正文末尾添加@提及指定用户,创建或更新PR时都会同步更新通知内容

内容的提问来源于stack exchange,提问作者Luong Nguyen Thanh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:52:38