工作流改成一次出 EPUB/PDF/离线 HTML 三样挂到同一 Release;README 加下载入口和「自己跑一份」

This commit is contained in:
albert4719 committed 2026-09-19 09:41:13 +08:00
1 parent 260bdde2df
commit c64ac9f8d2
3 files changed
+82 -18

No files matched your search

+49 -15
View File
@@ -1,35 +1,45 @@
# 正文一改就重新生成 EPUB,挂到固定的 Release「epub-latest」上,下载链接不变:
# https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.epub
# 正文一改就重新生成三样,挂到固定的 Release「epub-latest」上,下载链接不变:
# EPUB https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.epub
# PDF https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.pdf
# 离线单文件 https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.html
# PR 只生成并校验,不发布,产物在 Actions 页面的 artifact 里。
name: EPUB
name: 电子书
on:
push:
branches: [main]
paths:
- README.md
- index.html
- og.png
- ads/**
- book/**
- docs/*.md
- tools/epub/**
- .github/workflows/epub.yml
- tools/**
- .github/workflows/book.yml
pull_request:
paths:
- README.md
- index.html
- og.png
- ads/**
- book/**
- docs/*.md
- tools/epub/**
- .github/workflows/epub.yml
- tools/**
- .github/workflows/book.yml
workflow_dispatch:
permissions:
contents: write
concurrency:
group: epub-${{ github.ref }}
group: book-${{ github.ref }}
cancel-in-progress: true
env:
PANDOC_VERSION: '3.11'
TYPST_VERSION: '0.15.1'
jobs:
build:
runs-on: ubuntu-latest
@@ -45,7 +55,25 @@ jobs:
- run: npm ci
working-directory: tools/epub
- run: node tools/epub/build.mjs
- name: EPUB
run: node tools/epub/build.mjs
- name: 离线单文件 HTML
run: node tools/offline/build.mjs
- name: 装 pandoc、typst 和中文字体
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends fonts-noto-cjk
curl -sSL "https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-linux-amd64.tar.gz" | tar xz
curl -sSL "https://github.com/typst/typst/releases/download/v${TYPST_VERSION}/typst-x86_64-unknown-linux-musl.tar.xz" | tar xJ
echo "$PWD/pandoc-${PANDOC_VERSION}/bin" >> "$GITHUB_PATH"
echo "$PWD/typst-x86_64-unknown-linux-musl" >> "$GITHUB_PATH"
- name: PDF
run: |
typst fonts | grep -i -E 'noto (serif|sans) cjk' || echo '没找到 Noto CJK,PDF 会退到别的字体,检查 fonts-noto-cjk 这一步'
node tools/pdf/build.mjs
- uses: actions/setup-java@v4
with:
@@ -60,8 +88,11 @@ jobs:
- uses: actions/upload-artifact@v4
with:
name: HowToLiveBetter.epub
path: dist/HowToLiveBetter.epub
name: HowToLiveBetter
path: |
dist/HowToLiveBetter.epub
dist/HowToLiveBetter.pdf
dist/HowToLiveBetter.html
- name: 发布到 Release epub-latest
if: github.event_name != 'pull_request'
@@ -70,10 +101,13 @@ jobs:
run: |
git tag -f epub-latest
git push -f origin epub-latest
notes="正文提交 ${GITHUB_SHA::7},生成于 $(date -u +%Y-%m-%d) UTC。正文每次更新后自动重新生成,下载链接固定不变。"
notes="正文提交 ${GITHUB_SHA::7},生成于 $(date -u +%Y-%m-%d) UTC。EPUB、PDF、离线单文件 HTML 三样,正文每次更新后自动重新生成,下载链接固定不变。"
if gh release view epub-latest >/dev/null 2>&1; then
gh release edit epub-latest --notes "$notes"
gh release edit epub-latest --title "电子书(EPUB / PDF / 离线 HTML,自动更新)" --notes "$notes"
else
gh release create epub-latest --title "电子书(EPUB,自动更新)" --notes "$notes" --latest=false
gh release create epub-latest --title "电子书(EPUB / PDF / 离线 HTML,自动更新)" --notes "$notes" --latest=false
fi
gh release upload epub-latest dist/HowToLiveBetter.epub --clobber
gh release upload epub-latest \
dist/HowToLiveBetter.epub \
dist/HowToLiveBetter.pdf \
dist/HowToLiveBetter.html --clobber
+4 -1
View File
@@ -49,7 +49,10 @@
正文按节拆成 `book/01-*.md` … `book/31-*.md`(2026-09-08 拆的,原来单文件 531 KB,超过 GitHub 渲染 Markdown 的 512 KB 上限,后面的节显示不出来也跳不了锚点)。README 只留导读、术语表和目录,新增或修改条目改对应的 book 文件;检索页 index.html 先读 README 拿目录里的文件列表,再并发读这些文件。每节文件第一行是回总目录的链接,第二行空行,第三行是 `# N. 节名`。
电子书:`tools/epub/build.mjs`(只依赖 marked,zip 自己打)把 README 的导读、术语表、目录 + book/ 全部节 + docs/ 四篇长文打成 EPUB 3;文件清单从 README 的目录和长文链接里取,新增节或长文不用改脚本。`.github/workflows/epub.yml` 在 main 上正文改动后自动生成、跑 epubcheck、挂到固定 Release `epub-latest`(下载链接不变,README 里引用的就是它);PR 只生成校验不发布。本地 `cd tools/epub && npm ci && npm run build`,产物在 `dist/`(已 gitignore)。**EPUB 文件本身不入库**,正文几乎天天改,提交二进制只会过时和撑大历史(2026-09-18 issue #12 定的方案)。
电子版三样,全由 `.github/workflows/book.yml` 在 main 上正文改动后自动生成,挂到固定 Release `epub-latest`(下载链接不变,README 引用的就是它),PR 只生成校验不发布;产物都进 `dist/`(已 gitignore)。**产物本身不入库**,正文几乎天天改,提交二进制只会过时和撑大历史(2026-09-18 issue #12 定的方案)。README 的结构解析和文件清单收在 `tools/lib/book.mjs`,三套构建共用,新增节或长文不用改脚本。
- EPUB:`tools/epub/build.mjs`(只依赖 marked,zip 自己打),CI 里跑 epubcheck。本地 `cd tools/epub && npm ci && npm run build`。
- 离线单文件 HTML:`tools/offline/build.mjs`(零依赖)把正文内联进 index.html 的 `window.__CORPUS__`,双击就能看、离线可用;index.html 的 `init()` 认这个变量就不发请求,改 init 的取数逻辑要同时顾到这条路。
- PDF:`tools/pdf/build.mjs` + `tools/pdf/template.typ`,pandoc 转 typst、typst 排版(A4、每节另起一页、页眉带节名、目录带页码、书签到条目级)。本地要 pandoc ≥ 3.1 和 typst ≥ 0.13,用环境变量 `PANDOC`、`TYPST` 指到可执行文件;CI 里按 workflow 顶部 env 里钉的版本下载。版面只改 template.typ。
1. 不要早死(外因:交通、火灾、燃气器具与用气安全、毒蘑菇、溺水、跌落、中毒、疫苗、体检筛查、心理危机(12356 与限制致死手段、自杀念头的时间尺度与未遂之后的长期结局、中毒被救回来之后的不可逆后遗症、高处坠落幸存之后的 ICU 与康复账、摘掉一个肾之后剩余肾的长期代价与卖肾者的随访结局,法律那一侧在第 9 节)、家庭应急装备、安全套与不共用针具、艾滋病的免费自愿咨询检测与窗口期、肉眼血尿等该去查的信号;装备清单长文放 docs/家庭应急装备清单.md)
2. 不要慢慢死(烟酒、运动、睡眠、饮食、久坐——只收效应量大且证据硬的,不追求全)
+29 -2
View File
@@ -15,7 +15,7 @@
[![原始文献](https://img.shields.io/badge/%E5%8E%9F%E5%A7%8B%E6%96%87%E7%8C%AE-1066%20%E6%9D%A1%E9%93%BE%E6%8E%A5-565a5f?style=flat-square)](docs/核实记录/)
[![许可](https://img.shields.io/badge/%E8%AE%B8%E5%8F%AF-Unlicense-565a5f?style=flat-square)](LICENSE)
**[打开在线检索页](https://eternity4719.github.io/HowToLiveBetter/)** · [下载 EPUB 电子书](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.epub) · [目录](#目录) · [术语表](#读懂数字术语表) · [核实记录](docs/核实记录/) · [结婚划不划算(长文)](docs/结婚划不划算.md) · [家庭应急装备清单(长文)](docs/家庭应急装备清单.md) · [遇到陌生人出事该不该停(长文)](docs/遇到陌生人出事该不该停.md) · [做平台要办哪些证(长文)](docs/做平台要办哪些证.md)
**[打开在线检索页](https://eternity4719.github.io/HowToLiveBetter/)** · [下载 PDF](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.pdf) · [下载 EPUB](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.epub) · [下载离线单文件(HTML)](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.html) · [目录](#目录) · [术语表](#读懂数字术语表) · [核实记录](docs/核实记录/) · [结婚划不划算(长文)](docs/结婚划不划算.md) · [家庭应急装备清单(长文)](docs/家庭应急装备清单.md) · [遇到陌生人出事该不该停(长文)](docs/遇到陌生人出事该不该停.md) · [做平台要办哪些证(长文)](docs/做平台要办哪些证.md)
其他语言:[Русский(俄语网站)](https://dlgrv.github.io/HowToLiveBetter/) · [俄语仓库](https://github.com/dlgrv/HowToLiveBetter/blob/main/README.ru.md) —— 由 [dlgrv](https://github.com/dlgrv) 维护的非官方翻译,内容以本仓库的中文原文为准。
@@ -67,7 +67,10 @@
- **不用全做**:这是一份按性价比排好的备选单,不是任务清单。挑走一两条就算数,剩下的放着,需要时再回来查。「说着容易做着难」这个评价是对的——作者自己也没做到其中大部分,写下来是为了要用的时候找得到。想挑省力的,看下面「只想看最值得做的」那条。
- **想按条件筛**:打开[在线检索页](https://eternity4719.github.io/HowToLiveBetter/),可以按关键词、章节、证据等级,以及「花不花钱、花多少时间、要不要毅力」三个成本维度组合筛选。数据直接读 book/ 下的正文,改正文即改检索页。
- **想按顺序读**:每节内的条目按性价比从高到低排列,从每节前几条开始看就行。
- **想在 Kindle 或其他阅读器上读**:下载 [EPUB 电子书](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.epub),正文每次更新后自动重新生成,链接不变;Kindle 用 Send to Kindle 发过去即可。
- **想离线看、想发给别人**:下载 [离线单文件 HTML](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.html),整本书连同检索和筛选都在这一个文件里,双击就开,不用服务器也不用联网,微信里也能直接传。
- **想打印或在手机上翻**:下载 [PDF](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.pdf),A4 排版、两百多页,带目录页码和书签,每节另起一页。
- **想在 Kindle 或其他阅读器上读**:下载 [EPUB 电子书](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.epub),Kindle 用 Send to Kindle 发过去即可。
- **三样都是正文每次更新后自动重新生成的**,下载链接固定不变;转发出去的那一份不会跟着更新,以在线版为准。
- **看不懂那串数字**:每条都有一行「说人话」,把「收益」栏里的风险比、置信区间翻成「同期死亡的概率低约两成」「拘留几日、罚多少钱」这类日常说法,只用原文已有的事实,不引入新数字。只看这一行就够做决定;「收益」栏保留全部原始数字和置信区间,供你自己核。
- **只想看结论最硬的**:在检索页里勾选证据等级 A,只留下有具体数字、来自荟萃分析或大型试验的 347 条。
- **只想看最值得做的**:勾选性价比「极高」,得到 100 条既不花钱、不花时间、不需要毅力,收益又落在最大一档的条目。再叠加一个「换回什么」,就是该口径下的优先清单。
@@ -85,6 +88,30 @@
- 备注:争议。肾功能不全、正在吃保钾利尿剂的人不要用。另有一项覆盖 181 个国家的生态学研究发现钠摄入越高的国家预期寿命反而越长、总死亡率反而越低(β=−131 例/克每日钠摄入,R²=0.60,P<0.001),作者据此反对把钠当作缩短寿命的元凶;但生态学研究比的是国家而不是人,富国吃盐多也活得久,无法排除经济水平这个混杂,证据等级低于上面那项随机对照试验。来源:Messerli FH, Hofstetter L, Syrogiannouli L, et al. (2021). Sodium intake, life expectancy, and all-cause mortality. European Heart Journal, 42(21), 2103-2112. <https://doi.org/10.1093/eurheartj/ehaa947>
```
## 自己跑一份
多数人用不着部署:[在线检索页](https://eternity4719.github.io/HowToLiveBetter/)是现成的,要离线就下[离线单文件 HTML](https://github.com/eternity4719/HowToLiveBetter/releases/download/epub-latest/HowToLiveBetter.html),双击就开。
真要在自己电脑或服务器上跑:
```bash
git clone https://github.com/eternity4719/HowToLiveBetter.git
cd HowToLiveBetter
python -m http.server 8000
```
然后浏览器开 `http://localhost:8000/`。检索页是纯静态的,`README.md` 和 `book/` 就是它的数据,没有后端、没有数据库、不用装依赖;把整个目录丢给任何静态服务器(Nginx、GitHub Pages、对象存储)效果一样。注意 `index.html` 必须经 http 打开,直接双击本地文件会空白——浏览器不许网页读本地文件,那种场景请用上面的离线单文件版。
想自己生成三样电子版(平时用不着,Release 里的就是自动生成的):
```bash
cd tools/epub && npm ci && npm run build # EPUB
node tools/offline/build.mjs # 离线单文件 HTML
node tools/pdf/build.mjs # PDF,另需 pandoc ≥ 3.1 和 typst ≥ 0.13
```
产物都在 `dist/`。
## 四种资源
本指南优化的不只是寿命,而是四种资源: