Dual remotes (maintainers)¶
One product, one narrative, two remotes.
| Role | Host | Audience | Use for |
|---|---|---|---|
| Primary (国内共建主场) | GitCode (origin) |
中文开发者、国内社区、日常 Issue/PR | 讨论、评审、发版说明(中文优先) |
| Mirror (国际镜像) | GitHub (github) |
国际可见度、英文检索、海外贡献者 | Topics / Stars / 英文 Issue;保持与 origin/master 同步 |
Do not run two roadmaps, two READMEs-with-different-stories, or two default feature sets.
Product sentence (same on both)¶
- ZH: 自建项目管理:新需求先分诊再进待办;可自定义工作项类型 / 工作流 / 自动化;AI 嵌在 Issue / Intake / Cycle,数据在自己的机器上。
- EN: Self-hosted project management: triage first; custom issue types, workflows, and automation; AI in Issue / Intake / Cycle — data stays on your machine.
Sync workflow¶
After merging to master locally:
Optional helper (PowerShell):
The gitee remote is a read-only convenience mirror for users who cannot reach
GitHub. Push master there after the two above; it runs no CI, so a green
GitHub run is the signal, not Gitee.
Tag releases on both remotes with the same tag name and changelog (ZH + short EN).
Where contributors should open PRs¶
| Contributor | Prefer |
|---|---|
| 国内 / 中文沟通 | GitCode Issue + PR → origin |
| International / English | GitHub Issue + PR → mirror; maintainers cherry-pick or merge then sync both |
If the same fix lands on both sides, reconcile on master once, then push both remotes — never diverge product scope.
Branch protection on the GitHub mirror¶
master on GitHub is protected. GitCode/Gitee have no equivalent gate, so the
GitHub mirror is where a red build is actually enforced.
| Rule | Value | Why |
|---|---|---|
| Required checks | Lint, Security, Test, E2E, Tenancy audit, Migration path, Build, Docker Build (backend), Docker Build (frontend) |
Must match the job names in ci.yml verbatim |
| Force push / branch deletion | blocked | History is public and mirrored |
| Admin bypass | allowed | Single maintainer; a hotfix can land directly, PRs still need green checks |
| Unresolved conversations block merge | yes | Review comments should not be silently ignored |
| Require branch up to date | no | Otherwise every PR has to be rebased on each merge |
The two Docker Build entries come from the job's matrix, not from the job
name. Renaming docker: or editing matrix.component silently disables half
the gate — update the rule in the same change:
# required-checks.json: {"strict": false, "contexts": ["Lint", ...]}
gh api -X PATCH /repos/vinthuy/reqmango/branches/master/protection/required_status_checks \
--input required-checks.json
GitHub About / Topics¶
Mirror description and Topics must match the product sentence above. See github-public-profile.md. Apply the same blurb on GitCode About when the UI allows.
Naming note¶
GitCode path may still show a historical repo slug (reqmanpy). Prefer displaying Reqmango in titles and README; rename on GitCode when convenient so clone URLs match the product name.