dissboost #46
This file contains 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: Generate Release PDF | |
# 感谢 Derived Cat (@hooyuser) 提供的自动发布小脚本! | |
on: | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- '.gitignore' | |
- 'README.md' | |
- 'examples' | |
- 'CMakeLists.txt' | |
- 'misc' | |
env: | |
MIRROR_SITE_URL: https://142857.red/files | |
MIRROR_SITE_HOOK: https://142857.red/hooks/update_cppguidebook | |
MIRROR_SITE_TOKEN: ${{ secrets.SEVEN_TOKEN }} | |
jobs: | |
build_mkdocs: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Set up Git repository | |
uses: actions/checkout@v4 | |
- name: Prepare Mkdocs environment | |
run: | | |
pip install mkdocs | |
pip install mkdocs-print-site-plugin | |
pip install mkdocs-macros-plugin | |
- name: Compile Mkdocs document | |
run: | | |
mkdocs build | |
- name: Deploy to GitHub Pages | |
uses: peaceiris/actions-gh-pages@v4 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./site | |
- name: Cache Fonts | |
uses: actions/cache@v4 | |
id: cache-fonts | |
with: | |
path: fonts | |
key: ${{ runner.os }}-fonts-noto_sans_sc-lxgwwenkai | |
- name: Download Fonts | |
if: steps.cache-fonts.outputs.cache-hit != 'true' | |
run: | | |
if [ -f "${{ env.TYPST_FONT_PATH }}/NotoSansSC-Regular.ttf" ]; then | |
echo "Font already existed." | |
else | |
# Download font metadata | |
mkdir -p cv | |
curl -sL "https://fonts.google.com/download/list?family=Noto%20Sans%20SC" > cv/noto_sans_sc_raw.txt | |
# Remove ")]}'" from the beginning of the file | |
tail -c +5 cv/noto_sans_sc_raw.txt > cv/noto_sans_sc_metadata.json | |
# Extract the necessary information from the JSON file | |
file_refs=$(jq -rc '.manifest.fileRefs[]' cv/noto_sans_sc_metadata.json) | |
# Download, save the font file to /fonts | |
mkdir -p ${{ env.TYPST_FONT_PATH }} | |
while IFS= read -r file_ref; do | |
filename=$(echo "$file_ref" | jq -r '.filename') | |
url=$(echo "$file_ref" | jq -r '.url') | |
fontname=$(basename "$filename") | |
echo $url $fontname | |
curl -L "$url" -o "${{ env.TYPST_FONT_PATH }}/$fontname" | |
done <<< "$file_refs" | |
ls -l ${{ env.TYPST_FONT_PATH }} | |
fi | |
for form in Light Regular Bold; do | |
curl -L "https://github.com/lxgw/LxgwWenKai/releases/download/v1.330/LXGWWenKai-$form.ttf" -o "${{ env.TYPST_FONT_PATH }}/LXGWWenKai-$form.ttf" | |
done | |
- name: Install Fonts | |
run: | | |
sudo apt-get install -y fonts-noto-cjk | |
- name: Prepare Puppeteer environment | |
run: | | |
npm install puppeteer | |
- name: Compile PDF document | |
run: | | |
node misc/export_to_pdf.js file://$PWD/site/print_page/index.html cppguidebook.pdf "小彭老师的现代 C++ 大典" | |
du -h cppguidebook.pdf | |
- name: Generate ZIP archive | |
run: | | |
cd site && zip -r ../cppguidebook-site.zip . | |
- name: Delete old Release | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const { owner, repo } = context.repo | |
try { | |
const { data: { id } } = await github.rest.repos.getLatestRelease({ owner, repo }) | |
await github.rest.repos.deleteRelease({ owner, repo, release_id: id }) | |
} catch {} | |
- name: Generate release tag | |
id: tag | |
run: | | |
echo "release_date=$(TZ=Asia/Shanghai date +"%Y 年 %m 月 %d 日 %H 点 %M 分")" >> $GITHUB_OUTPUT | |
echo "release_tag=latest_$(date +"%Y-%m-%d_%H-%M")" >> $GITHUB_OUTPUT | |
- name: Release on GitHub | |
uses: softprops/action-gh-release@v2 | |
with: | |
name: 伟大,无需多言 | |
body: | | |
小彭老师发布的最新 C++ 大典,更新时间 ${{ steps.tag.outputs.release_date }} | |
> GitHub 卡顿,无法下载?访问 [小彭老师自己维护的镜像](${{ env.MIRROR_SITE_URL }}/cppguidebook.pdf)。 | |
> 喜欢在线阅读?访问 [GitHub Pages](https://parallel101.github.io/cppguidebook) | |
tag_name: ${{ steps.tag.outputs.release_tag }} | |
files: | | |
cppguidebook.pdf | |
cppguidebook-site.zip | |
- name: Publish to mirror site | |
continue-on-error: true | |
run: | | |
curl -L -X POST ${{ env.MIRROR_SITE_HOOK }} -d token=${{ env.MIRROR_SITE_TOKEN }} -d tag=${{ steps.tag.outputs.release_tag }} |