ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

InsForge 开源贡献指南:从克隆仓库到合并 PR 的完整开发工作流

InsForge 开源贡献指南:从克隆仓库到合并 PR 的完整开发工作流 InsForge 开源贡献指南从克隆仓库到合并 PR 的完整开发工作流【免费下载链接】InsForgeThe all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, hosting, and AI gateway to ship full-stack apps end-to-end.项目地址: https://gitcode.com/GitHub_Trending/in/InsForge本文以仓库根目录的 CONTRIBUTING.md 为骨架结合 InsForge 实际的package.json、docker-compose.yml、.env.example、后端测试体系backend/tests/README.md与 ESLint 配置eslint.config.js源码为希望向 InsForge 提交代码的开发者提供一条端到端的实操路径理解单体仓库结构 → 搭建本地开发环境 → 认领 Issue → 按规范开发与测试 → 提交并维护 PR。读完本文你将掌握 InsForge 的分支命名、提交信息格式、测试运行方式、代码风格约定与文档资源规范能够独立完成一次合规的贡献闭环。先看懂 InsForge 的单体仓库Monorepo布局InsForge 是一个基于 npm workspaces Turborepo 管理的单体仓库。根目录的 package.json 定义了三个工作区workspaces: [ backend, frontend, packages/* ]结合 CONTRIBUTING.md 中的 Project Structure 说明与实际目录各模块职责如下目录职责backend/核心后端服务基于 Express.js PostgreSQL PostgREST并集成 Better Auth包含 API 路由backend/src/api/routes、基础设施backend/src/infra、各领域服务与 67 个 SQL 迁移文件backend/src/infra/databasefrontend/React 管理后台Vite 构建用于管理数据库、用户与存储packages/shared-schemas/前后端共享的 Zod schema 与 TypeScript 类型是线上契约wire contract的唯一事实来源packages/dashboard/、packages/ui/仪表盘应用与可复用 UI 组件库docs/面向用户的 MCP / 产品文档含多语言版本functions/基于 Deno 的 Serverless 边缘函数用于自定义业务逻辑openapi/各服务的 OpenAPI 规范文件openapidocker-compose.yml一键启动整个开发栈的 Docker 编排文件这种布局意味着修改跨包公共类型时应改packages/shared-schemas而不是在前端或后端各改一份——这正是shared-schemas存在的原因。根目录的turbo.json负责跨工作区任务的编排常用脚本在 package.json 中均可直接调用如npm run dev、npm run build、npm run test、npm run lint。环境准备开始开发前CONTRIBUTING.md 要求你准备好两样基础工具Docker——用于启动 PostgreSQL、PostgREST、Deno 运行时等依赖服务Node.js建议 LTS 版本——根目录package.json声明packageManager: npm11.3.0使用 npm 即可管理全部工作区依赖。从源码结构看InsForge 的开发环境高度依赖 Docker 编排本地直接起后端npm run dev:backend对应tsx watch src/server.ts也需要 Postgres 与 PostgREST 可用因此不要跳过 Docker 安装步骤。本地开发环境搭建Getting Started1. Fork 并克隆仓库将仓库 fork 到你的 GitHub 账户克隆你的 fork 到本地并进入目录git clone your-fork-url cd insforge注后续所有修改都应提交到你的 fork再通过 Pull Request 合回上游main分支。2. 准备环境变量文件仓库根目录提供了完整的 .env.example未被 .gitignore 忽略的模板复制为.env即可Unix 系系统cp .env.example .envWindows 系统copy .env.example .env模板文件头部明确要求不要把.env提交进版本控制生产环境务必使用强随机密钥如openssl rand -base64 32生成 JWT_SECRET。开发阶段可直接使用模板默认值其中关键项包括COMPOSE_PROJECT_NAMEinsforgeCompose 项目名保持稳定可避免容器/卷被误接管JWT_SECRET≥32 字符与独立的ENCRYPTION_KEYENCRYPTION_KEY未设置时会回退到JWT_SECRET但一旦日后轮换 JWT_SECRET将永久损坏已存储的密钥类数据API Key、OAuth Token 等因此建议一开始就分开设置ROOT_ADMIN_USERNAMEadmin/ROOT_ADMIN_PASSWORDchange-this-password根管理员凭证生产环境必须修改端口默认值APP_PORT7130、AUTH_PORT7131、UI_PORT7132、DENO_PORT7133、POSTGRES_PORT5432、POSTGREST_PORT5430。3. 启动开发栈docker compose up这里执行的开发栈定义在根目录 docker-compose.yml共包含 4 个相互依赖的服务postgres使用ghcr.io/insforge/postgres:v15.13.4镜像挂载了 deploy/docker-init/db/db-init.sql 与 deploy/docker-init/db/jwt.sql 初始化脚本并带健康检查postgrestPostgREST v12直连 Postgres 的publicschemaPGRST_JWT_SECRET与后端JWT_SECRET保持一致insforge构建自根目录 Dockerfile 的dev目标容器启动命令会先npm install、构建 shared-schemas/ui/dashboard 三个包、执行npm run migrate:up跑数据库迁移最后用concurrently同时启动后端与前端开发服务backend/src/server.ts与frontend并把仓库源码以卷挂载方式映射进容器实现热更新denodenoland/deno:alpine-2.0.6运行时负责 Serverless 边缘函数监听 7133工作目录挂载 functions。启动完成后后端 API 位于http://localhost:7130管理后台位于http://localhost:7132浏览器访问端口以UI_PORT实际值为准。4. 日常开发命令根目录 package.json 提供了一组与 Turborepo 集成的脚本覆盖整个开发循环npm run dev # turbo 并行启动前后端开发服务 npm run dev:backend # 仅启动后端tsx watch npm run dev:frontend # 仅启动前端 npm run build # turbo 构建全部工作区 npm run test # turbo 运行全部测试 npm run test:e2e # 运行后端端到端测试 npm run lint # turbo 运行 ESLint npm run typecheck # turbo 运行 tsc --noEmit npm run format # prettier 全量格式化提示如需在后端侧查看迁移相关脚本migrate:up、migrate:down、migrate:create、migrate:check-duplicates可查看 backend/package.json。Issue 优先的工作流先认领再动手InsForge 采用issue-firstIssue 优先工作流先开或找到一个 Issue等待分配给你然后才开始写 PR。这能保证工作可追踪、避免两人重复造轮子、也让评审更顺畅。完整流程如下找到或新建 Issue描述 bug 或新功能若不存在对应 Issue 先新建一个认领 Issue在 Issue 评论区留言申请分配例如 Id like to work on this 或 please assign this to me。仓库维护者 Agent章北海Zhang Beihai会自动为你分配等待分配后再开 PRPR 描述中必须链接对应 Issue例如Closes #123。认领规则每位贡献者在所有 InsForge 仓库同时持有的已分配 Issue 数上限为3 个不是按单仓计算。完成或释放一个后才能认领下一个释放请在该 Issue 下评论unassign me如果 Agent 因账户权限不足无法自动分配维护者会手动分配Drive-by 修复未认领直接提 PR依然会被评审但 Agent 会为其打上needs-issue或needs-assignment标签并留言提醒且未关联 Issue 的工作更容易失联。认领后再动手是阻力最小的路径。从源码佐证看章北海 Agent 的工作资料存放在仓库根目录 .agents含 .agents/docs/deployment.md 与 .agents/skills/insforge-dev 等技能文档贡献者可以参考这些资料理解 Agent 期望的开发规范。开发工作流分支、提交与质量关卡1. 创建功能分支git checkout -b type/description # 示例git checkout -b feat/site-deployment分支名使用类型前缀/简短描述格式前缀语义如下前缀含义feat/新功能fix/Bug 修复docs/文档变更refactor/代码重构test/测试相关改动chore/构建过程或工具链改动2. 编码与自检遵循下文代码风格一节为新功能补充测试测试规范见下一节运行测试套件与 linternpm run test:e2e npm run lint确保所有测试通过、代码格式正确。3. 提交信息Conventional Commits提交信息必须遵循 Conventional Commits 格式type(scope): description [optional body] [optional screenshots / videos] [optional footer(s)]type与分支前缀一一对应feat、fix、docs、refactor、test、chore等scope用于标注影响范围如feat(site-deployment): add custom domain support。4. 推送并开 PRgit push origin type/description随后在你的 fork 页面向上游仓库的main分支发起 Pull Request。测试体系从单元测试到端到端CONTRIBUTING.md 要求所有贡献必须包含恰当的测试新功能写单元测试、提 PR 前确保测试全绿、行为受影响时更新既有测试、遵循现有测试模式、在适用环境跨环境验证。InsForge 的测试体系分为三层单元 / 组件测试Vitest后端使用 Vitest配置见 backend/vitest.config.tsenvironment: node、globals: true、加载 backend/tests/setup.ts每个用例前后清理./test-data目录。值得注意的两个细节测试顺序执行pool: forksmaxWorkers: 1注释明确说明这是为了避免数据库冲突且刻意不设isolate: false以免破坏依赖每文件模块重置的用例集成测试目录tests/integration被默认排除需单独通过npm run test:integration运行见 backend/package.json。后端已有 200 个单元测试文件如 backend/tests/unit/auth-email-otp-route.test.ts、backend/tests/unit/s3-gateway-dispatch.test.ts写新测试前建议先阅读同类文件对齐写法。端到端测试Shell curl根目录npm run test:e2e对应 backend/package.json 中的./tests/run-all-tests.sh。整套脚本的组织与约定记录在 backend/tests/README.md测试前置后端运行在http://localhost:7130、根管理员root/change-this-password、存储操作需要 API Key环境变量ACCESS_API_KEY用于 API 鉴权ROOT_ADMIN_USERNAME/ROOT_ADMIN_PASSWORD/TEST_API_BASE有默认值云/S3 测试还需AWS_S3_BUCKET、AWS_REGION、AWS 凭证与APP_KEY7-9 字符的租户标识测试分类backend/tests/local 覆盖本地 Docker 部署 本地文件存储鉴权、数据库 CRUD、E2E 工作流、公开存储桶、RPC、计划任务、密钥管理等backend/tests/cloud 覆盖云端 S3 多租户存储统一入口backend/tests/run-all-tests.sh 会先加载仓库根.env再执行 backend/tests/preflight.sh 做健康检查与管理员登录预检之后逐个运行local/test-*.sh并在配置了 S3 时运行cloud/test-*.sh最后输出汇总退出码 0 全部通过1 存在失败便于 CI 集成。也支持--preflight-only仅检查环境自动清理所有测试会自动删除testuser_前缀用户、测试表与测试存储桶如需彻底清理可运行./cleanup-all-test-data.sh写新 E2E 测试在local/或cloud/新建脚本sourcebackend/tests/test-config.sh提供共享配置、彩色输出与错误跟踪用register_test_user/register_test_table/register_test_bucket注册清理资源用print_success/print_fail/print_info输出结果脚本退出时自动清理。Pull Request 流程CONTRIBUTING.md 对 PR 阶段给出了明确要求开 PR 前确保你解决的 Issue已分配给你尽早创建 Draft PR以便讨论在描述中链接 Issue如Closes #123确保所有测试通过、构建成功按需更新文档保持 PR 聚焦在单一功能或单一 bug 修复上积极回应评审意见修完评审意见后务必对被指派的评审人 re-request review点击其名字旁的 按钮。这是评审人收到可以再看一次通知的唯一方式——不做这一步PR 可能被长时间搁置。代码风格TypeScript、ESLint 与 PrettierCONTRIBUTING.md 的 Code Style 章节给出以下原则遵循既有代码风格有效使用 TypeScript 类型与接口保持函数小而专注使用有意义的变量名与函数名为复杂逻辑添加注释修改 API 时同步更新相关文档。这些原则在仓库的 eslint.config.js 中有具体落地可归纳为三类硬性约束TypeScript 规则未使用变量忽略_前缀、悬浮 Promiseno-floating-promises、误用 Promiseno-misused-promises、await-thenable、require-await均为 error 级别。命名规范typescript-eslint/naming-convention参数与函数使用camelCase/PascalCase允许前导下划线、禁止尾随下划线类型、接口、类型参数与类使用PascalCase枚举成员使用UPPER_CASEReact 组件大写开头的函数使用PascalCase。packages/shared-schemas额外放宽对象字面量键允许snake_case因为 schema 对外模拟线上契约并强制typescript-eslint/no-explicit-any: error。通用与格式规则prefer-const、禁止var、强制eqeqeq、强制curly并通过eslint-plugin-prettier把 Prettier 格式问题提升为 errorprettier/prettier: error。全局忽略docs/**、openapi/**、测试文件与各类配置文件。格式化可一键执行npm run formatprettier --write .。文档与资源贡献asset 规范若你的 PR 涉及图片、视频、SVG 等媒体文件CONTRIBUTING.md 要求先阅读 docs/asset-guidelines.md。其核心约束包括超过 5 MB 的文件需谨慎评审大文件会拖慢仓库克隆、拉低文档加载速度并造成 Git 历史膨胀视频优先使用 MP4压缩屏幕录制后再提交仓库给出示例命令ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow -an output.mp4并避免提交同一视频的重复版本PNG用pngquant --force --ext .png image.png压缩JPEG用jpegoptim image.jpg优化SVG尽量保持矢量数据不要内嵌大尺寸 base64 位图导出前清理冗余元数据。小结一次合规贡献的自检清单完成开发后对照以下清单自查即可放心提交已认领 Issue 且已分配或确认为 drive-by 修复并接受标签提醒PR 中已用Closes #N链接 Issue分支命名符合type/description提交信息符合 Conventional Commits 格式已为新功能补充单元测试Vitest与必要的 E2E 测试local/或cloud/npm run test:e2e与npm run lint全部通过代码通过 ESLint命名规范、Promise 处理、Prettier 格式与npm run typecheckAPI 变更已同步更新 docs 文档新增媒体资源满足 docs/asset-guidelines.md 的压缩要求已创建或转正PR保持单一功能聚焦评审意见修复后已对被指派人 re-request review。遵循这条工作流你的贡献就能顺畅地进入 InsForge 的评审与合并管线成为这个开源后端平台演进的一部分。【免费下载链接】InsForgeThe all-in-one, open-source backend platform for agentic coding. InsForge gives your coding agent database, auth, storage, compute, hosting, and AI gateway to ship full-stack apps end-to-end.项目地址: https://gitcode.com/GitHub_Trending/in/InsForge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表