菜单

持续集成

相关源文件

本文档介绍了 Sherlock 项目中使用的持续集成和持续部署 (CI/CD) 管道。这些自动化系统确保代码质量、跨平台兼容性,并简化诸如更新支持的网站列表等维护任务。

有关 CI 系统执行的测试框架的信息,请参阅测试框架。有关 CI 系统更新的网站列表管理详细信息,请参阅网站列表管理

CI/CD 架构概述

Sherlock 项目利用 GitHub Actions 来实现其 CI/CD 管道,主要有两个工作流:

  1. 回归测试:确保代码更改不会破坏现有功能。
  2. 网站列表更新:在网站数据更改时自动更新文档。

CI/CD 组件图

来源:.github/workflows/regression.yml .github/workflows/update-site-list.yml

回归测试工作流

回归测试工作流是确保更改不会在多个平台和 Python 版本上破坏现有功能的一个关键组件。

工作流触发器

工作流由以下方式触发:

  • 针对 masterrelease/** 分支的拉取请求。
  • 直接推送到 masterrelease/** 分支。
  • 对 Python 文件、JSON 数据或配置文件进行的更改。

来源:.github/workflows/regression.yml3-23

工作流结构

来源:.github/workflows/regression.yml25-69

测试矩阵配置

回归工作流在多个环境中运行测试,以确保 Sherlock 在不同平台和 Python 版本上都能正常工作。

操作系统Python 版本
ubuntu-latest3.9, 3.10, 3.11, 3.12
windows-latest3.9, 3.10, 3.11, 3.12
macos-latest3.9, 3.10, 3.11, 3.12

这种全面的测试方法确保了跨平台兼容性,并验证了对所有官方支持的 Python 版本的支持。配置使用了 fail-fast: false 选项,以确保即使一个测试失败,所有环境都会继续运行测试,这有助于识别特定于平台的issue。

来源:.github/workflows/regression.yml41-56

代码检查流程

代码质量通过自动化 linting 来维护。

  1. 工作流使用 actions/setup-python@v5 设置 Python 环境。
  2. 通过 pip 安装 tox(测试自动化工具)。
  3. 运行 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

网站列表生成过程

更新网站列表的过程如下:

  1. GitHub Action 使用 actions/checkout@v4 检出代码仓库。
  2. 使用 actions/setup-python@v5 设置 Python 环境。
  3. 运行 devel/site-list.py 脚本,该脚本:
    • 读取 sherlock_project/resources/data.json 文件。
    • 按字母顺序对社交网络进行排序。
    • 生成一个包含支持网站列表的 sites.mdx 文件。
    • 使用排序后的数据更新原始 data.json 文件。
  4. 将生成的网站列表推送到 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 脚本是网站列表更新工作流的核心。

  1. 它从 sherlock_project/resources/data.json 读取网站数据。

  2. 按字母顺序对社交网络进行排序。

  3. 生成一个包含网站列表的 markdown 文件。

然后,工作流使用 sdushantha/github-action-push-to-another-repository action 将生成的文件推送到项目的网站仓库。

来源:devel/site-list.py10-30 .github/workflows/update-site-list.yml35-46

CI/CD 与其他系统的关系

CI/CD 系统与 Sherlock 项目的几个其他组件进行交互。

来源:.github/workflows/regression.yml .github/workflows/update-site-list.yml devel/site-list.py

Python 版本兼容性

Sherlock 要求 Python 3.9 或更高版本,由 __main__.py 文件强制执行。

CI 系统通过其测试矩阵配置,确保了所有支持的 Python 版本(3.9、3.10、3.11 和 3.12)的兼容性。

来源:sherlock_project/__main__.py14-19

总结

Sherlock 项目的 CI/CD 系统由两个主要工作流组成:

  1. 回归测试regression.yml):通过以下方式确保跨平台兼容性和代码质量:

    • 代码检查(Linting)
    • 跨平台测试(Ubuntu、Windows、macOS)。
    • 多 Python 版本测试(3.9 至 3.12)。
  2. 网站列表更新update-site-list.yml):在网站数据更改时自动更新文档。

    • data.json 被修改时触发。
    • 运行 site-list.py 脚本来生成更新后的网站列表。
    • 将更新推送到 Sherlock Project 网站。

这个全面的 CI/CD 系统有助于维护代码质量,确保广泛的兼容性,并减少项目维护者的手动维护工作。