PeerTube 版本发布全流程指南:从迁移验证、全量构建到 GitHub Release 与 Embed API 发布
PeerTube 版本发布全流程指南从迁移验证、全量构建到 GitHub Release 与 Embed API 发布【免费下载链接】PeerTubeActivityPub-federated video streaming platform using P2P directly in your web browser项目地址: https://gitcode.com/gh_mirrors/pe/PeerTube本指南以 support/doc/development/release.md 为骨架结合 PeerTube 仓库根目录 package.json 中定义的脚本与 scripts/release.sh、scripts/release-embed-api.sh 等发布实现完整讲解 PeerTube 主版本与peertube/embed-api子包的发布流程。读完本文你将掌握发布前的迁移检查方法、多语言构建验证、CI 与 E2E 测试门槛、npm run release的完整执行链路以及嵌入式播放器 API 的独立发版步骤。PeerTube 主版本发布前的准备正式执行发布命令之前需要完成三项收尾工作它们是保证发布质量的第一道门槛修复剩余的关键 Bug发布分支上不允许残留影响用户的关键缺陷这是合入master前的硬性要求。确保法语翻译 100% 覆盖原文档特别强调法语翻译需要完整覆盖 JoinPeerTube 博客文章中出现的界面文案保证宣传场景下界面语言完整。更新根目录的 CHANGELOG.md发布脚本会从 CHANGELOG 中自动提取本次版本的更新说明见下文发布脚本解析因此 CHANGELOG 中必须存在以## v版本号开头的条目否则发布说明会提取失败或为空。从 scripts/release.sh 的实现看CHANGELOG 不仅用于记录更是发布说明的数据源脚本用awk按版本号头## v...截取对应章节并把结果作为 GitHub Release 的--description上传同时在执行前将提取内容打印出来供人工确认。数据库迁移检查用 benchmark-startup 验证新旧分支PeerTube 的数据库使用 Sequelize ORM见 package.json 中sequelize与sequelize-typescript依赖每次版本升级都可能引入新的数据迁移。发布文档给出了一个可复用的对比验证流程分别在master旧版本与develop新版本上编译并启动服务器确保服务端在应用迁移后能够正常初始化。npm run clean:server:test git checkout master rm -rf ./node_modules npm run install-node-dependencies npm run build:server NODE_APP_INSTANCE6 NODE_ENVtest node dist/server --benchmark-startup git checkout develop rm -rf ./node_modules npm run install-node-dependencies npm run build:server NODE_APP_INSTANCE6 NODE_ENVtest node dist/server --benchmark-startup逐条拆解这条命令链npm run clean:server:test调用 scripts/clean/server/test.sh它并行执行三类清理dropdb/createdb重建peertube_test1~peertube_test6六个数据库并创建pg_trgm、unaccent扩展删除./test1~./test6、config/local-test*.json与 CLI 配置缓存通过redis-cli清空bull-127.0.0.1:900X*等队列键端口从 9001 起按实例递增。rm -rf ./node_modules npm run install-node-dependencies彻底清空并重装依赖。install-node-dependencies在 package.json 中定义为pnpm install --frozen-lockfile配合 pnpm-lock.yaml 实现完全可复现的依赖树。npm run build:server编译服务端到dist/build:server对应 scripts/build/server.sh。NODE_APP_INSTANCE6 NODE_ENVtest node dist/server --benchmark-startup以测试环境加载 config/test-6.yaml 启动服务器。--benchmark-startup选项定义在 server/server.ts其语义是初始化完成后自动停止服务器因此只要命令能正常退出而非报错就说明当前代码版本在干净数据库上可以成功完成迁移并启动。旧版本master能启动、新版本develop也能启动才能确认迁移链路没有回归。全量构建验证确认所有支持的语言都能编译发布前还需要执行一次全量构建验证国际化资源没有破坏任何目标语言的编译产物rm -rf node_modules rm -rf client/node_modules npm run install-node-dependencies npm run build这里的npm run build对应 scripts/build/index.sh它先执行build:server再执行build:client。脚本中的注释解释了为何必须串行Angular 不支持 project references因此服务端与客户端无法并发构建。客户端构建会处理 client/src/locale 下的全部语言文件数十个angular.*.xlf、player.*.json、server.*.json任何语言文件格式损坏都会在这一步暴露。预发布验证实例升级与测试矩阵更新预发布实例构建通过后需要先将 beta 实例peertube2.cpy.re升级到新版本并验证其正常运行作为真实环境下的冒烟测试。CI 与 E2E 测试门槛发布文档明确要求两道测试全部通过CI 测试对应根目录 scripts/ci.sh覆盖 lint、单元测试与集成测试可通过npm run ci触发。E2E 测试需要同时运行BrowserStack 云端测试与本地 E2E 测试分别由 scripts/e2e/browserstack.sh 和 scripts/e2e/local.sh 驱动测试用例位于 client/e2e/src包含suites-all、suites-local等目录覆盖视频上传、播放、账户、管理后台等关键用户路径。执行正式发布发布命令GITHUB_TOKENmy_token npm run release -- 1.x.xnpm run release在 package.json 中指向 scripts/release.sh。传入的1.x.x即为本次发布的版本号。整个脚本的执行链路如下前置校验必须提供GITHUB_TOKEN环境变量用于调用 GitHub Release API当前分支必须是develop或release/*否则直接退出。预发布识别版本号包含-alpha.、-beta.或-rc.时自动标记为 pre-release对应 GitHub Release 的--pre-release选项并且不会更新master分支。CHANGELOG 提取与确认从 CHANGELOG.md 提取## v1.x.x章节作为发布说明打印后等待输入y确认。版本号更新分别对client/package.json与根package.json执行npm version --no-git-tag-version --no-commit-hooks并提交这两个文件与 support/doc/api/openapi.yaml这就是发布文档中更新openapi.yaml版本步骤的落点随后创建带 GPG 签名的 git taggit tag -s。源码级构建执行npm run build -- --source-map产出带 source map 的客户端与服务端产物并清理stats.json与所有.d.ts/.d.ts.map声明文件。归档与签名按固定清单dist/、client/dist/、config/、packages/*/dist/、support/doc、support/nginx、pnpm-lock.yaml等打包peertube-v1.x.x.zipzip -9 最大压缩与peertube-v1.x.x.tar.xzXZ_OPT-e9 -T0多线程极值压缩并使用维护者 GPG 公钥默认583A612D890159BE可通过MAINTAINER_GPG覆盖对两个归档分别生成 ASCII 签名文件。发布到 GitHub推送 tag创建 Release依次上传 zip、zip.asc、tar.xz、tar.xz.asc 四个文件脚本特意在创建与上传之间sleep 2避免因 Release 尚未生效导致上传失败。合入 master 与发布类型包仅正式版合并develop/release/*到master并推送重新构建含声明文件的 server登录 npm 后通过generate-types-packagepackages/types-generator/generate-package.ts生成并发布peertube/types类型包最后把 tar 归档与签名scp到官方构建服务器。发布完成后创建发布分支git checkout -b release/1.x.x git push origin release/1.x.x为后续 hotfix 提供独立的稳定分支。人工检查 Release到 GitHub Releases 页面核对归档文件、签名与发布说明是否齐全正确。线上实例升级先将生产实例peertube3.cpy.re升级并验证随后升级其余全部实例观察运行状态。发布收尾更新版本索引正式发布几天后等待各实例升级完成需要更新 JoinPeerTube 网站的版本信息接口/api/v1/versions.json让官网的最新版本数据与本次 Release 对齐。这是整个发布流程的最后一步用来保证对外展示的版本信息准确。peertube/embed-api 的独立发布除了 PeerTube 主版本嵌入式播放器 API 作为一个独立的 npm 包单独发版。在仓库根目录执行cd client/src/standalone/embed-player-api npm version patch cd ../../../../ npm run release-embed-api这段流程的要点版本策略npm version patch只递增补丁号因为 embed-api 的 API 面很小player.ts、events.ts、definitions.ts改动以增量演进为主如需破坏性变更才考虑 bump minor/major。npm run release-embed-api对应 scripts/release-embed-api.sh进入 client/src/standalone/embed-player-api 执行npm run build该包的 package.json 中 build 脚本为tsc编译类型声明 vite build --mode production打包产物随后npm publish --access public公开发布最后清理dist、build、node_modules临时产物。产物约定包名为peertube/embed-apimain指向./dist/player.jstypes指向./dist/player.d.ts供第三方站点以 JavaScript API 方式与 PeerTube 播放器 iframe 通信初始化、事件订阅、方法调用等能力定义在 client/src/standalone/embed-player-api/README.md 中。小结PeerTube 的发布体系可以概括为三层验证 两条发布通道发布前通过迁移启动检查、全量多语言构建、CI/E2E 双测试验证质量发布时由 scripts/release.sh 一条命令完成版本号更新、签名归档、GitHub Release 上传、master 合并与类型包发布主版本之外peertube/embed-api通过 scripts/release-embed-api.sh 独立迭代。掌握这套流程无论是维护 PeerTube 实例的升级节奏还是参与上游开发贡献都能清晰地知道每个版本从代码到用户的全生命周期。【免费下载链接】PeerTubeActivityPub-federated video streaming platform using P2P directly in your web browser项目地址: https://gitcode.com/gh_mirrors/pe/PeerTube创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Oracle 游标 open v_cur 报错?让走 TaoToken 的 Codex 对着 PL/SQL 循环查

Oracle 游标 open v_cur 报错?让走 TaoToken 的 Codex 对着 PL/SQL 循环查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/22 19:02:08 阅读更多 →
CC Switch 切 TaoToken:Claude Code 的模型名单一次换完再回滚

CC Switch 切 TaoToken:Claude Code 的模型名单一次换完再回滚

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 14:12:22 阅读更多 →
统信UOS上编译内核跑Anbox:从binder配置到APK安装完整指南

统信UOS上编译内核跑Anbox:从binder配置到APK安装完整指南

我最近在一台统信UOS系统的机器上完整走了一遍Anbox路线,从内核编译到安卓APP装进系统,中间踩了不少Linux发行版特有的坑。老实说,UOS虽然和Debian系沾亲带故,但它在内核、安全中心、软件源这几个环节都有自己的脾气,网…

2026/9/21 14:12:22 阅读更多 →

最新新闻

深圳华为公司研发岗避坑指南:从入门到精通的底层逻辑

深圳华为公司研发岗避坑指南:从入门到精通的底层逻辑

深圳华为公司研发岗避坑指南:从入门到精通的底层逻辑 面试被问原理答不上来,是不是当场大脑一片空白?这种尴尬在面试深圳华为公司的研发岗位时尤为致命。很多候选人背了八股文,却连最基础的并发模型都讲不清楚,导致直接挂掉。想真正拿下这个Offer,…

2026/9/22 19:05:11 阅读更多 →
3个坑让新手血亏:王者荣耀代练脚本开发避坑指南

3个坑让新手血亏:王者荣耀代练脚本开发避坑指南

3个坑让新手血亏:王者荣耀代练脚本开发避坑指南 版本升级后 API 全变了,上一周还能跑通的脚本,今天直接报错 AttributeError…

2026/9/22 19:05:11 阅读更多 →
下下片常见报错与解决:保姆级教程带你避开90%的坑

下下片常见报错与解决:保姆级教程带你避开90%的坑

下下片常见报错与解决:保姆级教程带你避开90%的坑 复制来的代码跑不通,报错信息像天书,你是不是也卡在调试的泥潭里拔不出来?别急,这种“下下片”级别的尴尬场面,老手都经历过,但新手往往因为缺乏系统性排查思路,越改越乱。今天这篇保姆级教程,不…

2026/9/22 19:05:10 阅读更多 →
3分钟搞定readme:一文搞懂GitHub项目门面搭建实战

3分钟搞定readme:一文搞懂GitHub项目门面搭建实战

3分钟搞定readme:一文搞懂GitHub项目门面搭建实战 GitHub仓库打开就是一片代码海洋,官方文档翻到第三章还没找到入口?别急,今天带你用一套标准化流程,把 README.md…

2026/9/22 19:05:10 阅读更多 →
潘帕斯雄鹰部署卡顿?3步优化完整示例提速50%

潘帕斯雄鹰部署卡顿?3步优化完整示例提速50%

潘帕斯雄鹰部署卡顿?3步优化完整示例提速50% 配置环境就卡半天,是不是你也遇到过?明明照着教程敲代码,服务器却像死机一样没反应。很多开发者在部署潘帕斯雄鹰相关服务时,常陷入“改一行、重启一次、等待十分钟”的死循环。…

2026/9/22 19:05:10 阅读更多 →
2026最新绿荫继承者调试指南:3招解决代码复制跑不通难题

2026最新绿荫继承者调试指南:3招解决代码复制跑不通难题

2026最新绿荫继承者调试指南:3招解决代码复制跑不通难题 刚把掘金技术社区热帖里的代码复制下来,双击运行,控制台直接红屏报错?别慌,这不是你笨,也不是代码烂。很多转岗进开发圈的朋友都卡在第一步:看着别人跑通的“绿荫继承者”模式示例,自己环…

2026/9/22 19:04:09 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →