升级Hugo

众所周知,这个站使用的Hugo生成的,过去的两年时间一直没写过,hugo已经迭代了很多版本,导致今天尝试了一下发现Action构建的时候各种错误,于是开启了升级之路

升级主题

首先出现的构建错误提示:INFO deprecated: .Site.Author was deprecated in Hugo v0.124.0 and will be removed in a future release. Use taxonomies instead,搜索发现解决方案,新版本的hugo不再支持使用**.Site.Author**来获取作者相关信息。 解决方案:

  1. 首先去查了一下原主题的作者有没有更新这个主题,很好两个月前更新了,于是快乐的合并到我的修改分支上,重新deploy,还是失败。
  2. 猜测原主题没有适配新的hugo版本,以及没有使用最新的hugo来构建(我每次构建都使用的latest)。于是clone下来合并好的修改版主题继续修改
  3. 使用VSCode打开该主题项目,搜索**.Site.Author**,按照说明将所有用到这个参数的地方全部改成.Site.Params.Author,大概有几个地方,例如邮件,名字,主页等等。修改完之后,打开hugo的配置文件 config.toml or config.yaml ,在里面修改原来的[author]配置,将其改为[params.author],保存提交push,一气呵成。

module找不着之hugo mod

重新构建 错误日志是Error: failed to load modules: module "yinyang" not found in "/home/runner/work/blog/blog/themes/yinyang"; either add it as a Hugo Module or store it in "/home/runner/work/blog/blog/themes".: module does not exist 这个主题是通过submodule来配置的:

  path = themes/yinyang
  url = https://github.com/wxjer/hugo-theme-yinyang.git
   [submodule "themes/hugo-notice"]
  path = themes/hugo-notice
  url = https://github.com/martignoni/hugo-notice.git

在构建脚本中:

# 检出代码,并拉取子模块
      - name: Checkout Code
        uses: actions/checkout@v3
        with:
          submodules: recursive  # 拉取所有子模块
          fetch-depth: 0         # 确保拉取完整的 Git 历史

这一块有问题,明明走了拉取,但是没有生成对应的themes/yinyang目录,导致识别不到,再次搜索发现现在的hugo开始使用mod来管理module,包括主题。 每一个hugo创建的站点,每一个hugo 主题都可以理解成一个module,将你的站点改为module,然后就可以添加别的module/主题。大概就是这样意思。 根据官方教程,使用最新的hugo创建一个新的站点之后发现,新的版本配置文件已经更改为hugo.toml,然后主题想要被识别为module,需要在主题文件夹下添加一个go.mod文件,里面的内容就是库地址:

module github.com/wxjer/hugo-theme-yinyang
go 1.23

以及所有支持的go的最低版本,我就写了个本机的go版本,将这个文件发布到主题库之后,然后在配置文件hogo.toml添加主题配置,其中path就是主题module配置文件里的地址:

[module]
  [[module.imports]]
    path = 'github.com/wxjer/hugo-theme-yinyang'

保存之后执行命令hugo mod init name,意思就是将本项目初始化为hogo module,name随便写。

hugo mod init quickstart
# go: creating new go.mod: module quickstart
# go: to add module requirements and sums:
#         go mod tidy

按照提示执行go mod tidy,就OK了 可以执行一遍hugo server在本机跑一下。没问题 将所有修改提交,继续构建还是相同日志的失败!! 对比本地结构发现git上的库没有themes/yinyang文件,难道是这个问题,于是将本地的themes删掉,再次运行hugo失败,同样的错误。这下知道原因了。在本地将这个文件夹及子文件夹添加到git中,提交上去。再次构建

access token 错误

再次失败,日志大概的意思就是没有提交到git库的权限。我是用了两个库,一个私密库用来保存blog的源文件,然后将构建好的网站发布到GitHub的pages库,以**.github.io命名的那个库,所以应该是 personal_token: ${{ secrets.ACTION_ACCESS_TOKEN }} 这个token出现了问题,导致没有权限push到page库,打开token管理,发现之前的token不知道啥时候没了,于是新建一个,复制,然后打开pages库的设置,找到Secrets and variables下面的Actions,修改之前的ACTION_ACCESS_TOKEN为新的token,没有的话则新建一个,名字无所谓,但是要跟Workflow里面取的值的名字一致,否则在action过程中,取不到该token值。 修改完毕后再次执行Workflow,终于成功了。

网站打不开?

构建完成后,打开4bug.cn,打不开,点开pages库的设置,找到Pages,在Custom domain里面看到是之前配置的4bug.cn,但是无法访问,点开旁边的custom domain帮助大概意思就是需要将这个域名重新验证一下,之前这个域名是通过阿里云管理的,后来迁移到Cloudflare了,按照GitHub的要求,打开个人页面下的Settings->Pages,在这里重新验证一下你的域名 image.png 验证通过后就是这个样子,然后去pages库的设置里面重新save一下,划重点,这时候取消掉Cloudflare的cdn加速,并且按照GitHub的文档,将这个域名的解析到GitHub的pages域名下,相关ipv4 跟ipv6的地址信息: image.png

,子域名例如www.4bug.cn 解析到 **.github.io,等GitHub dns解析成功后,重新颁发https证书(勾选上强制https访问)后,访问一切OK后再打开CDN加速。

结束

至此,网站可以成功的访问,可以再次写一些没用的东西了。 致敬2024第一篇文章