Skip to content

仓库内的 GitHub Actions 工作流使用 GitHub Actions Bot 来提交

标签
网站/GitHub
开发/CICD
开发/CICD/GitHub-Actions
开发/标记语言/YAML
开发/DevOps
开发/容器化/Docker
开发/云原生/Docker
开发/API/GraphQL
开发/API/Protobuf
开发/API/Swagger
开发/API/OpenAPI
命令行/git
开发/Git
字数
790 字
阅读时间
4 分钟

说明

我们可能会需要通过 GitHub Actions 联动触发并构建诸如 Swagger API 文档、Swagger API 生成代码、GraphQL 生成代码、Protobuf 生成代码之类的文件或是项目,在构建之后提交到仓库内,这个时候我们可以利用到 Github Actions 提供的工作流内 Token 和官方预置的机器用户 GitHub Actions Bot 来推送我们新的提交,这样做也可以避免将自动构建的 Commit 和贡献数量计入到管理员账号名下,也可以一目了然的看出来具体是 Bot 提交的还是人为干预提交的。

实践方法

yaml
name: 工作流名称

concurrency: concurrency-key

on:
  workflow_dispatch:

jobs:
  commit_job:
    runs-on: ubuntu-latest
    steps:
      - name: 代码签出
        uses: actions/checkout@v3
        with:
          repository: org/repo1
          token: ${{ secrets.ACCESS_TOKEN }}
          path: clones/org/repo1

      - name: 创建 hello_world.txt 文件
        run: |
            cd clones/org/repo1
            echo 'Hello, world!' >> hello_world.txt

      - name: 同步 repo
        run: |
          cd clones/org/repo1
          bash -c 'if [ $(git status --porcelain | wc -l) -eq 0 ]; then
            echo "工作树无变更,跳过提交步骤..."
          else
            echo "提交文件中..."
            git config user.name "github-actions[bot]"
            git config user.email "github-actions[bot]@users.noreply.github.com"
            git add .
            git commit -m "chore(generated): GitHub Actions Bot 提交的记录"
            git log -3 --oneline
            echo "推送更新中..."
            git push
          fi'

工作流说明

在上述文件中我们创建了一个有 3 个步骤的工作流。

首先需要注意的是第二行的 concurrency 属性,设定该属性可以避免多个工作流并发运行从而导致错误生成版本不正确的代码影响业务开发,关于 concurrency 可以在 官方文档 中找到更多详细内容。

其次是我们使用了 actions/checkout@v3 工作流插件来使用预先配置的 Secret secrets.ACCESS_TOKEN 去克隆 org 组织名下的 repo1 仓库到本地 clones/org/repo1 目录下。

接下来我们使用简单的命令 echo 'Hello, world!' >> hello_world.txtclones/org/repo1 目录下创建了一个内容为 Hello, world! 名为 hello_world.txt 的文件。

我们在第三部执行中先切换到 clones/org/repo1 目录,然后通过 bash -c '<脚本>' 命令来执行一段多行且带有逻辑判断的脚本。git status --porcelain | wc -l 用于统计当前工作区下的文件变更数量,如果我们不需要提交的时候就跳过提交了。反之我们需要将自己的用户配置为用户名为 github-actions[bot] 和邮箱为 github-actions[bot]@users.noreply.github.com 的用户,然后创建我们的提交 chore(generated): GitHub Actions Bot 提交的记录,最后通过 git push 推送到远程分支上。

细节和原理说明

工作流文件中最关键的地方在于这两行:

bash
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

这会将我们的用户配置为用户名为 github-actions[bot] 和邮箱为 github-actions[bot]@users.noreply.github.com 的用户,推送到 GitHub 之后就可以看到下面带有头像且名称为 github-actions[bot] 的提交记录啦。

工作流执行结果

参考资料

贡献者

页面历史

撰写

布局切换

调整 VitePress 的布局样式,以适配不同的阅读习惯和屏幕环境。

全部展开
使侧边栏和内容区域占据整个屏幕的全部宽度。
全部展开,但侧边栏宽度可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
全部展开,且侧边栏和内容区域宽度均可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
原始宽度
原始的 VitePress 默认布局宽度

页面最大宽度

调整 VitePress 布局中页面的宽度,以适配不同的阅读习惯和屏幕环境。

调整页面最大宽度
一个可调整的滑块,用于选择和自定义页面最大宽度。

内容最大宽度

调整 VitePress 布局中内容区域的宽度,以适配不同的阅读习惯和屏幕环境。

调整内容最大宽度
一个可调整的滑块,用于选择和自定义内容最大宽度。

聚光灯

支持在正文中高亮当前鼠标悬停的行和元素,以优化阅读和专注困难的用户的阅读体验。

ON开启
开启聚光灯。
OFF关闭
关闭聚光灯。

聚光灯样式

调整聚光灯的样式。

置于底部
在当前鼠标悬停的元素下方添加一个纯色背景以突出显示当前鼠标悬停的位置。
置于侧边
在当前鼠标悬停的元素旁边添加一条固定的纯色线以突出显示当前鼠标悬停的位置。