GiteaActionFileDemo/AutoRelease.yaml

294 lines
12 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: 自动版本发布
on:
push:
branches:
- main
env:
PROJECT_NAME: "私有仓库Action测试"
DEVELOP_TOOLS: "Keil-V5.35.0.0"
COMPILER: "V5.06 update 7(build960)"
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: 设置环境变量
id: ActionEnv
run: |
#设置上海时间
sudo ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 正确的变量赋值
UserName="${{ github.actor }}"
UserEmail=$(git log -1 --pretty=format:'%ae')
GitRepo="${{ github.repository }}"
ServerUrl="${{ github.server_url }}"
RepoUrl="${{ github.repository }}"
# 将变量设置为步骤输出
echo "ENV_USER_NAME=$UserName" >> $GITHUB_OUTPUT
echo "ENV_USER_EMAIL=$UserEmail" >> $GITHUB_OUTPUT
echo "ENV_REPO_NAME=$GitRepo" >> $GITHUB_OUTPUT
echo "ENV_SERVER_URL=$ServerUrl" >> $GITHUB_OUTPUT
echo "ENV_REPO_URL=$ServerUrl/$RepoUrl" >> $GITHUB_OUTPUT
- name: 检查环境变量
run: |
echo "用户名 = ${{ steps.ActionEnv.outputs.ENV_USER_NAME }}"
echo "邮箱= ${{ steps.ActionEnv.outputs.ENV_USER_EMAIL }}"
echo "仓库名 = ${{ steps.ActionEnv.outputs.ENV_REPO_NAME }}"
echo "服务器URL = ${{ steps.ActionEnv.outputs.ENV_SERVER_URL }}"
echo "仓库URL = ${{ steps.ActionEnv.outputs.ENV_REPO_URL }}"
- name: 配置Git用户
run: |
git config user.name "${{ steps.ActionEnv.outputs.ENV_USER_NAME }}"
git config user.email "${{ steps.ActionEnv.outputs.ENV_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.1')"
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: |
# 获取指定标签到当前提交之间的提交记录,并按特定格式输出,同时过滤掉包含 'Update README.md' 的记录
COMMIT_LOG=$(git log ${{ steps.get-previous-tag.outputs.previous_tag }}..HEAD --pretty=format:"- %s (%h)" | grep -v 'Update README.md' | tr '\n' '\r')
# 将 COMMIT_LOG 变量的值输出到 GitHub Actions 的输出中
echo "commit_log=$COMMIT_LOG" >> $GITHUB_OUTPUT
# 打印 COMMIT_LOG 变量的值,方便调试查看
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 "Repo_Name = ${{ steps.ActionEnv.outputs.ENV_REPO_NAME }}"
echo "Repo_Url = ${{ steps.ActionEnv.outputs.ENV_REPO_URL }}"
echo "Tag_Name = ${{ steps.extract_version.outputs.version }}"
echo "Release_Name = ${{ steps.parse-release.outputs.title }}"
echo "Release_version = ${{ steps.extract_version.outputs.version }}"
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: ${{ steps.ActionEnv.outputs.ENV_SERVER_URL }}
repository: ${{ steps.ActionEnv.outputs.ENV_REPO_NAME }}
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: 设置环境变量
id: ActionEnv
run: |
#设置上海时间
sudo ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 正确的变量赋值
UserName="${{ github.actor }}"
UserEmail=$(git log -1 --pretty=format:'%ae')
GitRepo="${{ github.repository }}"
ServerUrl="${{ github.server_url }}"
RepoUrl="${{ github.repository }}"
# 将变量设置为步骤输出
echo "ENV_USER_NAME=$UserName" >> $GITHUB_OUTPUT
echo "ENV_USER_EMAIL=$UserEmail" >> $GITHUB_OUTPUT
echo "ENV_REPO_NAME=$GitRepo" >> $GITHUB_OUTPUT
echo "ENV_SERVER_URL=$ServerUrl" >> $GITHUB_OUTPUT
echo "ENV_REPO_URL=$ServerUrl/$RepoUrl" >> $GITHUB_OUTPUT
- name: 检查环境变量
run: |
echo "用户名 = ${{ steps.ActionEnv.outputs.ENV_USER_NAME }}"
echo "邮箱= ${{ steps.ActionEnv.outputs.ENV_USER_EMAIL }}"
echo "仓库名 = ${{ steps.ActionEnv.outputs.ENV_REPO_NAME }}"
echo "服务器URL = ${{ steps.ActionEnv.outputs.ENV_SERVER_URL }}"
echo "仓库URL = ${{ steps.ActionEnv.outputs.ENV_REPO_URL }}"
- name: 配置Git用户
run: |
git config user.name "${{ steps.ActionEnv.outputs.ENV_USER_NAME }}"
git config user.email "${{ steps.ActionEnv.outputs.ENV_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: 获取所有Release信息
id: fetch-releases
run: |
# 使用 Gitea API 获取所有 Release 信息
RepoInfo=${{ steps.ActionEnv.outputs.ENV_SERVER_URL }}/api/v1/repos/${{ steps.ActionEnv.outputs.ENV_REPO_NAME }}/releases
echo "$RepoInfo"
# 发送请求获取所有 release 信息,添加认证信息
Releases=$(curl -s -H "Authorization: token ${{ secrets.AUTOGENERATE }}" "$RepoInfo")
echo "$Releases"
# 检查是否成功获取信息
if [ -z "$Releases" ]; then
echo "Failed to fetch Releases."
exit 1
fi
# 生成 Markdown 内容
markdown_content="# $PROJECT_NAME\n\n"
markdown_content+="### Develop Tools\n\n"
markdown_content+=" $DEVELOP_TOOLS\n\n"
markdown_content+="### Compiler Version\n\n"
markdown_content+=" $COMPILER\n\n"
# 使用 jq 直接解析 JSON 并处理
while IFS= read -r row; do
tag_name=$(echo "$row" | jq -r '.tag_name')
name=$(echo "$row" | jq -r '.name')
body=$(echo "$row" | jq -r '.body')
published_at=$(echo "$row" | jq -r '.published_at')
# 将 ISO 8601 格式的时间转换为指定格式
formatted_time=$(date -d "$published_at" +"Release at: %Y-%m-%d %H:%M:%S")
markdown_content+="## ${name} (${tag_name})\n"
markdown_content+="${formatted_time}\n\n"
markdown_content+="${body}\n\n"
done < <(echo "$Releases" | jq -c '.[]')
# 将 Markdown 内容添加到 README.md 文件中
echo -e "$markdown_content" >> README.md
- name: 提交和推送代码
run: |
git add README.md
git commit -m "Update README.md"
git push https://${{ secrets.AUTOGENERATE }}@git.linuxacme.com/${{ steps.ActionEnv.outputs.ENV_REPO_NAME }}