DoroHelper/.github/workflows/Compile AHK 2.0 and Release...

124 lines
5.6 KiB
YAML
Raw 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: Compile AHK 2.0 and Release
on:
push:
tags:
- "v**" # 当有以 'v' 开头的标签推送到仓库时触发
workflow_dispatch: # 允许手动触发
jobs:
build-and-release:
runs-on: windows-latest # 运行环境是 Windows 最新版本
steps:
- name: Checkout code
uses: actions/checkout@v4 # 签出仓库代码
with:
fetch-depth: 0 # 获取所有历史,包括标签,以便进行版本比较
- name: Compile AutoHotkey Script with Action
id: compile_script # 为此步骤设置 ID以便后续引用其输出或工作目录
uses: benmusson/ahk2exe-action@v1 # 使用 benmusson 提供的 AHK 编译 Action
with:
in: .\DoroHelper.ahk # 你的 AHK 脚本路径
out: .\DoroHelper.exe # 输出的 EXE 文件名
icon: .\doro.ico # 你的图标文件路径
target: x64 # 目标架构为 x64
ahk-tag: v2.0.19 # 指定 AutoHotkey 2.0.19 版本
github-token: ${{ secrets.GITHUB_TOKEN }} # 用于避免 GitHub API 限速
- name: Extract Version from AHK script
id: get_version # 为此步骤设置 ID以便后续引用其输出
shell: pwsh # 使用 PowerShell Core
run: |
$scriptPath = "DoroHelper.ahk" # 你的主脚本文件路径
if (-not (Test-Path $scriptPath)) {
Write-Warning "Script file '${scriptPath}' not found for version extraction. Current directory: $(Get-Location)"
echo "VERSION_TAG=0.0.0" >> $env:GITHUB_OUTPUT # 如果找不到脚本,使用默认版本号
exit 0
}
$content = Get-Content -Path $scriptPath -Raw # 读取脚本内容
# 使用正则表达式匹配 currentVersion := "..."
$match = $content | Select-String -Pattern 'currentVersion\s*:=\s*"([^"]+)"'
if ($match) {
$version = $match.Matches[0].Groups[1].Value # 提取版本号
Write-Host "Version found: ${version}"
echo "VERSION_TAG=$version" >> $env:GITHUB_OUTPUT # 设置输出变量 VERSION_TAG
} else {
Write-Warning "Version pattern (currentVersion := \"...\") not found in ${scriptPath}. Using default '0.0.0'."
echo "VERSION_TAG=0.0.0" >> $env:GITHUB_OUTPUT # 如果没有匹配到,使用默认版本号
}
- name: Determine if Pre-release
id: prerelease_check # 为此步骤设置 ID以便后续引用其输出
shell: bash # 使用 Bash shell
run: |
VERSION_TAG="${{ steps.get_version.outputs.VERSION_TAG }}" # 获取上一步输出的版本号
IS_PRERELEASE="false"
if [[ "$VERSION_TAG" == *beta* || "$VERSION_TAG" == *alpha* || "$VERSION_TAG" == *rc* ]]; then # 判断是否包含预发布标识符
IS_PRERELEASE="true"
fi
echo "IS_PRERELEASE=$IS_PRERELEASE" >> $GITHUB_OUTPUT # 设置输出变量 IS_PRERELEASE
echo "Release version: ${VERSION_TAG}, Is Prerelease: ${IS_PRERELEASE}"
- name: Generate Changelog
id: changelog
shell: bash
run: |
CURRENT_TAG="${{ steps.get_version.outputs.VERSION_TAG }}"
echo "Current Tag: ${CURRENT_TAG}"
ALL_SORTED_TAGS=$(git tag --sort=-v:refname)
LAST_TAG=""
FOUND_CURRENT_TAG=false
# 逐行遍历排序后的标签列表,找到当前标签的下一行(即版本号更低的最近一个标签)
while IFS= read -r tag; do
if [ "$FOUND_CURRENT_TAG" = true ]; then
LAST_TAG="$tag" # 找到当前标签的下一行(即上一个版本)
break
fi
if [ "$tag" = "$CURRENT_TAG" ]; then
FOUND_CURRENT_TAG=true
fi
done <<< "$ALL_SORTED_TAGS"
echo "Last Tag: ${LAST_TAG}"
CHANGELOG_BODY=""
if [ -z "${LAST_TAG}" ]; then
# 如果没有上一个标签,则获取从第一次提交到当前标签的所有提交
echo "No previous tag found. Generating changelog from initial commit to ${CURRENT_TAG}."
CHANGELOG_BODY=$(git log --pretty=format:"* %s (%h)" "${CURRENT_TAG}")
else
# 获取上一个标签到当前标签之间的所有提交
echo "Generating changelog from ${LAST_TAG}..${CURRENT_TAG}"
CHANGELOG_BODY=$(git log --pretty=format:"* %s (%h)" "${LAST_TAG}..${CURRENT_TAG}")
fi
# 使用EOF语法输出多行字符串确保换行符能被正确解析
# 确保EOF标记在单独的一行且不带任何空格或制表符
echo "CHANGELOG_BODY<<EOF" >> "$GITHUB_OUTPUT"
echo "$CHANGELOG_BODY" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
- name: Create GitHub Release
uses: softprops/action-gh-release@v2 # 使用 GitHub Release Action
with:
tag_name: ${{ steps.get_version.outputs.VERSION_TAG }} # 使用从脚本提取的版本号作为标签名
name: ${{ steps.get_version.outputs.VERSION_TAG }} # Release 的标题
body: |
${{ steps.changelog.outputs.CHANGELOG_BODY }}
---
测试版兼容性较差,请谨慎下载
# Automated release for DoroHelper ${{ steps.get_version.outputs.VERSION_TAG }}
# Compiled from commit ${{ github.sha }}
draft: false # 不是草稿 Release
prerelease: ${{ steps.prerelease_check.outputs.IS_PRERELEASE }} # 根据上一步的判断设置是否为预发布
files: DoroHelper.exe
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # GitHub 令牌