Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Changelog

本文件回答一个问题:「某个版本改了什么」。只记录对外可见的变更,不搬运内部工作记录。

格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循语义化版本。
发版步骤见 [docs/release-process.md](docs/release-process.md)。

## [1.0.0] - 2026-10-10

首个版本基线,不追认历史。本条概括基线时点的对外能力与近期变更。

### Added

- 多平台视频链接转写 API:提交链接后后台转写为文字稿,支持校对稿、摘要、笔记等多视图导出,以及重总结与笔记再生成。
- 网页本地上传:浏览器直接上传本地音视频文件,可查看本人上传历史、随时停止分享;上传幂等键在纯 HTTP 直连(非安全上下文)下同样可用。
- 企业微信通知:任务完成回执与分享摘要回执(wecom-notifier 0.3.2,超长分段锁定预算)。
- 公网入口切换为 sum.zlxlabs.com。

### Security

- 修复 HTTP 响应头自由文本注入(raw 导出 502 事故根因)。
43 changes: 43 additions & 0 deletions docs/release-process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# 发版流程(全手动)

本项目采用全手动发版:一条取材命令 + 人工整理 CHANGELOG,不引入 Conventional Commits、release-please 或任何发布自动化。版本号以 1.0.0 为基线,散布在 `pyproject.toml`、`package.json`、`e2e/package.json`、`src/video_transcript_api/__init__.py` 与 `src/video_transcript_api/api/app.py`,发版时人工同步。

## 发版时机

绑定部署:需要把主干部署到 n305 时发一版。不为发版而发版——没有部署需求就不打 tag、不发 CHANGELOG。

## 发版步骤

以下假设上一版是 `vX.Y.Z`,本次发 `vA.B.C`。

### 1. 取材

在主干 checkout 上跑取材命令,得到自上一版以来每个合并提交的正文(GitHub 会把 PR 标题写进合并提交正文,这就是变更素材):

```sh
git log --first-parent --merges vX.Y.Z..HEAD --format='%b'
```

把素材人工整理成用户可见变更,写入 `CHANGELOG.md` 的新条目(Keep a Changelog 风格)。CHANGELOG 只回答「版本 → 用户可见变更」,不搬运 WORKLOG 或验收流水。

### 2. 打 annotated tag

CHANGELOG 条目经日常流程进主干后,在主干 HEAD(即本次发版提交)上打 annotated tag 并推送:

```sh
git tag -a vA.B.C -m "vA.B.C"
git push origin vA.B.C
```

tag 命名固定 `v` 前缀 + 三段版本号,供下一次取材命令引用。

### 3. 构建与部署

按现有镜像流程:`docker/push_to_ghcr.sh` 在干净工作树上构建并推送 `ghcr.io/zj1123581321/video-transcript-api:<sha12>`,随后 `docker/pull_and_deploy.sh <镜像引用>` 以不可变 digest 部署到目标机。

## 两条红线

1. **禁止给镜像打浮动 tag**(含 `:latest`、`:vA.B.C` 等任何会被后续推送覆盖的引用),镜像 tag 只允许 sha12 唯一。机理:`docker/Dockerfile` 构建时通过 `COPY --from` 从仓库里一个冻结的旧镜像获取 BBDown 二进制;一旦出现浮动 tag,下次构建会把它静默解析到新镜像,BBDown 的来源就被悄悄换掉。`tests/deployment/test_pull_and_deploy.py` 已锁定该行为。
2. **部署 digest 链不动**:`docker/pull_and_deploy.sh` 与 `docker/docker-compose.deploy.yml` 的不可变 digest 约束(`${VIDEO_TRANSCRIPT_IMAGE:?...}` 强制 digest 引用)是部署可追溯性的根基,禁止改成浮动引用或绕过校验。

出现第三方镜像消费者时,浮动 tag 政策需重新裁决后才能放开。
4 changes: 2 additions & 2 deletions e2e/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion e2e/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "video-transcript-api-browser-tests",
"private": true,
"version": "0.1.0",
"version": "1.0.0",
"description": "Blocking Chromium regression tests for the existing VideoTranscriptAPI web pages",
"scripts": {
"test": "node run-browser-tests.mjs"
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "video-transcript-api-web",
"private": true,
"version": "0.1.0",
"version": "1.0.0",
"description": "JS unit tests (vitest) for the PWA front-end assets of VideoTranscriptAPI",
"scripts": {
"test:web": "vitest run",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "video-transcript-api"
version = "0.1.0"
version = "1.0.0"
description = "基于Python的视频转录API服务,支持从多个平台下载视频并转录为文字"
requires-python = ">=3.11"
dependencies = [
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading