前言
GitHub Actions 可以构建一组自动化的工作流程,并提供了拉取请求、合并分支等事件来触发他们。一般成熟的开源项目会在每个版本发布时提供 releases ,它就是通过 Actions 来自动发布的。本文就以自动发布 releases 这个例子来认识 Actions。
创建 workflow
workflow 被称为工作流,每个工作流以一个 yaml 文件表达。在仓库中建立 .github/workflows/release.yaml
文件,如果需要多个工作流,则创建多个 yaml 文件即可。
release.yaml
:
# 定义工作流的名称
name: teach-study Release
# 定义一个 push 事件:当推送带有 "v*" 的标签时触发
on:
push:
tags:
- "v*"
# 定义时区
env:
TZ: Asia/Shanghai
这样我们就定义好了一个事件,接下来我们来定义 jobs,来创建自动上传 release 的逻辑:
...
jobs:
create_release:
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Create Release
id: create_release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
name: Demo ${{ github.ref_name }}
draft: false
prerelease: false
这个 jobs 包含了两个操作。什么是操作呢?可以理解为执行一组命令来完成某些事情,操作既可以自定义,也可以使用 GitHub 社区中分享的。在 job 中使用 uses
指定,搭配上 with
关键词用于给操作传递参数。
第一个使用了 actions/checkout@v4
操作,它可以帮助我们将仓库中的源码拷贝到工作流中来,这个操作是 GitHub Action 内置的操作之一。第二个使用了 softprops/action-gh-release@v1
的操作创建了一个 release 并自动上传到 GitHub 中, ${{ secrets.GITHUB_TOKEN }}
用于自动令牌身份验证,with
传递了四个参数,其中 tag_name
和 name
的值传递了 Actions 的上下文,softprops/action-gh-release@v1
还有其他可选的参数,可以点此查看。
验证
把 release.yaml 推送到仓库中,并且设置好 GITHUB_TOKEN 的读写权限:
然后推送一个 v1.0.0 的标签:
git tag v1.0.0
git push origin --tags
查看最终效果: