From 45ed4374bcf3f943bac055cc596b2502fa80026b Mon Sep 17 00:00:00 2001 From: farmyobutu5233 Date: Sun, 5 Jul 2026 10:43:24 +0000 Subject: [PATCH] =?UTF-8?q?chore:=20=E7=A7=BB=E9=99=A4=E8=AF=AF=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E7=9A=84=20=5F=5Fpycache=5F=5F=EF=BC=9Bdocs:=20?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E8=A1=A5=E5=85=85=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E5=9B=BE=E4=B8=8E=20CI=20=E9=97=A8=E7=A6=81=E9=9B=86=E6=88=90?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .gitignore | 1 + .../workflows/doc-sync-automation/README.md | 35 ++++++++++++++++++ .../doc_sync_workflow.cpython-312.pyc | Bin 15533 -> 0 bytes 3 files changed, 36 insertions(+) delete mode 100644 examples/workflows/doc-sync-automation/scripts/__pycache__/doc_sync_workflow.cpython-312.pyc diff --git a/.gitignore b/.gitignore index bd0ccf8f..c80faccb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ gitlink-cli.exe /gitlink-cli +__pycache__/ diff --git a/examples/workflows/doc-sync-automation/README.md b/examples/workflows/doc-sync-automation/README.md index 9382ac94..0cf906cb 100644 --- a/examples/workflows/doc-sync-automation/README.md +++ b/examples/workflows/doc-sync-automation/README.md @@ -6,6 +6,41 @@ 与仓库内已有能力的关系:`file` 命令组(文件读写)→ `gitlink-doc-sync` Skill(AI 语义比对与翻译同步知识)→ **本工作流(确定性可复现闭环)**,三层互为支撑而非重复:Skill 负责需要语义理解的翻译同步,本工作流负责可进 CI 的确定性漂移检测。 +## 架构图 + +```mermaid +flowchart LR + A["repo +tree
仓库结构采集"] --> B["文档对自动发现
README.md ⇄ README.zh-CN.md
docs/*.md ⇄ docs/*.zh-CN.md"] + B --> C["file +view --raw ×2
拉取双语版本内容"] + C --> D["确定性结构比对
章节大纲 / 代码块 / 表格 / 版本号"] + D --> E["分级漂移报告
🔴严重 / 🟡中等 / 🟢轻微"] + E -->|"dry-run(默认)"| F["Markdown 报告落盘
退出码 0/2 → CI 门禁"] + E -->|"--apply"| G["issue +create
回写 tracking issue"] + G -.->|"人工确认后"| H["gitlink-doc-sync Skill
AI 语义翻译同步 → file +update → pr +create"] +``` + +## CI 门禁集成示例 + +利用退出码语义(`0` 无严重漂移 / `2` 存在严重漂移)可直接作为发布门禁。GitLink 引擎(`.gitea/workflows`)示例: + +```yaml +name: doc-sync-gate +on: + pull_request: + paths: ["README.md", "README.zh-CN.md", "docs/**"] +jobs: + doc-sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: npm install -g @gitlink-ai/cli + - env: + GITLINK_TOKEN: ${{ secrets.GITLINK_TOKEN }} + run: | + python3 examples/workflows/doc-sync-automation/scripts/doc_sync_workflow.py \ + --owner ${{ github.repository_owner }} --repo ${{ github.event.repository.name }} +``` + ## 交付物 - `scripts/doc_sync_workflow.py`:文档对发现 + 漂移检测 + 报告 + tracking issue 回写(纯标准库,Python ≥3.9,零第三方依赖) diff --git a/examples/workflows/doc-sync-automation/scripts/__pycache__/doc_sync_workflow.cpython-312.pyc b/examples/workflows/doc-sync-automation/scripts/__pycache__/doc_sync_workflow.cpython-312.pyc deleted file mode 100644 index cae7398c13c740eb44c043e783e8d79413cc3432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15533 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 a(Y}?(*1o#7v--r2`&0%X1u7RS8U7z}@|qt2