XiNGRZ's BLOG

一些唠叨

关于新博客

上一篇文章说了,我不喜欢用 Jekyll 写博客。具体来说,我不喜欢在代码仓里码字。我觉得这么做很奇怪,感觉我需要正襟危坐打开 VSCode,准备各种图片素材,git commitgit push

那这次重开的博客,怎么解决这个问题呢?简而言之,Issues 和 Actions。

GitHub Issues 本身就可以充当一个内容管理系统。你想想:它支持 Markdown,它的 open 和 closed 状态正好可以对应草稿和发布,它的 labels 就是 tags…它甚至可以粘贴带图!

image

How?

这一整个流程,可以简化如下:

  1. 我有一个私有仓,xingrz/blog,我在里面码字

  2. 我有一个公开仓,xingrz/xingrz.github.io,用来发布 GitHub Pages

  3. 在私有仓里,我做了一个 sync workflow。只要 Issues 有任何变化,就触发公开仓的另一个 deploy workflow

    image
  4. 公开仓的 deploy workflow 作用很简单,就是拉取私有仓的 Issues,生成 posts,然后生成最终 HTML,部署

    image

公开仓的 deploy workflow,大家自己也可以看到:deploy.yml。它的另一个关键是 sync.mjs 这个用来拉取 Issues 并生成 posts 的脚本。

私有仓的 sync workflow 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
name: Sync posts

on:
issues:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: sync
cancel-in-progress: true

jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Sync
run: gh workflow run deploy.yml
env:
GH_REPO: xingrz/xingrz.github.io
GH_TOKEN: ${{ secrets.DEPLOY_TOKEN }}

如果你想把这套流程用到你自己的博客,你需要开一个 Personal Access Token 分别加到两个仓库的 Secrets 里(名称为 DEPLOY_TOKEN)。并且对应更改这两个 workflow 里的 GH_REPO 变量。

挖坑

基于 Actions,可以有更多玩法,比如:

  • 自动发一条 Telegram channel 广播
  • 调用 Puppeteer 生成长截图

以后再说吧。

结语

好了,这篇分享就到这里。主要就是想试试真正用这个流程发一篇文章而已。

Proudly powered by Hexo and Theme by Hacker
© 2022 XiNGRZ