ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Apache Airflow Cassandra Provider 详细提交列表:commits.rst 的自动生成机制与版本演进全景

Apache Airflow Cassandra Provider 详细提交列表:commits.rst 的自动生成机制与版本演进全景 后端任务调度工作流自动化数据编排批处理数据工程流程编排【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址https://gitcode.com/GitHub_Trending/ai/airflow点击查看免费下载Apache Airflow 的每个 provider 包都附带一份名为commits.rst的“详细提交列表”文档providers/apache/cassandra/docs/commits.rst正是 Apache Cassandra providerapache-airflow-providers-apache-cassandra的这一页面。本篇以该文档为切入点完整讲清它的文件构成、两套自动生成管线breeze 模板 Sphinx 扩展、按版本标签切分 git 历史的实现原理以及如何借助它追踪该 provider 从 1.0.0 到 3.10.1 的全部版本演进。一、文档本体commits.rst 里实际写了什么先完整看一下 commits.rst 在仓库中的原始内容去掉 Apache License 头之后的有效部分Package apache-airflow-providers-apache-cassandra ------------------------------------------------------ Apache Cassandra https://cassandra.apache.org/__. This is detailed commit list of changes for versions provider package: apache.cassandra. For high-level changelog, see :doc:package information including changelog index. .. airflow-providers-commits::它由四部分组成包标题Package apache-airflow-providers-apache-cassandra指明这份提交列表所属的 pip 包一句话描述直接取自 provider.yaml 中的description字段Apache Cassandra引导说明声明这是apache.cassandraprovider 各版本的详细提交清单并用:doc:角色把“高层 changelog”指向同目录的 index.rst——那里有发布版本、安装命令和依赖要求表Sphinx 指令占位符.. airflow-providers-commits::整份文档的技术核心。真正的提交列表并不保存在这个文件里而是在文档构建时由 Sphinx 扩展动态注入构建命令带--include-commits时否则该指令渲染为一行提示文字When you add --include-commits to the build command, this will be replaced with the list of commits.文件头部还有三行醒目的 RST 注释.. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE OVERWRITTEN! .. IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE PROVIDER_COMMITS_TEMPLATE.rst.jinja2 IN the dev/breeze/src/airflow_breeze/templates DIRECTORY这明确了两件事该文件是自动生成物会被覆盖如需修改其结构应修改模板而不是手工编辑。下一节就跟踪这条生成管线。二、静态骨架的来源breeze 的 Jinja2 模板commits.rst的静态部分标题、描述、引导段、指令占位符完全由模板 PROVIDER_COMMITS_TEMPLATE.rst.jinja2 渲染而成。模板的核心逻辑模板末尾的正文部分为Package {{ PACKAGE_PIP_NAME }} ------------------------------------------------------ {{ PROVIDER_DESCRIPTION | safe }} This is detailed commit list of changes for versions provider package: {{PROVIDER_ID}}. For high-level changelog, see :doc:package information including changelog index. .. airflow-providers-commits::{{ PACKAGE_PIP_NAME }}渲染为apache-airflow-providers-apache-cassandra{{ PROVIDER_DESCRIPTION | safe }}以 RST 安全方式注入 provider 描述因此最终文档里出现了带链接的Apache Cassandra{{ PROVIDER_ID }}渲染为apache.cassandra点号形式的 provider id。调用侧位于 provider_documentation.py_update_commits_rst()在 provider 发布流程中被触发def _update_commits_rst( context: dict[str, Any], provider_id: str, target_path: Path, regenerate_missing_docs: bool, ) - None: _update_file( contextcontext, template_namePROVIDER_COMMITS, extension.rst, file_namecommits.rst, provider_idprovider_id, target_pathtarget_path, regenerate_missing_docsregenerate_missing_docs, )也就是说发布管理器在准备 provider 发布文档时breeze 会用该模板重新生成providers/apache/cassandra/docs/commits.rst与同流程生成的changelog.rst、index.rst等保持同一目录结构见 index.rst 中 Commits 一节的 toctree 把Detailed list of commits commits挂进文档树。三、动态内容的来源Sphinx 扩展 airflow-providers-commits.. airflow-providers-commits::指令由 providers_commits.py 注册注册入口在该文件的setup(app)def setup(app): Setup plugin app.add_directive(airflow-providers-commits, ProviderCommitsClassesDirective) if shutil.which(git) is None: raise RuntimeError(Git is not installed or not found in PATH) return {parallel_read_safe: True, parallel_write_safe: True}注意它直接依赖系统git——没有 git 的构建环境会直接报错因为整张提交表都是现场执行git log得到的。3.1 渲染开关INCLUDE_COMMITS指令的render_content()providers_commits.py#L238-L252逻辑非常直接def render_content(self, *, tags: set[str] | None, header_separator: str DEFAULT_HEADER_SEPARATOR): package_name os.environ.get(AIRFLOW_PACKAGE_NAME) if not package_name: raise ValueError(AIRFLOW_PACKAGE_NAME environment variable is not set.) if not package_name.startswith(apache-airflow-providers-): raise ValueError(...) provider_id package_name.replace(apache-airflow-providers-, ).replace(-, .) if os.environ.get(INCLUDE_COMMITS, ) true: return _get_all_changes_for_package_as_rst(provider_id) return ( When you add --include-commits to the build command, this will be replaced with the list of commits.\n\n )要点扩展从AIRFLOW_PACKAGE_NAME环境变量如apache-airflow-providers-apache-cassandra反推出 provider idapache.cassandra因此同一个指令可以为所有 provider 包通用只有当环境变量INCLUDE_COMMITStrue对应构建命令的--include-commits标志时才真正执行 git 历史采集并渲染 RST 表格否则输出那行占位提示——这正是当前仓库中commits.rst末尾那个空指令“看起来什么都没写”的原因提交表是构建期产物不进版本库。3.2 数据模型Change 结构每条提交被解析为一个Change命名元组providers_commits.py#L44-L53class Change(NamedTuple): Stores details about commits full_hash: str short_hash: str date: str version: str message: str message_without_backticks: str pr: str | Nonepr字段由正则PR_PATTERN re.compile(r.*\(#(\d)\))从提交主题中提取例如 Drop support for Python 3.10 (#74157) 会被关联到 PR 号 74157message_without_backticks则把消息里的反引号替换为单引号避免 RST 行内标记被提交信息中的代码块语法破坏。3.3 git 历史的采集版本标签与路径过滤git 命令的构造providers_commits.py#L81-L107git_cmd [ git, log, --prettyformat:%H %h %cd %s, --dateshort, ] if from_commit and to_commit: git_cmd.append(f{from_commit}...{to_commit}) ... folders [folder_path.as_posix() for folder_path in folder_paths] if folder_paths else [.] git_cmd.extend([--, *folders])即输出格式为「完整哈希 短哈希 日期 提交主题」四段%H %h %cd %s日期为 short 格式后续按空格最多切 3 次拆分。提交区间用三点的from...to语法且-- 路径限定只统计落在 provider 相关目录内的提交。版本标签方案_get_version_tag()把版本号3.10.1映射到 git 标签providers-apache-cassandra/3.10.1provider id 中的点号替换为连字符。历史路径兼容_get_possible_old_provider_paths()providers_commits.py#L64-L78为每个 provider 额外收集三个历史位置保证早期版本的提交也能被统计进来airflow/providers/...provider 代码最初位于主仓库airflow包内时的目录providers/src/airflow/providers/...provider 拆分前的命名空间包位置docs/apache-airflow-providers-...早期独立文档目录。逐版本遍历_get_all_changes_for_package_as_rstproviders_commits.py#L178-L214读取provider.yaml的versions列表尝试解析下一个版本标签git rev-parse providers-apache-cassandra/版本若该标签尚不存在即最新版本还没打 tag回退为HEAD从最新到最旧逐对相邻版本执行git log每个版本区间生成一张表最新版本区间用git log 上一个标签无 to 参数统计到当前分支顶端。表格输出_convert_git_changes_to_tableproviders_commits.py#L128-L175用tabulate以 RST pipe 表输出三列Commit | Committed | SubjectCommit列是[短哈希](https://github.com/apache/airflow/commit/完整哈希)形式的链接每张表前加版本标题和一行Latest change: 日期取自该版本区间第一条提交的日期。四、结合 Cassandra provider 实际看版本列表与提交追踪4.1 版本清单对 Cassandra provider 而言_get_all_changes_for_package_as_rst遍历的正是 provider.yaml 中的 35 个版本从最新的3.10.1一路回溯到1.0.0中间包括3.10.0、3.9.x全系列、3.8.x、3.7.x、3.6.0、3.5.x、3.4.x、3.3.0、3.2.x、3.1.x、3.0.0以及 2.x 时代的2.1.x/2.0.x和最初的1.0.x。因此最终渲染出的提交页会被切分为 35 个以版本号作标题的区块每个区块对应providers-apache-cassandra/旧版本到providers-apache-cassandra/上一版本或HEAD之间的全部提交。文件里也有明确注释versions由发布管理器维护贡献者不应手工改它只有当其他 provider 已经使用更高版本时才需同步 bump。4.2 提交统计覆盖的代码范围对apache.cassandra而言git 路径过滤覆盖的目录为providers/apache/cassandra现位置源码在 src/airflow/providers/apache/cassandra/ 下含hooks/cassandra.py、sensors/record.py、sensors/table.py等三个历史位置airflow/providers/apache/cassandra、providers/src/airflow/providers/apache/cassandra、docs/apache-airflow-providers-apache-cassandra。所以提交表统计的是“影响这个 provider 的所有提交”——包括源码、测试tests/下、文档docs/下与元数据变更而不只是 hook/sensor 的行为变化。4.3 与 changelog 的分工commits.rst的引导段特意把读者引向 changelog.rst两者定位不同changelog是半自动维护的“高层变更日志”按版本分组只保留对用户有意义的条目Features/Bugfix/Misc 等并有明确规范“只有在存在 breaking change 且需要向用户解释应对方式时才在 Changelog 头部追加说明”其余由发布管理器半自动更新commits.rst则是无过滤的“完整审计轨迹”每一行对应一次真实提交。以当前 3.10.1 为例changelog.rst 记录的有效变更只有两条3.10.1 ...... Misc ~~~~ * Drop support for Python 3.10 (#74157) Doc-only ~~~~~~~~ * Update provider READMEs for the Python 3.11 baseline (#74158)而 changelog 中“Below changes are excluded from the changelog”注释块里列出的那些纯 CI 类提交如 [main] Upgrade important CI environment (#73629)仍会出现在 commits 页的提交表中——这正是这份详细提交列表存在的价值它补齐了高层 changelog 有意省略的完整历史。4.4 读者可用的等价查询命令理解了生成管线后任何人都可以用同样的 git 命令在本地仓库复刻某一版本的提交表例如查看providers-apache-cassandra/3.9.4到providers-apache-cassandra/3.10.0之间影响该 provider 的提交git log --prettyformat:%H %h %cd %s --dateshort \ providers-apache-cassandra/3.9.4...providers-apache-cassandra/3.10.0 \ -- providers/apache/cassandra airflow/providers/apache/cassandra \ providers/src/airflow/providers/apache/cassandra \ docs/apache-airflow-providers-apache-cassandra这与 providers_commits.py 中_get_git_log_command()拼出的命令完全同构。五、使用建议与小结用户视角升级apache-airflow-providers-apache-cassandra前若 changelog 只给了简短条目而你想确认某个 PR 是否进入了目标版本应查该 provider 文档站上的 Detailed list of commits 页即commits.rst渲染结果包的基本信息与安装方式见 index.rst最低 Airflow 要求 2.11.0cassandra-driver要求随 Python 版本分档。贡献者视角不要把commits.rst当作可编辑文档——它是 breeze 模板 的产物会被发布流程覆盖想改结构就改模板。同样changelog.rst只在 breaking change 时手工补充说明其余交给发布工具。机制小结commits.rst breeze 模板生成的静态骨架包名、描述、引导、指令占位符 Sphinx 扩展在带--include-commits的构建中现场执行的git log结果按providers-apache-cassandra/版本标签切分、按 provider 现路径与三个历史路径过滤、解析成Change结构后用tabulate渲染为带链接的 RST 表格。这套机制由 devel-common/src/sphinx_exts/providers_commits.py 与 provider_documentation.py 共同实现对仓库内所有 provider 包统一适用Cassandra provider 的这份文档只是它的一个具体实例。赞分享后端任务调度工作流自动化数据编排批处理数据工程流程编排【免费下载链接】airflowApache Airflow - A platform to programmatically author, schedule, and monitor workflows项目地址https://gitcode.com/GitHub_Trending/ai/airflow点击查看免费下载相关推荐Apache Airflow 的 Apache Pinot Provider 版本演进与变更全解析1.0.0 → 4.10.3Apache Airflow 的 Apache Pinot Provider 版本演进与变更全解析1.0.0 → 4.10.3 Apache Pinot 是后端任务调度工作流自动化数据编排批处理数据工程流程编排Joplin Android 版本日志详解版本演进脉络与自动化 Changelog 生成机制Joplin Android 版本日志详解版本演进脉络与自动化 Changelog 生成机制 本篇基于 Joplin 仓库中的 Android 变更日志文档知识管理跨平台插件系统Apache Airflow Akeyless Provider 版本演进深度解析从 AkeylessHook 到云原生 Secrets BackendApache Airflow Akeyless Provider 版本演进深度解析从 AkeylessHook 到云原生 Secrets Backend Ap后端任务调度工作流自动化数据编排批处理数据工程流程编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表