🔗 创建并发布 PDF & EPUB #30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: 🔗 创建并发布 PDF & EPUB | |
| on: | |
| schedule: | |
| - cron: '30 15 * * 0' # 每周日 UTC 时间 15:30 运行 | |
| workflow_dispatch: # 可手动触发 | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # ================= 字体安装部分 ================= | |
| - name: 安装字体 | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y ttf-wqy-microhei ttf-wqy-zenhei fonts-noto-core fonts-noto-cjk | |
| - name: 设置时区 | |
| run: | | |
| sudo timedatectl set-timezone Asia/Shanghai | |
| timedatectl | |
| # ================= 仓库检出部分 ================= | |
| - name: 检出 FreeBSD-relnotes-CN 主仓库 | |
| uses: actions/checkout@v6 | |
| with: | |
| path: FreeBSD-relnotes-CN | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| - name: 检出 gitbook-pdf-export 工具 | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: FreeBSD-Ask/gitbook-pdf-export | |
| path: pdf-generator | |
| # ================= 初始化标签检查 ================= | |
| - name: 检查或创建初始标签 | |
| working-directory: FreeBSD-relnotes-CN | |
| run: | | |
| timedatectl | |
| if ! git describe --tags --abbrev=0 2>/dev/null; then | |
| echo "创建初始标签 v0.0.0" | |
| git config --global user.email "actions@github.com" | |
| git config --global user.name "GitHub Actions" | |
| git tag v0.0.0 | |
| git push origin v0.0.0 | |
| fi | |
| # ================= 环境配置部分 ================= | |
| - name: 设置 Python 环境 | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.14' | |
| check-latest: true | |
| - name: 安装 Python 依赖 | |
| run: | | |
| sudo apt-get install -y \ | |
| libpango-1.0-0 \ | |
| libpangoft2-1.0-0 \ | |
| libpangocairo-1.0-0 | |
| pip install weasyprint mistune pygments EbookLib beautifulsoup4 | |
| # ================= PDF 生成部分 ================= | |
| - name: 生成 PDF 文档 | |
| run: | | |
| cd pdf-generator | |
| python mdconv.py ../FreeBSD-relnotes-CN | |
| mv build/final.pdf build/$(date +'%Y.%m.%d').pdf | |
| mv build/final.epub build/$(date +'%Y.%m.%d').epub | |
| env: | |
| PYTHONPATH: ${{ github.workspace }}/pdf-generator | |
| # ================= 发布流程部分 ================= | |
| - name: 设置发布日期标签 | |
| id: set_tag | |
| run: echo "RELEASE_TAG=$(date +'%Y.%m.%d')" >> $GITHUB_ENV | |
| - name: 获取前一个标签 | |
| working-directory: FreeBSD-relnotes-CN | |
| run: | | |
| timedatectl | |
| git fetch --tags --force | |
| PREVIOUS_TAG=$(git describe --tags --abbrev=0) | |
| echo "PREVIOUS_TAG=$PREVIOUS_TAG" >> $GITHUB_ENV | |
| - name: 创建 Git 标签 | |
| working-directory: FreeBSD-relnotes-CN | |
| run: | | |
| timedatectl | |
| git config --global user.email "yklaxds@gmail.com" | |
| git config --global user.name "ykla" | |
| git tag ${{ env.RELEASE_TAG }} | |
| git push origin ${{ env.RELEASE_TAG }} | |
| - name: 生成增量变更日志 | |
| uses: janheinrichmerker/action-github-changelog-generator@v2.4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| sinceTag: ${{ env.PREVIOUS_TAG }} | |
| user: FreeBSD-Ask | |
| repo: FreeBSD-relnotes-CN | |
| - name: 读取变更日志内容 | |
| id: read_changelog | |
| run: | | |
| timedatectl | |
| CHANGES=$(cat CHANGELOG.md) | |
| echo "CHANGES_CONTENT<<EOF" >> $GITHUB_ENV | |
| echo "$CHANGES" >> $GITHUB_ENV | |
| echo "EOF" >> $GITHUB_ENV | |
| - name: 创建 GitHub Release | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| tag: ${{ env.RELEASE_TAG }} | |
| name: ${{ env.RELEASE_TAG }} | |
| artifacts: | | |
| pdf-generator/build/${{ env.RELEASE_TAG }}.pdf | |
| pdf-generator/build/${{ env.RELEASE_TAG }}.epub | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: 更新 Release 说明 | |
| uses: actions/github-script@v9 | |
| with: | |
| script: | | |
| const release = await github.rest.repos.getReleaseByTag({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| tag: process.env.RELEASE_TAG | |
| }); | |
| await github.rest.repos.updateRelease({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| release_id: release.data.id, | |
| body: process.env.CHANGES_CONTENT | |
| }); | |