From 00c6f9871f64f623c6ea5acd7f71a037c6625127 Mon Sep 17 00:00:00 2001 From: Syngnat <92659908+Syngnat@users.noreply.github.com> Date: Thu, 5 Mar 2026 17:17:03 +0800 Subject: [PATCH 1/3] Release/0.5.2 (#183) --- CONTRIBUTING.md | 154 ++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.zh-CN.md | 154 ++++++++++++++++++++++++++++++++++++++++++ README.md | 10 +-- README.zh-CN.md | 10 +-- 4 files changed, 318 insertions(+), 10 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTING.zh-CN.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..561dd32 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,154 @@ +# Contributing Guide + +Thank you for contributing to this project. + +This repository follows a release-first workflow: `main` is the default public branch, while releases are prepared through `release/*` branches. + +--- + +## Branch Model + +- `main`: stable release branch and default branch +- `dev`: day-to-day integration branch for maintainers +- `release/*`: release preparation branches for maintainers +- Recommended branch names for external contributors: + - `fix/*`: bug fixes + - `feature/*`: new features or enhancements + +Maintainer release flow: + +```text +feature/* / fix/* -> dev -> release/* -> main -> tag(vX.Y.Z) +``` + +--- + +## How External Contributors Should Open Pull Requests + +Whether your branch is `fix/*` or `feature/*`, external contributors should **open pull requests directly against `main`**. + +Reasons: + +- `main` is the default branch, so the PR entry point is clearer +- merged contributions are immediately visible on the default branch +- maintainers can handle downstream sync and release preparation in one place + +Recommended flow: + +1. Fork this repository +2. Create a branch in your fork (`fix/*` or `feature/*` is recommended) +3. Make your changes and perform basic self-checks +4. Push the branch to your fork +5. Open a pull request against the `main` branch of this repository + +--- + +## Pull Request Requirements + +Please keep each pull request focused, reviewable, and easy to validate. + +Recommended expectations: + +- one pull request should address one logical change +- use a clear title that explains the purpose +- include the following in the description: + - background and problem statement + - key changes + - impact scope + - validation method +- include screenshots or recordings for UI changes when helpful +- explicitly mention risk and rollback notes for compatibility, data, or build-chain changes + +--- + +## Merge Strategy for Maintainers + +Pull requests merged into `main` should generally use **Squash and merge**. + +Reasons: + +- keeps `main` history clean and linear +- maps each PR to a single commit on `main` +- reduces release, audit, and rollback complexity + +--- + +## Maintainer Sync Rules + +Because external pull requests are merged directly into `main`, maintainers must sync `main` back to development and release branches to avoid branch drift. + +### 1. Sync `main` -> `dev` (required) + +Every change merged into `main` must be synced into `dev`: + +```bash +git checkout dev +git pull +git merge main +git push +``` + +### 2. Create `release/*` from `dev` + +Before a release, create a release branch from `dev`, for example: + +```bash +git checkout dev +git pull +git checkout -b release/v0.6.0 +git push -u origin release/v0.6.0 +``` + +### 3. Release from `release/*` back to `main` + +When release preparation is complete, merge the release branch back into `main` and create a tag: + +```bash +git checkout main +git pull +git merge release/v0.6.0 +git push +git tag v0.6.0 +git push origin v0.6.0 +``` + +### 4. Sync `main` back to `dev` after release + +After the release, sync `main` back into `dev` again: + +```bash +git checkout dev +git pull +git merge main +git push +``` + +--- + +## Commit Message Recommendation + +Keep commit messages clear and easy to audit. + +Recommended format: + +```text +emoji type(scope): concise description +``` + +Examples: + +```text +🔧 fix(ci): fix DuckDB driver toolchain on Windows AMD64 +✨ feat(redis): add Stream data browsing support +♻️ refactor(datagrid): optimize large-table horizontal scrolling and rendering +``` + +--- + +## Additional Notes + +- Please include validation results for documentation, build-chain, or driver compatibility changes +- For larger changes, opening an issue or draft PR first is recommended +- Maintainers may ask contributors to narrow the scope if the change conflicts with the current project direction + +Thank you for contributing. diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md new file mode 100644 index 0000000..20cc60e --- /dev/null +++ b/CONTRIBUTING.zh-CN.md @@ -0,0 +1,154 @@ +# 贡献指南 + +感谢你对本项目的贡献。 + +本项目采用“发布优先(`main` 为默认分支)+ `release/*` 分支发版”的协作模型。为减少分支漂移与 PR 处理成本,请在提交贡献前先阅读本指南。 + +--- + +## 分支模型 + +- `main`:稳定发布分支,也是仓库默认分支 +- `dev`:日常开发集成分支,主要供维护者使用 +- `release/*`:发布准备分支,主要供维护者使用 +- 外部贡献者建议使用以下分支命名: + - `fix/*`:问题修复 + - `feature/*`:功能新增或增强 + +维护者发布流转如下: + +```text +feature/* / fix/* -> dev -> release/* -> main -> tag(vX.Y.Z) +``` + +--- + +## 外部贡献者如何提 Pull Request + +无论是 `fix/*` 还是 `feature/*`,**外部贡献者统一直接向 `main` 发起 Pull Request**。 + +这样做的原因: + +- `main` 是默认分支,PR 入口更直观 +- 合并后贡献会直接体现在默认分支 +- 便于维护者统一做后续同步与发版整理 + +建议流程: + +1. Fork 本仓库 +2. 从你自己的仓库创建分支(建议命名为 `fix/*` 或 `feature/*`) +3. 完成代码修改,并进行必要自检 +4. 推送到你的远程分支 +5. 向本仓库的 `main` 分支发起 Pull Request + +--- + +## Pull Request 要求 + +请尽量保证 PR 单一、清晰、可审核。 + +建议遵循以下要求: + +- 一个 PR 只解决一类问题,避免混入无关改动 +- 标题清晰说明改动目的 +- 描述中说明: + - 背景与问题 + - 变更点 + - 影响范围 + - 验证方式 +- 如涉及 UI 调整,建议附截图或录屏 +- 如涉及兼容性、数据变更或构建链路调整,请明确说明风险和回滚方式 + +--- + +## PR 合并策略(维护者) + +`main` 分支上的 PR 建议使用 **Squash and merge**。 + +原因: + +- 保持 `main` 历史干净、线性 +- 每个 PR 在 `main` 上对应一个清晰提交 +- 降低发布排查与回滚成本 + +--- + +## 维护者同步规则 + +由于外部 PR 会直接合入 `main`,维护者必须及时将 `main` 的变更同步到开发与发布分支,避免分支漂移。 + +### 1. main → dev 同步(必做) + +任何合入 `main` 的变更,都必须同步到 `dev`: + +```bash +git checkout dev +git pull +git merge main +git push +``` + +### 2. 发版前从 dev 切 release/* + +发布前由维护者基于 `dev` 创建发布分支,例如: + +```bash +git checkout dev +git pull +git checkout -b release/v0.6.0 +git push -u origin release/v0.6.0 +``` + +### 3. release/* → main 发版 + +发布准备完成后,将 `release/*` 合并回 `main`,并打标签发布: + +```bash +git checkout main +git pull +git merge release/v0.6.0 +git push +git tag v0.6.0 +git push origin v0.6.0 +``` + +### 4. main 回流到 dev(发版后必做) + +发布完成后,再次将 `main` 回流到 `dev`,确保开发线与发布线一致: + +```bash +git checkout dev +git pull +git merge main +git push +``` + +--- + +## 提交建议 + +建议保持提交信息简洁、明确,便于维护者审查与后续追踪。 + +推荐格式: + +```text +emoji type(scope): 中文描述 +``` + +示例: + +```text +🔧 fix(ci): 修复 Windows AMD64 下 DuckDB 驱动构建工具链 +✨ feat(redis): 新增 Stream 类型数据浏览支持 +♻️ refactor(datagrid): 优化大表横向滚动与渲染结构 +``` + +--- + +## 其他说明 + +- 文档、构建链路、驱动兼容性相关改动,请尽量附带验证结果 +- 若改动较大,建议先提 Issue 或 Draft PR,先对齐方案再实施 +- 如提交内容与项目当前架构方向冲突,维护者可能要求收敛范围后再合并 + +感谢你的贡献。 diff --git a/README.md b/README.md index de049cd..4ad80ac 100644 --- a/README.md +++ b/README.md @@ -200,11 +200,11 @@ If you use Linux artifacts with the `-WebKit41` suffix, prefer Debian 13 / Ubunt Issues and pull requests are welcome. -1. Fork the repository. -2. Create a feature branch. -3. Commit your changes. -4. Push to your branch. -5. Open a pull request. +For the full workflow, branch model, and maintainer sync rules, see: + +- [CONTRIBUTING.md](CONTRIBUTING.md) + +External contributors should open pull requests directly against `main`. ## License diff --git a/README.zh-CN.md b/README.zh-CN.md index b572ee8..3a2f2d5 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -183,11 +183,11 @@ sudo apt-get install -y libgtk-3-0 libwebkit2gtk-4.0-37 libjavascriptcoregtk-4.0 欢迎提交 Issue 与 Pull Request。 -1. Fork 本仓库。 -2. 创建特性分支。 -3. 提交改动。 -4. 推送分支。 -5. 发起 Pull Request。 +完整流程、分支模型与维护者同步规则请查看: + +- [CONTRIBUTING.zh-CN.md](CONTRIBUTING.zh-CN.md) + +外部贡献者统一直接向 `main` 发起 Pull Request。 ## 开源协议 From 4f5a7bd94b5a47d5285ec4d83d1fd48ad4379428 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Fri, 6 Mar 2026 09:40:49 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=A8=20feat(branch-sync):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20main=20=E5=9B=9E=E7=81=8C=20dev=20=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=90=8C=E6=AD=A5=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=B9=B6?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=AD=E8=8B=B1=E6=96=87=E8=B4=A1=E7=8C=AE?= =?UTF-8?q?=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sync-main-to-dev.yml | 136 +++++++++++++++++++++++++ CONTRIBUTING.md | 10 +- CONTRIBUTING.zh-CN.md | 10 +- 3 files changed, 152 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/sync-main-to-dev.yml diff --git a/.github/workflows/sync-main-to-dev.yml b/.github/workflows/sync-main-to-dev.yml new file mode 100644 index 0000000..8a4028b --- /dev/null +++ b/.github/workflows/sync-main-to-dev.yml @@ -0,0 +1,136 @@ +name: main 回灌 dev + +on: + push: + branches: + - main + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +concurrency: + group: sync-main-to-dev + cancel-in-progress: true + +jobs: + sync-main-to-dev: + name: 执行回灌同步 + runs-on: ubuntu-latest + steps: + - name: 检出代码 + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: 检查是否需要同步 + id: diff_check + shell: bash + run: | + set -euo pipefail + echo "开始检查 main 与 dev 的分支差异..." + git fetch origin main dev + ahead_count="$(git rev-list --count origin/dev..origin/main)" + echo "ahead_count=${ahead_count}" >> "$GITHUB_OUTPUT" + if [ "${ahead_count}" -eq 0 ]; then + echo "无需同步,dev 已包含 main 的最新提交。" + echo "has_changes=false" >> "$GITHUB_OUTPUT" + else + echo "检测到 ${ahead_count} 个待同步提交,准备创建或复用同步 PR。" + echo "has_changes=true" >> "$GITHUB_OUTPUT" + fi + + - name: 创建或复用同步 PR + id: sync_pr + if: steps.diff_check.outputs.has_changes == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + set -euo pipefail + existing_number="$(gh pr list --base dev --head main --state open --json number --jq '.[0].number // empty')" + + if [ -n "${existing_number}" ]; then + pr_number="${existing_number}" + pr_url="$(gh pr view "${pr_number}" --json url --jq '.url')" + echo "复用已有同步 PR:#${pr_number}" + echo "created=false" >> "$GITHUB_OUTPUT" + else + body_file="$(mktemp)" + { + echo "## 自动回灌:\`main -> dev\`" + echo + echo "- 触发条件:\`main\` 分支出现新提交(含贡献者直接合并到 \`main\` 的 PR)" + echo "- 目标:让 \`dev\` 持续吸收 \`main\` 的更新,避免发布前集中冲突" + echo + echo "### 合并建议" + echo "- 无冲突:直接合并该 PR(建议 \`Merge commit\`)" + echo "- 有冲突:在该 PR 内解决冲突后再合并" + } > "${body_file}" + pr_url="$(gh pr create \ + --base dev \ + --head main \ + --title "🔁 chore(sync): 回灌 main 到 dev" \ + --body-file "${body_file}")" + pr_number="${pr_url##*/}" + echo "已创建同步 PR:#${pr_number}" + echo "created=true" >> "$GITHUB_OUTPUT" + fi + + echo "pr_number=${pr_number}" >> "$GITHUB_OUTPUT" + echo "pr_url=${pr_url}" >> "$GITHUB_OUTPUT" + + - name: 检查合并状态 + id: merge_state + if: steps.diff_check.outputs.has_changes == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + set -euo pipefail + pr_number="${{ steps.sync_pr.outputs.pr_number }}" + mergeable="$(gh pr view "${pr_number}" --json mergeable --jq '.mergeable')" + merge_state_status="$(gh pr view "${pr_number}" --json mergeStateStatus --jq '.mergeStateStatus')" + echo "PR #${pr_number} 合并状态:mergeable=${mergeable}, mergeStateStatus=${merge_state_status}" + echo "mergeable=${mergeable}" >> "$GITHUB_OUTPUT" + echo "merge_state_status=${merge_state_status}" >> "$GITHUB_OUTPUT" + + - name: 可合并时开启自动合并 + id: auto_merge + if: steps.diff_check.outputs.has_changes == 'true' && steps.merge_state.outputs.mergeable == 'MERGEABLE' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + set -euo pipefail + pr_number="${{ steps.sync_pr.outputs.pr_number }}" + if gh pr merge "${pr_number}" --merge --auto; then + echo "已为 PR #${pr_number} 开启自动合并。" + echo "result=enabled" >> "$GITHUB_OUTPUT" + else + echo "::warning::自动合并开启失败,请手动处理并合并该 PR。" + echo "result=failed" >> "$GITHUB_OUTPUT" + fi + + - name: 写入执行摘要 + if: always() + shell: bash + run: | + { + echo "## main 回灌 dev 执行结果" + if [ "${{ steps.diff_check.outputs.has_changes }}" != "true" ]; then + echo "- 状态:无需同步(dev 已包含 main 最新提交)" + exit 0 + fi + echo "- PR:${{ steps.sync_pr.outputs.pr_url }}" + echo "- 可合并状态:${{ steps.merge_state.outputs.mergeable }}" + echo "- 合并状态详情:${{ steps.merge_state.outputs.merge_state_status }}" + if [ "${{ steps.merge_state.outputs.mergeable }}" = "CONFLICTING" ]; then + echo "- 结论:检测到冲突,需要手动处理后合并" + elif [ "${{ steps.auto_merge.outputs.result }}" = "enabled" ]; then + echo "- 结论:已启用自动合并(满足保护规则后将自动入 dev)" + else + echo "- 结论:PR 已创建/复用,请按分支策略人工合并" + fi + } >> "$GITHUB_STEP_SUMMARY" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 561dd32..ce2e2bf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -79,7 +79,13 @@ Because external pull requests are merged directly into `main`, maintainers must ### 1. Sync `main` -> `dev` (required) -Every change merged into `main` must be synced into `dev`: +This repository provides automatic sync via GitHub Actions workflow: + +- `.github/workflows/sync-main-to-dev.yml` +- Trigger: every push to `main` +- Behavior: create/reuse a PR from `main` to `dev`; if mergeable, it tries to enable auto-merge + +Manual fallback (when conflicts or automation is unavailable): ```bash git checkout dev @@ -114,7 +120,7 @@ git push origin v0.6.0 ### 4. Sync `main` back to `dev` after release -After the release, sync `main` back into `dev` again: +After the release, the same automation still applies. If needed, you can run the workflow manually (`workflow_dispatch`) or execute the fallback commands: ```bash git checkout dev diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md index 20cc60e..5e8f70c 100644 --- a/CONTRIBUTING.zh-CN.md +++ b/CONTRIBUTING.zh-CN.md @@ -79,7 +79,13 @@ feature/* / fix/* -> dev -> release/* -> main -> tag(vX.Y.Z) ### 1. main → dev 同步(必做) -任何合入 `main` 的变更,都必须同步到 `dev`: +仓库已提供 GitHub Actions 自动同步机制: + +- `.github/workflows/sync-main-to-dev.yml` +- 触发时机:每次 `main` 分支有新的 push +- 行为:自动创建或复用 `main` 到 `dev` 的同步 PR;若可合并,则尝试开启自动合并 + +当出现冲突,或自动化暂不可用时,使用以下手动兜底方式: ```bash git checkout dev @@ -114,7 +120,7 @@ git push origin v0.6.0 ### 4. main 回流到 dev(发版后必做) -发布完成后,再次将 `main` 回流到 `dev`,确保开发线与发布线一致: +发布完成后,仍沿用同一套自动化流程;如有需要,也可以手动触发 `workflow_dispatch`,或执行以下兜底命令,确保开发线与发布线一致: ```bash git checkout dev From 4aa177ed37a5795e0640d9fd2c4b13c49fd0e443 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Fri, 6 Mar 2026 11:05:27 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=20=F0=9F=94=A7=20chore(branch-sync):=20?= =?UTF-8?q?=E8=A1=A5=E5=85=85=20main=20=E5=9B=9E=E7=81=8C=20dev=20?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=89=8D=E7=BD=AE=E6=9D=A1=E4=BB=B6=E5=B9=B6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=B1=E8=B4=A5=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sync-main-to-dev.yml | 37 +++++++++++++++++++++----- CONTRIBUTING.md | 1 + CONTRIBUTING.zh-CN.md | 1 + 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/.github/workflows/sync-main-to-dev.yml b/.github/workflows/sync-main-to-dev.yml index 8a4028b..c46cbcf 100644 --- a/.github/workflows/sync-main-to-dev.yml +++ b/.github/workflows/sync-main-to-dev.yml @@ -49,6 +49,7 @@ jobs: shell: bash run: | set -euo pipefail + echo "permission_blocked=false" >> "$GITHUB_OUTPUT" existing_number="$(gh pr list --base dev --head main --state open --json number --jq '.[0].number // empty')" if [ -n "${existing_number}" ]; then @@ -58,6 +59,7 @@ jobs: echo "created=false" >> "$GITHUB_OUTPUT" else body_file="$(mktemp)" + error_file="$(mktemp)" { echo "## 自动回灌:\`main -> dev\`" echo @@ -68,14 +70,28 @@ jobs: echo "- 无冲突:直接合并该 PR(建议 \`Merge commit\`)" echo "- 有冲突:在该 PR 内解决冲突后再合并" } > "${body_file}" - pr_url="$(gh pr create \ + + if pr_url="$(gh pr create \ --base dev \ --head main \ --title "🔁 chore(sync): 回灌 main 到 dev" \ - --body-file "${body_file}")" - pr_number="${pr_url##*/}" - echo "已创建同步 PR:#${pr_number}" - echo "created=true" >> "$GITHUB_OUTPUT" + --body-file "${body_file}" 2>"${error_file}")"; then + pr_number="${pr_url##*/}" + echo "已创建同步 PR:#${pr_number}" + echo "created=true" >> "$GITHUB_OUTPUT" + else + error_message="$(tr '\n' ' ' < "${error_file}")" + if printf '%s' "${error_message}" | grep -Fq "GitHub Actions is not permitted to create or approve pull requests"; then + echo "::warning::仓库未开启“Allow GitHub Actions to create and approve pull requests”,已跳过自动创建同步 PR。" + echo "permission_blocked=true" >> "$GITHUB_OUTPUT" + echo "created=false" >> "$GITHUB_OUTPUT" + echo "pr_number=" >> "$GITHUB_OUTPUT" + echo "pr_url=" >> "$GITHUB_OUTPUT" + exit 0 + fi + echo "::error::创建同步 PR 失败:${error_message}" + exit 1 + fi fi echo "pr_number=${pr_number}" >> "$GITHUB_OUTPUT" @@ -83,7 +99,7 @@ jobs: - name: 检查合并状态 id: merge_state - if: steps.diff_check.outputs.has_changes == 'true' + if: steps.diff_check.outputs.has_changes == 'true' && steps.sync_pr.outputs.permission_blocked != 'true' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: bash @@ -98,7 +114,7 @@ jobs: - name: 可合并时开启自动合并 id: auto_merge - if: steps.diff_check.outputs.has_changes == 'true' && steps.merge_state.outputs.mergeable == 'MERGEABLE' + if: steps.diff_check.outputs.has_changes == 'true' && steps.sync_pr.outputs.permission_blocked != 'true' && steps.merge_state.outputs.mergeable == 'MERGEABLE' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: bash @@ -123,6 +139,13 @@ jobs: echo "- 状态:无需同步(dev 已包含 main 最新提交)" exit 0 fi + if [ "${{ steps.sync_pr.outputs.permission_blocked }}" = "true" ]; then + echo "- 状态:已跳过自动创建同步 PR" + echo "- 原因:仓库未开启 GitHub Actions 创建与审批 Pull Request 权限" + echo "- 处理:前往 Settings -> Actions -> General -> Workflow permissions,开启 Allow GitHub Actions to create and approve pull requests" + echo "- 兜底:由维护者手动执行 main 到 dev 合并,或开启该设置后重新运行 workflow" + exit 0 + fi echo "- PR:${{ steps.sync_pr.outputs.pr_url }}" echo "- 可合并状态:${{ steps.merge_state.outputs.mergeable }}" echo "- 合并状态详情:${{ steps.merge_state.outputs.merge_state_status }}" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ce2e2bf..b89e554 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -84,6 +84,7 @@ This repository provides automatic sync via GitHub Actions workflow: - `.github/workflows/sync-main-to-dev.yml` - Trigger: every push to `main` - Behavior: create/reuse a PR from `main` to `dev`; if mergeable, it tries to enable auto-merge +- Prerequisite: in `Settings -> Actions -> General -> Workflow permissions`, enable `Allow GitHub Actions to create and approve pull requests`; otherwise the workflow will skip PR creation and only emit a warning summary Manual fallback (when conflicts or automation is unavailable): diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md index 5e8f70c..3e79997 100644 --- a/CONTRIBUTING.zh-CN.md +++ b/CONTRIBUTING.zh-CN.md @@ -84,6 +84,7 @@ feature/* / fix/* -> dev -> release/* -> main -> tag(vX.Y.Z) - `.github/workflows/sync-main-to-dev.yml` - 触发时机:每次 `main` 分支有新的 push - 行为:自动创建或复用 `main` 到 `dev` 的同步 PR;若可合并,则尝试开启自动合并 +- 前置条件:需在 `Settings -> Actions -> General -> Workflow permissions` 中开启 `Allow GitHub Actions to create and approve pull requests`,否则 workflow 只会输出告警摘要并跳过建 PR 当出现冲突,或自动化暂不可用时,使用以下手动兜底方式: