ARTICLE DETAIL

资讯详情

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

LocalStack 贡献代码前如何完成 PR 检查与 semver 标注?

LocalStack 贡献代码前如何完成 PR 检查与 semver 标注? LocalStack 贡献代码前如何完成 PR 检查与 semver 标注【免费下载链接】localstack A fully functional local AWS cloud stack. Develop and test your cloud Serverless apps offline项目地址: https://gitcode.com/GitHub_Trending/lo/localstack如果你准备向 LocalStack 仓库提交代码bug 修复或新功能仓库有一份明确的 PR 规范提交前需要先确认有对应的 Issue、为新功能或修复补充测试、保证代码风格通过检查并在创建 PR 时打上 semver 标签说明变更规模。这些要求记录在 docs/CONTRIBUTING.md配套的 PR 描述模板在 .github/PULL_REQUEST_TEMPLATE.md。本文按准备环境 → 本地检查 → 标注 semver → 处理 CLA的顺序把提交 PR 前要完成的操作整理成一条可执行的路径。准备搭好本地开发环境CONTRIBUTING 要求贡献者能本地运行并调试 LocalStack因此先按 docs/development-environment-setup/README.md 完成环境准备Fork 并克隆 localstack 仓库到你的 GitHub 账号确认已安装 Python pip、Node.js npm、Docker。文档建议使用pyenv管理 Python 版本因为仓库通过.python-version文件定义了所需版本部分被模拟的服务如 DynamoDB还需要java在仓库根目录安装依赖make install这一步会在本地创建 Python 3venv目录.venv并安装依赖不影响系统全局 Python 包。如果你要编写集成测试文档建议再运行make install-dev-types以启用类型提示。用 host mode 验证环境可用make start一个需要注意的坑host mode 下 LocalStack 会启动自己的 DNS server 并监听 53 端口需要 root 权限启动时会弹出 sudo 密码提示。开发阶段如果嫌烦可以用环境变量DNS_ADDRESS0禁用该功能。文档同时提醒在 Docker 环境中不建议禁用 DNS server它提供了通过localhost.localstack.cloud域名连接 LocalStack 的能力。另外文档在 Tips 一节提供了通过 pre-commit 钩子提前捕获 lint/format 错误的方式可选分支非必做先安装 pre-commitpip install pre-commit或brew install pre-commit再执行pre-commit install仓库的 Makefile 也封装了对应的make init-precommit目标钩子定义见 .pre-commit-config.yaml仓库根目录同名文件。提交 PR 前要完成的四项检查docs/CONTRIBUTING.md 给出的 PR 规范可以拆成以下检查项按顺序过一遍1. 确认存在对应的 Issue提交 PR 之前先确认仓库里已经有一个描述你要修复的 bug 或要实现的 feature 的 Issue如果没有需要先创建 Issue再提交 PR。2. 为新功能或 bug 修复补充测试规范要求任何新功能或 bug 修复都要加测试理想情况下每个 PR 都应提高测试覆盖率。测试写法可参考仓库内的两份指南集成测试docs/testing/integration-tests/README.mdParity 测试docs/testing/parity-testing/README.md本地运行测试由 Makefile 的test目标提供默认在仓库根目录执行 pytestmake testMakefile 中test目标实际执行的是python -m pytest --durations10 --log-cli-level$(PYTEST_LOGLEVEL) --junitxml$(JUNIT_REPORTS_FILE) $(PYTEST_ARGS) $(TEST_PATH)其中TEST_PATH默认为.可以通过变量只跑指定路径的测试例如先只验证自己改动的目录。3. 遵循代码风格并跑通 format 与 lintCONTRIBUTING 明确要求在 check in 代码之前运行make format和make lint。两个目标在 Makefile 中的实际行为是# 对整个代码库跑 ruff先自动修复可修复的问题再做格式化 make format # 检查代码风格、格式化状态和依赖 pin 是否需要更新 make lintmake lint依次执行了以下检查全部通过才算过关检查localstack-core/localstack/__init__.py文件不存在该文件存在会破坏打包python -m ruff check --output-formatfull .和python -m ruff format --check --diff .手动运行 pre-commit 钩子check-pinned-deps-for-needed-upgrade --files pyproject.toml确保该检查在 CI 中同样生效openapi-spec-validator localstack-core/localstack/openapi.yaml在localstack-core目录执行mypy --install-types --non-interactivedeptry .。如果只想针对改动过的文件做检查Makefile 提供了make lint-modified和make format-modified它们基于git diff --diff-filterd --name-only HEAD拿到已修改的.py文件列表后再执行对应的 ruff 命令适合改动较多时快速定位问题。4. 文档与拆分规范还有两条文字性要求新引入的方法和类要写 pydoc不具自解释性的代码要加 inline 注释把互不相关的改动拆进多个 PR不要混在一个 PR 里。创建 PR 时用 semver 标签标注变更规模CONTRIBUTING 要求创建 PR 时通过 semver 标签对变更规模分类标签只有三个标签适用范围semver: patch小的、非破坏性的变更semver: minor较大的非破坏性变更如新功能或较大的重构semver: major破坏性变更不论大小针对目标为main分支的 PR仓库中还有两个 CI 工作流会强制约束 semver 标签.github/workflows/pr-enforce-no-major-main.ymlEnforce no major on main在 PR 被 labeled、unlabeled、opened、edited、synchronize 时触发引用localstack/meta仓库的pr-enforce-no-major.yml.github/workflows/pr-enforce-no-major-minor-main.ymlEnforce no major or minor on main触发条件相同引用的是pr-enforce-no-major-minor.yml。两份工作流的详细判定逻辑位于 meta 仓库中当前仓库只保留了引用。因此标注标签时的稳妥做法是面向main分支的 PR 避免使用semver: major并留意 CI 上 label 检查的提示。仓库还有 sync-labels.yml 工作流每天定时同步标签同步的类别包含semver保证上述标签始终存在。PR 描述部分按 .github/PULL_REQUEST_TEMPLATE.md 填写包含四个小节Motivation背景与意图必填说明项、Changes变更摘要、Tests可选说明变更如何被测试、Related可选关联 Issue 或引用链接。处理 CLA贡献者许可协议CONTRIBUTING 说明只要向仓库贡献代码或文档包括提 PR就明确同意 Contributor License Agreement文档文件位于 .github/CLA.md。CLA 由 pr-cla.yml 中的 CLA Assistant 自动检查它在 PR 的opened、closed、synchronize事件上运行。根据该工作流的触发条件签名确认支持两种方式在 PR 下回复recheck重新检查或回复签名声明I have read the CLA Document and I hereby sign the CLA。如果 CLA 检查未通过用上述任一方式在 PR 中回复即可触发重新校验。完成标准与验证方式按以上流程走完可以核对的完成状态是make format执行后没有遗留改动make lint整条检查链ruff check/format、依赖 pin 检查、OpenAPI 校验、mypy、deptry全部通过新改动有对应测试且make test或指定TEST_PATH下通过PR 已打好semver: patch/semver: minor/semver: major标签之一面向main的 PR 不使用semver: majorPR 描述按模板填了 Motivation 与 ChangesCLA Assistant 的检查通过。限制方面注意两点一是 semver 标签的强制检查逻辑在 meta 仓库中维护本仓库文档只说明了打标签这一要求本身具体判定细节以 CI 上的报错提示为准二是make install依赖本地 Python 环境文档提示某些 pip 模块可能需要额外安装本地库例如 JPype1 在 ARM Linux 上编译报gcc: fatal error: cannot execute cc1plus时需要g。完成这些检查后你的 PR 就满足了 docs/CONTRIBUTING.md 中列出的全部提交前要求可以等待评审。【免费下载链接】localstack A fully functional local AWS cloud stack. Develop and test your cloud Serverless apps offline项目地址: https://gitcode.com/GitHub_Trending/lo/localstack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表