引言

我的多个网站其实都加入了我个人简历的超链接,用的是我主页中的简历,但其实这个主页的简历我更新起来也比较麻烦,因为需要频繁的修改和复制,因此也很久没有更新过了。经过这近一年多的 CI/CD 工作流,基本对 GitHub Actions 也有一些掌握了,也就有了这一套简历编译分发的工作流,正好也记录一下自己踩过的坑。

工作流

其实整个工作流也非常简单

  1. 将仓库里的tex文件编译成pdf
  2. 将编译好的pdf文件放到我个人主页的pdf目录下并推送修改

(说起来很简单,但是踩过了坑不少,甚至花了近 6h)

前面的编译倒是没浪费多久时间,最开始是想用 latexmk-actions,但是看了一下不太满足我的需求,而且还在更新就放弃了。最后改用了 xu-cheng/latex-action@v2,不得不说,作者的 Actions 的配置写的非常好,基本我的所有需求都实现了,多目录多文件也是没有问题的。

踩过的坑主要就一个 鉴权

因为自己之前也做过跨仓库的,基本只是用了一个 actions,比如hugo-deploy或者gh-pages-deploy,配置一下secrets就可以了,理所当然的,我这次也认为可以通过一个简单的 actions 搞定 push 操作,看了很多和 push 相关的 Actions,写的比较好的就是 ad-m/github-push-action@master 这个了,但是我一直报错 Error: Invalid exit code: 128,看了作者的几个同样报错的 issue,也是没解决,Google 无果,只能再找其他方案。看了几个其他的方案,也是一样没解决我的问题。

回归伊始,其实我们只需要鉴权 + Push 操作即可,我就想能不能在 Pull 的时候鉴权,或者在 Push 的时候鉴权,想在 Push 的时候使用 https://[username]:${{ secrets.PUBLISH_KEY }}@github.com/[username]/[repo] 的形式,但是也未能如愿,在 Pull 的时候同样不行(其实后面我想了一下,这个方案好像是可行的,只需要 clone 了以后,删掉 .git 的信息,当成一个新仓库,然后 add remote url,并且加入这个链接在进行 Push 并且添加 --force 的参数,应该是可行,不知道有没有同学试过 hhh

其实,最终的方案也是最简单的方法,就是利用 actions/checkout,而不是 clone。官方的 checkout 提供了 ssh-key 的参数项(注意不是 token,除非是在下方用的是 Personal Access Token 而不是 Deploy Key)。

最终的 workflow 如下,文件版本可以看 这里

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
name: LaTex Compile and Push

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Git repository
        uses: actions/checkout@v2
        with:
          persist-credentials: false

      - name: Set up HomePage
        uses: actions/checkout@v2
        with:
          repository: beiyuouo/beiyuouo.github.io
          ref: master
          path: homepage
          ssh-key: ${{ secrets.PUBLISH_KEY }}

      - name: Compile CV
        uses: xu-cheng/latex-action@v2
        with:
          root_file: |
            cv_en/cv_en.tex
            cv_cn/cv_cn.tex            
          work_in_root_file_dir: true
          latexmk_use_xelatex: true

      - name: Setup repository
        run: |
          ls -l ${GITHUB_WORKSPACE}
          ls -l ${GITHUB_WORKSPACE}/cv_cn
          ls -l ${GITHUB_WORKSPACE}/cv_en
          git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git config --global user.name "github-actions[bot]"
          cp ${GITHUB_WORKSPACE}/cv_cn/cv_cn.pdf homepage/pdf/cv_cn.pdf
          cp ${GITHUB_WORKSPACE}/cv_en/cv_en.pdf homepage/pdf/cv_en.pdf
          cd homepage && git commit -am "Update CV"
          git status
          git push origin master          

实践

这个简历目录主要有两个版本,一个中文一个英文,用到的字体文件资源都已经上传了,可以直接 clone 然后本地使用。模板主要修改自 这个项目,做了一些中文上的优化。

另外如果你有个人主页,没有 LaTeX 环境想进行云端编译,或者进行分发,可以直接 fork,再修改一下 cv_en.texcv_cn.tex,并配置下 workflows,下面主要介绍有此需求的运行。

以下内容包括以下声明: 主仓库: 即需要上传 pdf 的仓库,如 beiyuouo/beiyuouo.github.io 本仓库: 即简历tex文件所在的仓库,如 beiyuouo/cv

  1. 创建简历

打开[https://github.com/beiyuouo/cv],点击右上角 fork,转到你的用户名下 fork 的仓库,clone 下来

  1. 修改 & 编译简历

根据你的需要修改tex文件,以及子文件夹cv中的tex文件。

  1. 分发

生成 Deploy Key,参考 GitHub Authentication

你可以遵循以下步骤: 1. ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 2. 将 id_rsa.pub 添加到主仓库中的 Settings -> Deploy Keys 中,名称可以随便取,但是要给予 write 的权限 3. 将 id_rsa 添加到本仓库中的 Settings -> Secrets 中,名称填写 PUBLISH_KEY

允许运行 GitHub Actions,根据需要修改 .github/workflows/latex.yml 中的内容如仓库名、分支名等,并将修改 Push 到 GitHub 仓库,等待编译运行即可。

结语

希望能够帮到你,如果这篇文章或者这个仓库侵犯到了你的任何权益,请联系bj.yan.pa@qq.com,我会尽快处理。