本文档介绍了 GitHub Actions 工作流,这些工作流自动化了 IPTV 存储库的维护、验证和部署。这些工作流确保了存储库内容的一致性、质量和定期更新,使维护者能够专注于更高级的任务。
有关这些工作流中使用的脚本和工具的信息,请参阅脚本和工具。
IPTV 存储库采用三个主要的 GitHub Actions 工作流来自动化存储库维护。
这些工作流协同工作以维护存储库,确保所有流都经过正确格式化、验证并部署给最终用户。
来源: .github/workflows/check.yml .github/workflows/format.yml .github/workflows/update.yml package.json3-26
GitHub Actions 工作流依赖于项目 package.json 文件中定义的一组 npm 脚本。这些脚本提供了验证、格式化、生成和部署播放列表的核心功能。
| 命令 | 目的 | 工作流中使用 |
|---|---|---|
playlist:lint | 使用 m3u-linter 验证播放列表语法 | 检查、格式化 |
playlist:validate | 验证播放列表内容结构 | 检查、格式化 |
playlist:format | 格式化播放列表以确保一致性 | 格式 |
playlist:update | 更新内部播放列表 | 更新 |
playlist:generate | 生成公共播放列表以供部署 | 更新 |
api:generate | 从播放列表中创建 API 数据 | 更新 |
readme:update | 更新 README 统计信息 | 更新 |
playlist:deploy | 将播放列表部署到 GitHub Pages | 更新(通过操作) |
api:deploy | 将 API 数据部署到 iptv-org/api | 更新(通过操作) |
来源: package.json3-26
检查工作流验证拉取请求,确保它们符合存储库的质量标准。每当打开、同步、重新打开或编辑修改流文件的拉取请求时,它都会自动触发。
检查工作流
streams/ 目录中的更改文件来源: .github/workflows/check.yml m3u-linter.json1-17
格式化工作流可确保所有流文件都遵循一致的格式。可以通过 GitHub Actions 界面手动触发。
格式化工作流
playlist:format 命令格式化所有流文件playlist:lint 和 playlist:validate 验证格式化后的文件来源: .github/workflows/format.yml package.json10-11
更新工作流是最全面的,负责更新播放列表、生成公共文件以及部署到 GitHub Pages 和 API 存储库。它每天 UTC 时间午夜运行,或可手动触发。
更新工作流
playlist:update 更新内部播放列表playlist:generate 生成公共播放列表api:generate 创建 API 数据readme:update 更新 README 统计信息来源: .github/workflows/update.yml package.json7-18
GitHub Actions 工作流依赖于 package.json 中定义的 npm 脚本。这些脚本执行实现核心功能的 TypeScript 命令。
主要的 npm 脚本
playlist:format - 使用 TypeScript 实现格式化流playlist:update - 通过检查和刷新流来更新内部播放列表playlist:generate - 从内部源创建面向公众的播放列表playlist:validate - 验证播放列表结构和内容playlist:lint - 使用 m3u-linter 根据规则检查语法api:generate - 为 API 使用创建 JSON 数据readme:update - 更新 README 中的统计信息来源: package.json3-26 m3u-linter.json1-17
更新工作流负责将公共播放列表和 API 数据部署到它们可供用户访问。
部署过程
.gh-pages 目录中.api 目录中来源: .github/workflows/update.yml package.json16-17
m3u-linter 工具用于根据 m3u-linter.json 配置文件中定义的一组规则来验证流文件。这些规则确保了流文件的一致性和正确性。
| 规则 | 目的 |
|---|---|
no-empty-lines | 防止播放列表文件中出现空行 |
require-header | 确保播放列表具有正确的标题 |
attribute-quotes | 强制在属性值周围使用引号 |
require-info | 要求在条目上使用 info 属性 |
require-title | 确保所有条目都有标题 |
no-whitespace-before-title | 防止标题前的空格 |
no-multi-spaces | 防止出现多个连续空格 |
no-extra-comma | 防止在属性中出现多余的逗号 |
space-before-paren | 强制在括号前添加空格 |
no-dash | 防止在某些上下文中出现连字符 |
require-link | 确保所有条目都有有效的链接 |
来源: m3u-linter.json1-17 package.json14
三个工作流协同工作以维护存储库。
这种自动化系统能够在最少的人工干预下实现质量控制、定期更新和一致的格式化,使贡献者能够专注于添加和改进流,而不是维护任务。
来源: .github/workflows/check.yml .github/workflows/format.yml .github/workflows/update.yml