返回

自动部署,你的issues也会变博客

见解分享

现在的人都很懒,有人甚至连写博客都懒了,但一个合格的程序员必须写博客,有益处。我也不想写,想找个办法偷懒。于是诞生了这个idea,github本身就是一个文档平台,而且可以用issue来管理代码的更新历史记录,为什么不直接用issue来当博客呢?

acyort就是我偷懒的工具,能直接将github上的issue同步到博客里,我直接把issue写成博客不就完事了?acyort的处理流程为:

  1. 从github拉取issues,解析内容;
  2. 匹配模板并渲染成html;
  3. 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

部署流程为:

  1. 监听main分支的更新;
  2. 构建程序,也就是调用acyort命令来构建;
  3. 把构建好的静态文件部署到Github Pages上。

最后,我就可以用github issue来写博客了。

我们只需要把issue的title写好,然后再在issue中写一些内容就行了,最后不要忘记给这个issue添加一个label,这样就可以对我们的博客进行分类了。最后提交到github上,Github会自动创建对应的网页,GitHub Actions也会自动部署到Github Pages上,这样我们就完成了博客的发布。

当然了,我们也可以通过访问issue的地址来查看博客,比如Issue #1 · wesleyac/acyort-donob-plugins,这样可以让读者直接在github上进行评论,并且在issue中讨论。