本文档介绍了 Sherlock 项目中使用的持续集成和持续部署 (CI/CD) 管道。这些自动化系统确保代码质量、跨平台兼容性,并简化诸如更新支持的网站列表等维护任务。
有关 CI 系统执行的测试框架的信息,请参阅测试框架。有关 CI 系统更新的网站列表管理详细信息,请参阅网站列表管理。
Sherlock 项目利用 GitHub Actions 来实现其 CI/CD 管道,主要有两个工作流:
来源:.github/workflows/regression.yml .github/workflows/update-site-list.yml
回归测试工作流是确保更改不会在多个平台和 Python 版本上破坏现有功能的一个关键组件。
工作流由以下方式触发:
master 或 release/** 分支的拉取请求。master 或 release/** 分支。来源:.github/workflows/regression.yml3-23
来源:.github/workflows/regression.yml25-69
回归工作流在多个环境中运行测试,以确保 Sherlock 在不同平台和 Python 版本上都能正常工作。
| 操作系统 | Python 版本 |
|---|---|
| ubuntu-latest | 3.9, 3.10, 3.11, 3.12 |
| windows-latest | 3.9, 3.10, 3.11, 3.12 |
| macos-latest | 3.9, 3.10, 3.11, 3.12 |
这种全面的测试方法确保了跨平台兼容性,并验证了对所有官方支持的 Python 版本的支持。配置使用了 fail-fast: false 选项,以确保即使一个测试失败,所有环境都会继续运行测试,这有助于识别特定于平台的issue。
来源:.github/workflows/regression.yml41-56
代码质量通过自动化 linting 来维护。
actions/setup-python@v5 设置 Python 环境。tox -e lint 命令来执行 linting 检查。这确保了整个项目代码风格的一致性,并在合并之前捕获潜在问题。
来源:.github/workflows/regression.yml26-40
Sherlock CI/CD 系统的关键功能之一是,当核心网站数据发生变化时,能够自动更新支持的网站列表。
当对 sherlock_project/resources/data.json 文件进行更改并推送到 master 分支时,此工作流会被激活。
来源:.github/workflows/update-site-list.yml .github/workflows/update-site-list.yml16-46
更新网站列表的过程如下:
actions/checkout@v4 检出代码仓库。actions/setup-python@v5 设置 Python 环境。devel/site-list.py 脚本,该脚本:sherlock_project/resources/data.json 文件。sites.mdx 文件。sherlock-project/sherlockproject.xyz 仓库。这个自动化过程确保了文档始终反映当前支持的网站状态,而无需手动更新。
来源:devel/site-list.py1-39 .github/workflows/update-site-list.yml32-46
CI/CD 系统在开发过程中起着核心作用,如下图所示。
来源:.github/workflows/update-site-list.yml .github/workflows/regression.yml devel/site-list.py .github/workflows/update-site-list.yml35-46
回归工作流定义在 .github/workflows/regression.yml 中,并包含针对不同测试环境的特定配置。
tox-matrix:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false # We want to know what specific versions it fails on
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.9', '3.10', '3.11', '3.12']
此配置创建了一个测试矩阵,运行所有操作系统和 Python 版本组合的测试,有助于识别特定于平台或特定于 Python 版本的 issues。
来源:.github/workflows/regression.yml41-56
devel/site-list.py 脚本是网站列表更新工作流的核心。
它从 sherlock_project/resources/data.json 读取网站数据。
按字母顺序对社交网络进行排序。
生成一个包含网站列表的 markdown 文件。
然后,工作流使用 sdushantha/github-action-push-to-another-repository action 将生成的文件推送到项目的网站仓库。
来源:devel/site-list.py10-30 .github/workflows/update-site-list.yml35-46
CI/CD 系统与 Sherlock 项目的几个其他组件进行交互。
来源:.github/workflows/regression.yml .github/workflows/update-site-list.yml devel/site-list.py
Sherlock 要求 Python 3.9 或更高版本,由 __main__.py 文件强制执行。
CI 系统通过其测试矩阵配置,确保了所有支持的 Python 版本(3.9、3.10、3.11 和 3.12)的兼容性。
来源:sherlock_project/__main__.py14-19
Sherlock 项目的 CI/CD 系统由两个主要工作流组成:
回归测试(regression.yml):通过以下方式确保跨平台兼容性和代码质量:
网站列表更新(update-site-list.yml):在网站数据更改时自动更新文档。
data.json 被修改时触发。site-list.py 脚本来生成更新后的网站列表。这个全面的 CI/CD 系统有助于维护代码质量,确保广泛的兼容性,并减少项目维护者的手动维护工作。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(4428b1)