Files
upage-git/upage/contributing/workflow.html
2025-09-29 03:02:50 +00:00

142 lines
29 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="zh-Hans" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-contributing/workflow" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.0">
<title data-rh="true">工作流程 | UPage 文档</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://halo-dev.github.io/upage/img/social-card.png"><meta data-rh="true" name="twitter:image" content="https://halo-dev.github.io/upage/img/social-card.png"><meta data-rh="true" property="og:url" content="https://halo-dev.github.io/upage/contributing/workflow"><meta data-rh="true" property="og:locale" content="zh_Hans"><meta data-rh="true" name="docusaurus_locale" content="zh-Hans"><meta data-rh="true" name="docsearch:language" content="zh-Hans"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="工作流程 | UPage 文档"><meta data-rh="true" name="description" content="本文档描述了 UPage 项目的开发工作流程包括分支策略、Pull Request 流程和版本发布流程。"><meta data-rh="true" property="og:description" content="本文档描述了 UPage 项目的开发工作流程包括分支策略、Pull Request 流程和版本发布流程。"><link data-rh="true" rel="icon" href="/upage/../public/favicon.svg"><link data-rh="true" rel="canonical" href="https://halo-dev.github.io/upage/contributing/workflow"><link data-rh="true" rel="alternate" href="https://halo-dev.github.io/upage/contributing/workflow" hreflang="zh-Hans"><link data-rh="true" rel="alternate" href="https://halo-dev.github.io/upage/contributing/workflow" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"贡献指南","item":"https://halo-dev.github.io/upage/contributing"},{"@type":"ListItem","position":2,"name":"工作流程","item":"https://halo-dev.github.io/upage/contributing/workflow"}]}</script><link rel="stylesheet" href="/upage/assets/css/styles.8ea0c4aa.css">
<script src="/upage/assets/js/runtime~main.8350f77c.js" defer="defer"></script>
<script src="/upage/assets/js/main.648541e0.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="跳到主要内容"><a class="skipToContent_SnWU" href="#__docusaurus_skipToContent_fallback">跳到主要内容</a></div><nav aria-label="主导航" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="切换导航栏" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/upage/"><div class="navbar__logo"><img src="/upage/img/logo.svg" alt="UPage Logo" class="themedComponent_PxYp themedComponent--light_BsnN"><img src="/upage/img/logo.svg" alt="UPage Logo" class="themedComponent_PxYp themedComponent--dark_P6BI"></div><b class="navbar__title text--truncate">UPage</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/upage/">使用文档</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/halo-dev/upage" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_crTl colorModeToggle_eWi8"><button class="clean-btn toggleButton_BQDk toggleButtonDisabled_lECB" type="button" disabled="" title="system mode" aria-label="切换浅色/暗黑模式当前为system mode"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_KZAc lightToggleIcon_LT1z"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_KZAc darkToggleIcon_fJCx"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_KZAc systemToggleIcon_m6ZP"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_GyVn"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_fO6_"><div class="docsWrapper_G3eT"><button aria-label="回到顶部" class="clean-btn theme-back-to-top-button backToTopButton_nMBz" type="button"></button><div class="docRoot_iPwj"><aside class="theme-doc-sidebar-container docSidebarContainer_Yovm"><div class="sidebarViewport_e1um"><div class="sidebar_xcav"><nav aria-label="文档侧边栏" class="menu thin-scrollbar menu_EjuG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/"><span title="首页" class="linkLabel_fmgc">首页</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/quick-start"><span title="快速开始" class="linkLabel_fmgc">快速开始</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink__DnE menu__link menu__link--sublist" href="/upage/deployment-guide"><span title="部署指南" class="categoryLinkLabel_rUKM">部署指南</span></a><button aria-label="展开侧边栏分类 &#x27;部署指南&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/configuration"><span title="配置参考" class="linkLabel_fmgc">配置参考</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink__DnE menu__link menu__link--sublist" href="/upage/user-guide"><span title="用户指南" class="categoryLinkLabel_rUKM">用户指南</span></a><button aria-label="展开侧边栏分类 &#x27;用户指南&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink__DnE menu__link menu__link--sublist menu__link--active" href="/upage/contributing"><span title="贡献指南" class="categoryLinkLabel_rUKM">贡献指南</span></a><button aria-label="折叠侧边栏分类 &#x27;贡献指南&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/upage/contributing/code-of-conduct"><span title="行为准则" class="linkLabel_fmgc">行为准则</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/upage/contributing/ways-to-contribute"><span title="贡献方式" class="linkLabel_fmgc">贡献方式</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/upage/contributing/development-setup"><span title="开发环境设置" class="linkLabel_fmgc">开发环境设置</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/upage/contributing/code-standards"><span title="代码规范" class="linkLabel_fmgc">代码规范</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/upage/contributing/workflow"><span title="工作流程" class="linkLabel_fmgc">工作流程</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/upage/faq"><span title="常见问题" class="linkLabel_fmgc">常见问题</span></a></li></ul></nav></div></div></aside><main class="docMainContainer_WqOS"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_s9lu"><div class="docItemContainer_Wij8"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_dPwh" aria-label="页面路径"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="主页面" class="breadcrumbs__link" href="/upage/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_xzA8"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/upage/contributing"><span>贡献指南</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">工作流程</span></li></ul></nav><div class="tocCollapsible_S5VF theme-doc-toc-mobile tocMobile_gigA"><button type="button" class="clean-btn tocCollapsibleButton_wmrO">本页总览</button></div><div class="theme-doc-markdown markdown"><header><h1>工作流程</h1></header>
<p>本文档描述了 UPage 项目的开发工作流程包括分支策略、Pull Request 流程和版本发布流程。</p>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="分支策略">分支策略<a href="#分支策略" class="hash-link" aria-label="分支策略的直接链接" title="分支策略的直接链接" translate="no"></a></h2>
<p>UPage 项目使用以下分支策略:</p>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="主要分支">主要分支<a href="#主要分支" class="hash-link" aria-label="主要分支的直接链接" title="主要分支的直接链接" translate="no"></a></h3>
<ul>
<li><strong><code>main</code></strong>: 主分支,包含最新的开发代码,用于集成功能和修复,同时也对应最新的发布版本</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="功能分支">功能分支<a href="#功能分支" class="hash-link" aria-label="功能分支的直接链接" title="功能分支的直接链接" translate="no"></a></h3>
<p>开发新功能时,应从 <code>main</code> 分支创建功能分支:</p>
<ul>
<li><strong><code>feature/*</code></strong>: 功能分支,用于开发新功能<!-- -->
<ul>
<li>例如:<code>feature/drag-and-drop</code><code>feature/user-authentication</code></li>
</ul>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="修复分支">修复分支<a href="#修复分支" class="hash-link" aria-label="修复分支的直接链接" title="修复分支的直接链接" translate="no"></a></h3>
<p>修复 bug 时,应从 <code>main</code> 分支创建修复分支:</p>
<ul>
<li><strong><code>fix/*</code></strong>: 修复分支,用于修复 bug<!-- -->
<ul>
<li>例如:<code>fix/login-error</code><code>fix/memory-leak</code></li>
</ul>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="发布分支">发布分支<a href="#发布分支" class="hash-link" aria-label="发布分支的直接链接" title="发布分支的直接链接" translate="no"></a></h3>
<p>准备新版本发布时,从 <code>main</code> 分支创建发布分支:</p>
<ul>
<li><strong><code>release/*</code></strong>: 发布分支,用于准备新版本发布<!-- -->
<ul>
<li>例如:<code>release/v1.0.0</code><code>release/v1.1.0</code></li>
</ul>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="热修复分支">热修复分支<a href="#热修复分支" class="hash-link" aria-label="热修复分支的直接链接" title="热修复分支的直接链接" translate="no"></a></h3>
<p>对已发布版本的紧急修复,从 <code>main</code> 分支创建热修复分支:</p>
<ul>
<li><strong><code>hotfix/*</code></strong>: 热修复分支,用于对已发布版本的紧急修复<!-- -->
<ul>
<li>例如:<code>hotfix/v1.0.1</code><code>hotfix/v1.1.2</code></li>
</ul>
</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="工作流程图">工作流程图<a href="#工作流程图" class="hash-link" aria-label="工作流程图的直接链接" title="工作流程图的直接链接" translate="no"></a></h2>
<div class="language-text codeBlockContainer_tLQ_ theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_HMSW"><pre tabindex="0" class="prism-code language-text codeBlock_HMKa thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_tPUF"><span class="token-line" style="color:#393A34"><span class="token plain">main ─────┬───────────────┬─────────────────────────────────</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> │ │ ↑ ↑</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> ↓ ↓ │ │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">feature feature/A feature/B │ │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> │ │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">fix fix/bug-1 fix/bug-2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> │ │ │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> │ │ │</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">release └─────────────────────────────────┴───────────┘</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> release/v1.0.0</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="pull-request-流程">Pull Request 流程<a href="#pull-request-流程" class="hash-link" aria-label="Pull Request 流程的直接链接" title="Pull Request 流程的直接链接" translate="no"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="准备-pull-request">准备 Pull Request<a href="#准备-pull-request" class="hash-link" aria-label="准备 Pull Request的直接链接" title="准备 Pull Request的直接链接" translate="no"></a></h3>
<ol>
<li>确保您的代码符合项目的<a href="/upage/contributing/code-standards">代码规范</a></li>
<li>更新相关文档(如适用)</li>
<li>添加或更新测试(如适用)</li>
<li>确保所有测试通过</li>
<li>将您的分支与目标分支(通常是 <code>main</code>)同步</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="创建-pull-request">创建 Pull Request<a href="#创建-pull-request" class="hash-link" aria-label="创建 Pull Request的直接链接" title="创建 Pull Request的直接链接" translate="no"></a></h3>
<ol>
<li>在 GitHub 上创建一个新的 Pull Request</li>
<li>选择正确的目标分支(通常是 <code>main</code></li>
<li>填写 Pull Request 模板,提供以下信息:<!-- -->
<ul>
<li>清晰的标题,简要描述更改</li>
<li>详细的描述,解释更改的目的和实现方式</li>
<li>相关的 issue 链接(如适用)</li>
<li>截图或视频(如适用)</li>
<li>任何需要审核者特别注意的事项</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="pull-request-审核">Pull Request 审核<a href="#pull-request-审核" class="hash-link" aria-label="Pull Request 审核的直接链接" title="Pull Request 审核的直接链接" translate="no"></a></h3>
<ol>
<li>至少需要一个项目维护者的批准才能合并 PR</li>
<li>审核者可能会要求进行更改</li>
<li>根据反馈进行必要的更改</li>
<li>确保 CI 检查通过</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="合并-pull-request">合并 Pull Request<a href="#合并-pull-request" class="hash-link" aria-label="合并 Pull Request的直接链接" title="合并 Pull Request的直接链接" translate="no"></a></h3>
<ol>
<li>一旦 PR 获得批准并且所有检查通过,它将被合并</li>
<li>通常使用 &quot;Squash and merge&quot; 策略,将所有提交合并为一个</li>
<li>合并后,相关的分支可以被删除</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="版本发布流程">版本发布流程<a href="#版本发布流程" class="hash-link" aria-label="版本发布流程的直接链接" title="版本发布流程的直接链接" translate="no"></a></h2>
<p>UPage 遵循 <a href="https://semver.org/" target="_blank" rel="noopener noreferrer">语义化版本控制</a> 规范。版本号格式为 <code>X.Y.Z</code></p>
<ul>
<li><strong>X</strong>: 主版本号,当进行不兼容的 API 更改时递增</li>
<li><strong>Y</strong>: 次版本号,当添加向后兼容的功能时递增</li>
<li><strong>Z</strong>: 修订号,当进行向后兼容的 bug 修复时递增</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="发布准备">发布准备<a href="#发布准备" class="hash-link" aria-label="发布准备的直接链接" title="发布准备的直接链接" translate="no"></a></h3>
<ol>
<li><code>main</code> 分支创建发布分支,例如 <code>release/v1.0.0</code></li>
<li>在发布分支上进行最终测试和修复</li>
<li>更新版本号和更新日志</li>
<li>创建 Pull Request 将发布分支合并回 <code>main</code></li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="发布步骤">发布步骤<a href="#发布步骤" class="hash-link" aria-label="发布步骤的直接链接" title="发布步骤的直接链接" translate="no"></a></h3>
<ol>
<li>合并发布分支到 <code>main</code></li>
<li><code>main</code> 分支上创建版本标签,例如 <code>v1.0.0</code></li>
<li>发布 GitHub Release包含详细的更新日志</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="热修复发布">热修复发布<a href="#热修复发布" class="hash-link" aria-label="热修复发布的直接链接" title="热修复发布的直接链接" translate="no"></a></h3>
<ol>
<li><code>main</code> 分支创建热修复分支,例如 <code>hotfix/v1.0.1</code></li>
<li>实现必要的修复</li>
<li>更新版本号和更新日志</li>
<li>创建 Pull Request 将热修复分支合并到 <code>main</code></li>
<li>必要时创建 cherry-pick PR 将热修复分支合并到对应的发布分支</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="持续集成和部署">持续集成和部署<a href="#持续集成和部署" class="hash-link" aria-label="持续集成和部署的直接链接" title="持续集成和部署的直接链接" translate="no"></a></h2>
<p>UPage 使用 GitHub Actions 进行持续集成和部署:</p>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="ci-工作流程">CI 工作流程<a href="#ci-工作流程" class="hash-link" aria-label="CI 工作流程的直接链接" title="CI 工作流程的直接链接" translate="no"></a></h3>
<ul>
<li>每个 PR 会触发构建和测试</li>
<li>代码质量检查linting、类型检查</li>
<li>单元测试和集成测试</li>
<li>构建检查</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_hmm4" id="cd-工作流程">CD 工作流程<a href="#cd-工作流程" class="hash-link" aria-label="CD 工作流程的直接链接" title="CD 工作流程的直接链接" translate="no"></a></h3>
<ul>
<li>合并到 <code>main</code> 分支会触发开发构建和部署</li>
<li>自动生成和发布 Docker 镜像</li>
<li>更新文档网站</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_hmm4" id="问题跟踪">问题跟踪<a href="#问题跟踪" class="hash-link" aria-label="问题跟踪的直接链接" title="问题跟踪的直接链接" translate="no"></a></h2>
<p>UPage 使用 GitHub <a href="https://github.com/halo-dev/upage/issues" target="_blank" rel="noopener noreferrer">Issues</a> 进行问题跟踪使用标签对问题进行分类bug、feature、documentation 等)</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/halo-dev/upage/edit/main/docs/content/content/contributing/workflow.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit__ZHw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>编辑此页</a></div><div class="col lastUpdated_CpfT"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="文件选项卡"><a class="pagination-nav__link pagination-nav__link--prev" href="/upage/contributing/code-standards"><div class="pagination-nav__sublabel">上一页</div><div class="pagination-nav__label">代码规范</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/upage/faq"><div class="pagination-nav__sublabel">下一页</div><div class="pagination-nav__label">常见问题</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_dKl6 thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#分支策略" class="table-of-contents__link toc-highlight">分支策略</a><ul><li><a href="#主要分支" class="table-of-contents__link toc-highlight">主要分支</a></li><li><a href="#功能分支" class="table-of-contents__link toc-highlight">功能分支</a></li><li><a href="#修复分支" class="table-of-contents__link toc-highlight">修复分支</a></li><li><a href="#发布分支" class="table-of-contents__link toc-highlight">发布分支</a></li><li><a href="#热修复分支" class="table-of-contents__link toc-highlight">热修复分支</a></li></ul></li><li><a href="#工作流程图" class="table-of-contents__link toc-highlight">工作流程图</a></li><li><a href="#pull-request-流程" class="table-of-contents__link toc-highlight">Pull Request 流程</a><ul><li><a href="#准备-pull-request" class="table-of-contents__link toc-highlight">准备 Pull Request</a></li><li><a href="#创建-pull-request" class="table-of-contents__link toc-highlight">创建 Pull Request</a></li><li><a href="#pull-request-审核" class="table-of-contents__link toc-highlight">Pull Request 审核</a></li><li><a href="#合并-pull-request" class="table-of-contents__link toc-highlight">合并 Pull Request</a></li></ul></li><li><a href="#版本发布流程" class="table-of-contents__link toc-highlight">版本发布流程</a><ul><li><a href="#发布准备" class="table-of-contents__link toc-highlight">发布准备</a></li><li><a href="#发布步骤" class="table-of-contents__link toc-highlight">发布步骤</a></li><li><a href="#热修复发布" class="table-of-contents__link toc-highlight">热修复发布</a></li></ul></li><li><a href="#持续集成和部署" class="table-of-contents__link toc-highlight">持续集成和部署</a><ul><li><a href="#ci-工作流程" class="table-of-contents__link toc-highlight">CI 工作流程</a></li><li><a href="#cd-工作流程" class="table-of-contents__link toc-highlight">CD 工作流程</a></li></ul></li><li><a href="#问题跟踪" class="table-of-contents__link toc-highlight">问题跟踪</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">文档</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/upage/quick-start">快速开始</a></li><li class="footer__item"><a class="footer__link-item" href="/upage/category/deployment-guide">部署指南</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">社区</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/halo-dev/upage/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issues<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/halo-dev/upage/discussions" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Discussions<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">更多</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/halo-dev/upage" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_xtnk"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2025 凌霞软件. Built with Docusaurus.</div></div></div></footer></div>
</body>
</html>