菜单

自动化工作流

相关源文件

本文档介绍了 GitHub Actions 工作流,这些工作流自动化了 IPTV 存储库的维护、验证和部署。这些工作流确保了存储库内容的一致性、质量和定期更新,使维护者能够专注于更高级的任务。

有关这些工作流中使用的脚本和工具的信息,请参阅脚本和工具

工作流系统概述

IPTV 存储库采用三个主要的 GitHub Actions 工作流来自动化存储库维护。

  1. 检查工作流 - 验证拉取请求,确保它们符合质量标准。
  2. 格式化工作流 - 格式化播放列表以确保一致性。
  3. 更新工作流 - 生成播放列表、更新 README 并部署内容。

这些工作流协同工作以维护存储库,确保所有流都经过正确格式化、验证并部署给最终用户。

来源: .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

检查工作流

检查工作流验证拉取请求,确保它们符合存储库的质量标准。每当打开、同步、重新打开或编辑修改流文件的拉取请求时,它都会自动触发。

检查工作流

  1. 触发涉及流文件的 PR 事件
  2. 识别 streams/ 目录中的更改文件
  3. 设置 Node.js 环境
  4. 仅对更改的文件运行 linting 和验证
  5. 将验证状态报告回 PR

来源: .github/workflows/check.yml m3u-linter.json1-17

格式化工作流

格式化工作流可确保所有流文件都遵循一致的格式。可以通过 GitHub Actions 界面手动触发。

格式化工作流

  1. 使用机器人凭据设置 Git 环境
  2. 使用 playlist:format 命令格式化所有流文件
  3. 使用 playlist:lintplaylist:validate 验证格式化后的文件
  4. 如果进行了更改,则使用标准化的提交消息将其提交回存储库

来源: .github/workflows/format.yml package.json10-11

更新工作流

更新工作流是最全面的,负责更新播放列表、生成公共文件以及部署到 GitHub Pages 和 API 存储库。它每天 UTC 时间午夜运行,或可手动触发。

更新工作流

  1. 使用 playlist:update 更新内部播放列表
  2. 验证更新后的播放列表
  3. 使用 playlist:generate 生成公共播放列表
  4. 使用 api:generate 创建 API 数据
  5. 使用 readme:update 更新 README 统计信息
  6. 提交更改到存储库
  7. 将公共播放列表部署到 GitHub Pages
  8. 将 API 数据部署到 iptv-org/api 存储库

来源: .github/workflows/update.yml package.json7-18

NPM 脚本与实现

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 数据部署到它们可供用户访问。

部署过程

  1. 生成的公共播放列表存储在 .gh-pages 目录中
  2. 生成的 API 数据存储在 .api 目录中
  3. GitHub Actions 将这些目录部署到它们各自的存储库
  4. 内容通过 GitHub Pages 可供最终用户和应用程序使用

来源: .github/workflows/update.yml package.json16-17

M3U Linting 规则

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

工作流协作

三个工作流协同工作以维护存储库。

  1. 检查工作流 确保拉取请求在合并前符合质量标准
  2. 格式化工作流 维护流文件格式的一致性
  3. 更新工作流 定期刷新、生成和部署内容

这种自动化系统能够在最少的人工干预下实现质量控制、定期更新和一致的格式化,使贡献者能够专注于添加和改进流,而不是维护任务。

来源: .github/workflows/check.yml .github/workflows/format.yml .github/workflows/update.yml