name: Release AgileBoot
on:
push:
tags:
- 'V*.*.*' #当推送的标签符合 vX.Y.Z 格式时触发
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0 # 获取完整的提交历史
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install pnpm
run: npm install -g pnpm
- name: Build Backend
working-directory: AgileBoot-Back-End-main
run: mvn clean package
- name: Build Frontend
working-directory: AgileBoot-Front-End-main
run: pnpm install && pnpm build
- name: version
id: version
run: |
tag=${GITHUB_REF/refs\/tags\//}
version=${tag#v}
major=${version%%.*}
echo "tag=${tag}" >> $GITHUB_OUTPUT
echo "version=${version}" >> $GITHUB_OUTPUT
echo "major=${major}" >> $GITHUB_OUTPUT
- name: Generate Release Note
id: generate_release_note
run: |
TAG_NAME=$(echo ${{ github.ref_name }} | sed 's/^v//')
PREVIOUS_TAG=$(git tag --sort=-v:refname | sed -n '2p')
COMMIT_RANGE="${PREVIOUS_TAG}..${{ github.ref }}"
echo "Generating release note for tag $TAG_NAME"
echo "Comparing commits between $COMMIT_RANGE"
RELEASE_NOTE=$(git log --pretty=format:"- %s (%h)" $COMMIT_RANGE)
echo "release_note<<EOF" >> $GITHUB_ENV
echo "$RELEASE_NOTE" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ github.ref }}
release_name: V${{ github.ref }}
body: ${{ env.release_note }}
draft: false
prerelease: false
注意触发条件,区别大小写,注意Tag的使用
上述代码是一段GitHub Actions的工作流配置,它用于自动化发布一个项目的版本。以下是代码的解释:
- 触发条件:当推送的标签符合
vX.Y.Z
格式时(例如v1.0.0
),该工作流将被触发。这是通过on: push: tags: - 'V*.*.*'
来实现的。 - 作业名称:
build-and-release
,它将在ubuntu-latest
的环境中运行。 - 步骤:
- Checkout code:使用
actions/checkout@v3
动作来检出代码库,并获取完整的提交历史。 - Set up JDK 11:使用
actions/setup-java@v3
来设置JDK 11的环境。 - Set up Node.js:使用
actions/setup-node@v3
来安装Node.js版本20。 - Install pnpm:运行命令安装
pnpm
包管理器。 - Build Backend:在
AgileBoot-Back-End-main
目录中运行Maven命令来构建后端。 - Build Frontend:在
AgileBoot-Front-End-main
目录中使用pnpm
安装依赖并构建前端。 - version:解析推送标签以获取版本信息,并将其输出。
- Generate Release Note:生成发布说明,包含从上一个标签到当前标签之间的提交日志。
- Create Release:使用
actions/create-release@v1
动作在GitHub上创建一个新的版本发布,使用生成的发布说明作为内容。
- Checkout code:使用
该代码的目的是在推送特定格式的标签时,自动构建项目并在GitHub上发布新版本。