239 lines
9.6 KiB
YAML
239 lines
9.6 KiB
YAML
name: 自动版本发布
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- main
|
||
|
||
jobs:
|
||
AutoRelease:
|
||
# 如果有Release标签则运行jobs
|
||
if: "contains(github.event.head_commit.message, 'Release')"
|
||
# 工作在ubuntu-latest系统中
|
||
runs-on: ubuntu-latest
|
||
# 以下是steps
|
||
steps:
|
||
|
||
- name: 检出仓库
|
||
uses: https://git.linuxacme.com/iorebuild/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
# 启用子模块支持
|
||
submodules: false
|
||
|
||
- name: 设置环境变量
|
||
env:
|
||
CURRENT_USER_NAME: "iorebuild"
|
||
CURRENT_USER_EMAIL: "liyepan@linuxacme.com"
|
||
GITEA_REPO_URL: ${{ github.server_url }}/${{ github.repository }}
|
||
REPO_NAME: ${{ github.event.repository.name }}
|
||
run: |
|
||
git config user.name "$CURRENT_USER_NAME"
|
||
git config user.email "$CURRENT_USER_EMAIL"
|
||
echo "Name = $CURRENT_USER_NAME"
|
||
echo "Email = $CURRENT_USER_EMAIL"
|
||
|
||
- name: 替换软件源为国内软件源(USTC)
|
||
run: |
|
||
cat /etc/os-release
|
||
sudo rm -f /etc/apt/sources.list
|
||
sudo rm -f /etc/apt/sources.list.d/*
|
||
sudo tee /etc/apt/sources.list <<EOF
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble main restricted universe multiverse
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble-security main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble-security main restricted universe multiverse
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
|
||
EOF
|
||
|
||
- name: 从提交信息提取版本号
|
||
id: extract_version
|
||
run: |
|
||
# 从提交信息中提取 vX.X.X 格式的版本号
|
||
VERSION=$(echo "${{ github.event.head_commit.message }}" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+')
|
||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||
echo "提取到的版本号: $VERSION"
|
||
|
||
- name: 验证版本号
|
||
run: |
|
||
if [ -z "${{ steps.extract_version.outputs.version }}" ]; then
|
||
echo "::error::提交信息中未找到有效的版本号 (示例: 'Release v1.0.5')"
|
||
exit 1
|
||
fi
|
||
echo "${{ steps.extract_version.outputs.version }}"
|
||
|
||
- name: 创建并推送标签
|
||
run: |
|
||
git tag -a ${{ steps.extract_version.outputs.version }} -m "Release ${{ steps.extract_version.outputs.version }}"
|
||
git push origin ${{ steps.extract_version.outputs.version }}
|
||
|
||
- name: 查找第1个.bin 文件
|
||
id: find-bin-files-1
|
||
run: |
|
||
BIN_FILES=$(find ./Bin -name "*.bin" -print0 | tr '\0' ',')
|
||
BIN_FILES=${BIN_FILES%,}
|
||
echo "bin_files=$BIN_FILES" >> $GITHUB_OUTPUT
|
||
echo "bin_files=$BIN_FILES"
|
||
- name: 查找第2个.bin 文件
|
||
id: find-bin-files-2
|
||
run: |
|
||
BIN_FILES=$(find ./Bin1 -name "*.bin" -print0 | tr '\0' ',')
|
||
BIN_FILES=${BIN_FILES%,}
|
||
echo "bin_files=$BIN_FILES" >> $GITHUB_OUTPUT
|
||
- name: 查找第3个.bin 文件
|
||
id: find-bin-files-3
|
||
run: |
|
||
BIN_FILES=$(find ./Bin2 -name "*.bin" -print0 | tr '\0' ',')
|
||
BIN_FILES=${BIN_FILES%,}
|
||
echo "bin_files=$BIN_FILES" >> $GITHUB_OUTPUT
|
||
|
||
- name: 获取上次发布标签
|
||
id: get-previous-tag
|
||
run: |
|
||
PREVIOUS_TAG=$(git tag --sort=-creatordate | sed -n '2p')
|
||
if [ -z "$PREVIOUS_TAG" ]; then
|
||
PREVIOUS_TAG="HEAD~1" # 如果没有上次标签,使用上一次提交
|
||
fi
|
||
echo "previous_tag=$PREVIOUS_TAG" >> $GITHUB_OUTPUT
|
||
echo "$PREVIOUS_TAG"
|
||
|
||
- name: 获取提交记录
|
||
id: get-commit-log
|
||
run: |
|
||
COMMIT_LOG=$(git log ${{ steps.get-previous-tag.outputs.previous_tag }}..HEAD --pretty=format:"- %s (%h)" | tr '\n' '\r')
|
||
echo "commit_log=$COMMIT_LOG" >> $GITHUB_OUTPUT
|
||
echo "commit_log=$COMMIT_LOG"
|
||
|
||
- name: 解析Release标题
|
||
id: parse-release
|
||
run: |
|
||
commit_message="${{ github.event.head_commit.message }}"
|
||
title=$(echo "$commit_message" | cut -d ' ' -f 3-)
|
||
if [ -z "$title" ]; then
|
||
echo "未在提交信息中找到 Release 标题。"
|
||
title="default_title"
|
||
fi
|
||
# 使用新语法设置输出
|
||
echo "title=$title" >> $GITHUB_OUTPUT
|
||
echo "title=$title"
|
||
|
||
- name: 获取最终Release信息
|
||
run: |
|
||
echo "Version = ${{ steps.extract_version.outputs.version }}"
|
||
echo "Repo = ${{ github.server_url }}/${{ github.repository }}"
|
||
echo "TagName = ${{ steps.extract_version.outputs.version }}"
|
||
echo "ReleaseName = ${{ steps.parse-release.outputs.title }}"
|
||
echo "Body = ${{ steps.get-commit-log.outputs.commit_log }}"
|
||
|
||
- name: 创建Gitea发布
|
||
uses: https://git.linuxacme.com/iorebuild/gitea-release-action@main
|
||
with:
|
||
gitea_token: ${{ secrets.AUTOGENERATE }}
|
||
gitea_instance_url: ${{ github.server_url }}
|
||
repository: ${{ github.repository }}
|
||
name: ${{ steps.parse-release.outputs.title }}
|
||
tag_name: ${{ steps.extract_version.outputs.version }}
|
||
body: |
|
||
${{ steps.get-commit-log.outputs.commit_log }}
|
||
draft: false
|
||
prerelease: false
|
||
files: |
|
||
${{ steps.find-bin-files-1.outputs.bin_files }}
|
||
${{ steps.find-bin-files-2.outputs.bin_files }}
|
||
${{ steps.find-bin-files-3.outputs.bin_files }}
|
||
|
||
AutoREADME.md:
|
||
# 工作在ubuntu-latest系统中
|
||
runs-on: ubuntu-latest
|
||
# 以下是steps
|
||
steps:
|
||
|
||
- name: 检出仓库
|
||
uses: https://git.linuxacme.com/iorebuild/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
# 启用子模块支持
|
||
submodules: false
|
||
|
||
- name: 设置环境变量
|
||
env:
|
||
CURRENT_USER_NAME: "iorebuild"
|
||
CURRENT_USER_EMAIL: "liyepan@linuxacme.com"
|
||
GITEA_REPO_URL: ${{ github.server_url }}/${{ github.repository }}
|
||
REPO_NAME: ${{ github.event.repository.name }}
|
||
run: |
|
||
git config user.name "$CURRENT_USER_NAME"
|
||
git config user.email "$CURRENT_USER_EMAIL"
|
||
echo "Name = $CURRENT_USER_NAME"
|
||
echo "Email = $CURRENT_USER_EMAIL"
|
||
|
||
- name: 替换软件源为国内软件源(USTC)
|
||
run: |
|
||
cat /etc/os-release
|
||
sudo rm -f /etc/apt/sources.list
|
||
sudo rm -f /etc/apt/sources.list.d/*
|
||
sudo tee /etc/apt/sources.list <<EOF
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble main restricted universe multiverse
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble-security main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble-security main restricted universe multiverse
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
|
||
deb http://mirrors.ustc.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
|
||
deb-src http://mirrors.ustc.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
|
||
EOF
|
||
|
||
- name: 如果有README文件存在则删除掉
|
||
run: |
|
||
if [ -f "README.md" ]; then
|
||
rm README.md
|
||
echo "README.md has been removed."
|
||
else
|
||
echo "README.md does not exist."
|
||
fi
|
||
|
||
- name: 添加工程名字到README.md
|
||
run: |
|
||
REPO_NAME="ActionDemo"
|
||
if [ -f "README.md" ]; then
|
||
TEMP=$(cat README.md)
|
||
echo "$REPO_NAME" > README.md
|
||
echo "$TEMP" >> README.md
|
||
else
|
||
echo "$REPO_NAME" > README.md
|
||
fi
|
||
|
||
- name: Fetch Gitea Releases
|
||
id: fetch-releases
|
||
run: |
|
||
# 使用 Gitea API 获取所有 Release 信息
|
||
releases=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_API_URL/repos/$GITEA_OWNER/$GITEA_REPO/releases")
|
||
|
||
# 将 JSON 数据解析为数组
|
||
releases_array=$(echo "$releases" | jq -c '.[]')
|
||
|
||
# 按发布时间排序
|
||
sorted_releases=$(echo "$releases_array" | jq -s 'sort_by(.published_at)')
|
||
|
||
# 生成 Markdown 内容
|
||
markdown_content="# Releases\n\n"
|
||
while read -r release; do
|
||
tag_name=$(echo "$release" | jq -r '.tag_name')
|
||
published_at=$(echo "$release" | jq -r '.published_at')
|
||
body=$(echo "$release" | jq -r '.body')
|
||
|
||
markdown_content+=$(printf "## %s (%s)\n\n%s\n\n" "$tag_name" "$published_at" "$body")
|
||
done <<< "$sorted_releases"
|
||
|
||
# 将内容写入 README.md
|
||
echo "$markdown_content" > README.md
|
||
|
||
- name: 提交和推送代码
|
||
run: |
|
||
git add README.md
|
||
git commit -m "Update README.md"
|
||
git push https://${{ secrets.AUTOGENERATE }}@git.linuxacme.com/${{ github.repository }}
|