起因

静态博客已经流行了好多年了,最近终于有动力将博客从 Blogger 迁移到了 Hugo + vercel + Gitalk,期间发现每新发布一篇文章居然要手动去初始化 Gitak 评论,这完全不能忍受,谷哥告诉我有很多人使用脚本实现了,奈何是使用的 ruby, 故使用 python 造个轮子

仅仅在本脚本发布的一天之后,我发现了utteranc 评论系统,它完美的解决了 Gitalk的各种问题,推荐大家替换成 utteranc

本脚本功能

  1. 自动初始化 Gitalk 评论
  2. 自动排除已经初始化的文章,防止重复创建 issue

准备工作

  1. 博客需要生成 sitemap.xml, 格式必须为:https://www.lshell.com/sitemap.xml
  2. 在 GitHub 申请一个新的 Person access token,拥有仓库的读权限;

开始

将 Gitalk 的 id 修改为 path

我的博客使用了 even 主题,Gitalk 默认是使用文章发布时间来映射 issuse,我优化成使用博客path的md5值,以下脚本也是使用 path来映射,具体优化步骤如下:

  1. themes/even/layouts/partials/comments.html 复制到 layouts/partials/comments.html

  2. 引入 md5 js 库 <script src="https://cdn.bootcss.com/blueimp-md5/1.1.0/js/md5.min.js"></script>

  3. 找到 Gitalk 部分,并修改 id 为 location.pathname, 如下图:

update gitalk id

  1. 将此文件提交到仓库

如何创建 Person token

  1. 进入 Github Persion token 创建页面:https://github.com/settings/tokens/new

  2. 填入一个辨识性高的名额和选择仓库读取权限,如下图:

generate github personal token

  1. 点击最现在的 Generate token 创建,得到 token, 注意:token只会在这里显示一次,请一定保存好,若丢失只能重新创建

generate github personal token

创建 Github 仓库 Secrets

因为涉及到关键信息,我们将需要用到的字段创建成 Github 仓库 Secrets 以防止信息泄漏。

在 Github 中对应的博客仓库中进入:Settings ==> Secrets 页面,然后选择 new secret 创建

create github repo secret

拿我博客来说,需要创建的变量如下(注意单引号不能丢):

  • REPO_NAME:'lshell.com'
  • SITEMAP_URL: 'https://www.lshell.com/sitemap.xml'
  • SITE_URL: 'https://www.lshell.com'
  • TOKEN: '8a8612c4914bb79225629ee3dd4d904a6fe53294'
  • USERNAME: 'lshell'

注意:以上信息请修改成你自己的信息

将 python 脚本提交到仓库

从我的 Github 下载 init-gitalk.pyrequirements.txt 到你的仓库中就行

创建 Github Action

  1. 在你的博客仓库页面点击 Action 进入管理页面

  2. 依次点击 New workflow ==> Set up workflow 创建 Action

create github action

  1. 文件名保持 blank.yml 不变,将blank.yml的内容粘贴到文件中,然后依次点击右上角的 Start commit ==> Commit new file 保存。

add github action job

缺点

  1. 每次 push 都会运行脚本,浪费 github 的计算资源了
  2. 可能存在重复创建 issues 的问题

建议大家使用utteranc 评论系统

感谢

  1. hugo 提供如此好的博客程序
  2. hugo-theme-even 提供如此漂亮的主题
  3. 自动初始化 Gitalk 和 Gitment 评论 提供自动初始化思路