自动部署,你的issues也会变博客
2024-02-17 11:18:59
现在的人都很懒,有人甚至连写博客都懒了,但一个合格的程序员必须写博客,有益处。我也不想写,想找个办法偷懒。于是诞生了这个idea,github本身就是一个文档平台,而且可以用issue来管理代码的更新历史记录,为什么不直接用issue来当博客呢?
acyort就是我偷懒的工具,能直接将github上的issue同步到博客里,我直接把issue写成博客不就完事了?acyort的处理流程为:
- 从github拉取issues,解析内容;
- 匹配模板并渲染成html;
- html输出到文件系统。
有了acyort以后我就可以放开手脚写了,直接用issue就可以,正好Github还提供了标签的功能,为了方便我创建自己的标签,还可以给每一个issue指定一个label,我就可以直接用label来创建“文章分类”了。
acyort本身功能并不多,需要插件来扩充功能,acyort-donob-plugins就是其中一个,我就是在里面来实现Github issues同步的功能的。插件可以分成两部分:workflow和plugin。
- workflow:主要的逻辑都在这里;
- plugin:存放helper function。
acyort-donob-plugins使用rust编写,要使用这些插件,必须先在cargo.toml中添加依赖:
acyort = { version = "0.1.10", path = "../acyort" }
acyort-donob-plugins = { version = "0.1.1", path = "../acyort-donob-plugins" }
workflow需要先创建,创建完后,还需要在config.toml中进行配置,告诉acyort具体使用哪个workflow。workflow配置如下:
[workflow]
main = "donob"
最后,我们可以使用如下命令来执行插件:
acyort build
issue的处理逻辑放在插件的handle_issue中,首先使用Github API来获取issue,然后通过正则表达式来提取一些信息,比如标题、issue正文中的内容,处理完成后用模板进行渲染,最后输出为html文件。
html输出后还需要部署到服务器上,而我是用Github Pages来进行部署的。Github Pages是一个Github自带的静态网站托管服务,使用Github Actions来进行自动化部署。
用Github Actions创建部署工作流如下:
name: deploy
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build
uses: actions-rs/cargo@v1
with:
command: build
args: --release
- name: Deploy
uses: JamesIves/github-pages-deploy-action@4.1.4
with:
BRANCH: gh-pages # The branch the action should deploy to.
FOLDER: out # The folder the action should deploy.
TOKEN: ${{ secrets.GH_TOKEN }} # The token to grant the action access to your repository
部署流程为:
- 监听main分支的更新;
- 构建程序,也就是调用acyort命令来构建;
- 把构建好的静态文件部署到Github Pages上。
最后,我就可以用github issue来写博客了。
我们只需要把issue的title写好,然后再在issue中写一些内容就行了,最后不要忘记给这个issue添加一个label,这样就可以对我们的博客进行分类了。最后提交到github上,Github会自动创建对应的网页,GitHub Actions也会自动部署到Github Pages上,这样我们就完成了博客的发布。
当然了,我们也可以通过访问issue的地址来查看博客,比如Issue #1 · wesleyac/acyort-donob-plugins,这样可以让读者直接在github上进行评论,并且在issue中讨论。