通过 GitHub Actions 自动构建分支
在 CudaText 汉化包项目中需要实现一个 CI/CD 脚本:一是用 msgfmt
命令生成 MO 文件;二是将生成的汉化包发布到 main 分支上。第一步倒是很容易通过 GitHub Actions 调用 Makefile 脚本来实现,第二步纯手写的话似乎比较麻烦,不如我们先问一下神奇的 ChatGPT 吧:
fournoas: 请帮我写一个 github actions workflow 脚本,它先调用 make build 命令构建项目,并将生成的 build 目录内容发布到 main 分支
ChatGPT: 您可以使用以下GitHub Actions workflow脚本来构建项目并将生成的build目录内容发布到main分支。请将以下内容添加到您的项目的
.github/workflows
目录中的一个YAML文件中,例如build.yml
。yamlname: Build and Deploy on: push: branches: - master # 当有代码推送到master分支时触发 jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Build project run: make build # 替换为您的构建命令 - name: Deploy to main branch run: | git config --global user.email "[email protected]" git config --global user.name "GitHub Actions" # Clone the repository git clone https://github.com/${{ github.repository }} /tmp/repo # Copy build directory contents to the main branch cp -r build/* /tmp/repo # Commit and push changes cd /tmp/repo git add . git commit -m "Auto-deploy build files" git push origin main
请确保将上述脚本中的以下部分替换为您的实际配置:
on.push.branches
中的分支名,以便在特定分支推送时触发工作流程。- 构建步骤中的
run
命令,以适应您的项目的实际构建命令。- 在部署步骤中,您可以配置Git的用户名和电子邮件地址,以及更改目标分支(
main
)等信息,以适应您的项目需求。将此文件添加到您的项目后,每当您将代码推送到
main
分支时,GitHub Actions将执行此工作流程,并自动构建项目并将生成的build目录内容发布到main
分支。请确保您的GitHub仓库已启用了GitHub Actions。
ChatGPT 给的这个脚本除了不能用外,还是挺好用的。难道这就是号称将替代程序员的高智能 AI 的日常表现嘛。无奈,接下来又去 GitHub Marketplace 逛了一圈。也许是没有用对正确的搜索关键字,并没有找到合适的脚本。
突然想到 GitHub Pages action 似乎能实现这个功能,虽然这个脚本是用来发布 GitHub Pages 的。经测试发现还挺好用的。
在项目 dev 分支根目录下创建 .github/workflows/build.yml
文件,内容如下:
yamlname: Build and Release
on:
push:
branches:
- dev
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Build project
run: make build
- name: Release project
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.DEPLOY_TOKEN }}
publish_dir: ./build
keep_files: false
enable_jekyll: true
publish_branch: main
脚本中
${{ secrets.DEPLOY_TOKEN }}
的设置参考文章《使用 GitHub Actions 自动部署 Hugo 站点》
特别要注意的是脚本第 25 和 26 行的配置。其中 keep_files: false
表示不保留旧文件,让 main 分支中的文件和当前 build 目录下生成的文件保持一致;另外默认情况下脚本会在分支根目录下创建一个名为 .nojekyll
的文件,设置 enable_jekyll: true
避免生成此文件。