Netstamp 歡迎產品、後端、前端、說明文件、本地化、測試與維運方面的貢獻。程式碼儲存庫中的 CONTRIBUTING.md 是完整規範;本頁整理主要流程,並協助不同類型的貢獻找到正確的主要依據。
開始之前
- 搜尋 GitHub Issues 與已開啟的 pull request,確認是否已有重複工作。
- 閱讀根目錄的
AGENTS.md與距離修改範圍最近的區域指南。 - 會改變產品或說明文件畫面時,請閱讀
design.md。 - 若修改範圍較大,請先建立 issue 或在既有 issue 留言,讓維護者確認範圍與產品方向。
- 依照本機開發安裝相依套件,並啟動受影響的應用程式。
找到正確的主要依據
不同檔案各自負責不同的行為:
api/負責 TypeSpec 合約。產生的 OpenAPI JSON 與 Web 型別都是輸出結果。server/db/migrations/與server/db/query/負責資料庫結構與 SQL 修改;產生的 sqlc 程式碼是輸出結果。packages/ui/負責可重用的產品基礎元件與設計權杖。web/src/i18n/locales/en/、docs/src/i18n/locales/en/與docs/src/content/docs/en/下的英文檔案是本地化來源。- 繁體中文翻譯資源由 Crowdin 同步,不應視為獨立的來源檔案樹。
只在真正擁有該行為的來源檔修改,才能避免下一次產生檔案或同步翻譯時覆寫成果。
建立分支
從最新的 main 分支開始:
git switch main
git pull --ff-only
git switch -c feat/example-change分支名稱使用 <type>/<short-kebab-case-description>。允許的前綴包括 feat/、fix/、ui/、refactor/、docs/、test/、chore/ 與 release/。
執行以下指令驗證目前名稱:
pnpm check:branch-name讓修改保持聚焦
- 避免無關的格式化、更名、相依套件升級或產生檔案變更。
- 除非修改明確包含資料庫遷移,否則應保留既有 URL 與相容性。
- 為改變的行為新增或更新測試。
- 如果主要工作流程有變動,請同步更新說明文件與相關的
AGENTS.md。 - 絕對不要提交密碼、權杖、探測器金鑰、OAuth 用戶端密鑰、已填入內容的環境檔或正式環境資料。
Commit 格式
Commit 主旨以程式碼儲存庫區域或子系統為前綴:
area: concise patch summary
sub/sys: concise patch summary例如:
docs: clarify probe installation
web/alerts: localize notification errors
server/auth: validate session cookie摘要應使用祈使語氣、具體說明修改內容;冒號後的第一個字除非是專有名詞,否則使用小寫,句尾不加句點。
驗證修改
請執行與修改範圍相符的檢查。整個程式碼儲存庫的共用入口如下:
pnpm check:branch-name
pnpm check:frontend-style
just lint
just test
just build開發期間可以先執行範圍較小的驗證,但 pull request 必須列出實際執行過的每一條指令,以及未能完成的檢查。
API 有變更時,請執行 pnpm generate:openapi,並提交預期中產生的檔案。修改使用者看得到的文字時,也要執行翻譯 Netstamp列出的本地化檢查。
送出 pull request
Pull request 以 main 為目標分支,內容應包括:
- 要解決的問題與改變後的行為;
- 重要的實作或相容性決策;
- 驗證指令與人工檢查結果;
- 相關 issue,視情況使用
Closes、Fixes或Refs; - 可見 UI 修改的桌面版與行動版截圖。
供審閱使用的暫時截圖請上傳至 pull request 說明或留言,不要放入應用程式原始碼目錄。
專案採用 squash merge;合併前必須完成審閱、解決所有審閱討論串,並讓檢查通過。
貢獻翻譯
只參與翻譯的人不需要本機開發環境、程式碼儲存庫寫入權限,也不需要 Crowdin API 權杖。請直接到 Netstamp Crowdin 專案翻譯,並依照翻譯 Netstamp中的台灣用語、預留位置安全、技術內容與審閱指引操作。
尋求協助
如果不確定修改應該放在哪裡,請在 GitHub issue說明預期的使用者行為,或到 Netstamp Discord 社群詢問。涉及敏感安全性問題時,請依照安全維運回報,不要建立公開 issue。