美化Github Profile探索历程

日月星辰 发布在Tools

之前逛github的时候经常看到别人的首页内容是丰富多彩的,而自己的首页空荡荡的,研究了一番,很多内容是利用Github Actions自动填充的,趁此研究下Github Actions的使用。

首页显示自定义内容

首先创建一个与github账号同名的仓库,在README.md里填入你想要展示的内容即可。这里有人收集了个列表,专门用于美化首页的,可以根据自己的需求选取。这里github-profile这个topic下相关的repo,内容非常丰富。

装扮我的首页

前两个都比较简单,最后一个由于博客生成是使用的github Discussions生成的,所以在试用了几个开源的都无法正常解析博客生气的RSS文件,只好自己来造个轮子了。在Github Markplace里找了一圈发现一个 然后根据使用说明,把自己的rss地址填上了,结果还是不能生成。拉下代码一看,人家直接把自己的博客feed写死了。这个不能等着人家来提供支持了,只能自己进行修改了,看了下代码也不复杂,根据feed的url拉取数据,然后解析,拼接起来写入README中,提交即可。

看到有人提Issues问能不能提供支持其他Feed源,我就找了下开源库,很多都是支持不同订阅源解析的,顺便换了解析逻辑。代码逻辑很快就写完了,剩下的就是测试,没太搞清楚Github Actions是如何自测的。

期间也找了下其他使用Go写的Actions是如何动作的,有的是利用Docker,有的是利用CI功能提前编译好。我这里是利用Docker的方式。

这里要注意的是传参数,看个示例:

name: "Update readme with rss Actions"
description: "Fetch latest blog posts and add it to GitHub profile's readme dynamically. Support multiple rss format."
author: "armingli"
inputs:
  rss_list:
    description: "RSS feed url"
    default: ""
    required: true
  readme_path:
    description: "Path of readme file"
    default: "./README.md"
    required: false
  max_post:
    description: "Max number of posts"
    default: "5"
    required: false
runs:
  using: "docker"
  image: "Dockerfile"
branding:
  icon: 'file-text'
  color: 'red'

这是作为一个Action的声明,这里主要关注下inputs,当你要在你的程序中获取下面的参数是,例如在Go中获取rss_list,是这样的os.Getenv("INPUT_RSS_LIST")。如果参数是非必需的,要处理好默认值。

内容修改好了,然后就是提交、推送到仓库就会显示在首页上了。这里推送有两种方式实现。

  1. 在程序中自己调用git的命令进行提交、推送。
  2. 在workflow中配置提交、推送的相关逻辑,这里又有两种方式
    • 自己写git的命令
      - name: Commit and push
              run: |
                git config --local user.name "GitHub Actions"
                git config --local user.email "action@github.com"
                git add .
                git commit -m "profile updated" || true
                git push origin main
    • 使用现成的Action - uses: ad-m/github-push-action

在推送时一直报下面的这个问题:

remote permission to xxx.xxx denied to github-actions bot

查了一圈发现是当前的仓库没有给workflow开写权限。路径是settings/actions找到general下的workflow权限 ,如下图
image

Github Actions操作对象仓库,在哪个仓库使用就在对应仓库下创建.github/workflows/*.yml文件。

到此,一个个性化的首页就完成了。

另外,说明一下如何更新到README中的,提前在README文件中写入不可见标签,然后进行替换。

    # Blog posts
    <!-- BLOG-POST-LIST:START -->
    <!-- BLOG-POST-LIST:END -->