增强 GitHub Actions: 自动使用版本对应的 RELEASE_NOTES 文件作为发布说明 #10
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Release APK | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| version_tag: | |
| description: '版本标签 (例如: v5.2)' | |
| required: true | |
| type: string | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| cache: 'gradle' | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| - name: Decode Keystore | |
| env: | |
| KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }} | |
| run: | | |
| echo $KEYSTORE_BASE64 | base64 -d > $GITHUB_WORKSPACE/app/keystore.jks | |
| - name: Build Release APK | |
| env: | |
| KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | |
| KEY_ALIAS: ${{ secrets.KEY_ALIAS }} | |
| KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
| run: | | |
| ./gradlew assembleRelease \ | |
| -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/app/keystore.jks \ | |
| -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \ | |
| -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ | |
| -Pandroid.injected.signing.key.password=$KEY_PASSWORD | |
| - name: Get version info | |
| id: version | |
| run: | | |
| VERSION_NAME=$(grep "versionName" app/build.gradle.kts | awk -F'"' '{print $2}') | |
| VERSION_CODE=$(grep "versionCode" app/build.gradle.kts | awk -F'=' '{print $2}' | tr -d ' ') | |
| echo "version_name=$VERSION_NAME" >> $GITHUB_OUTPUT | |
| echo "version_code=$VERSION_CODE" >> $GITHUB_OUTPUT | |
| # 获取 tag(push tag 或手动输入) | |
| if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | |
| echo "tag_name=${{ inputs.version_tag }}" >> $GITHUB_OUTPUT | |
| else | |
| echo "tag_name=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Rename APK | |
| run: | | |
| mv app/build/outputs/apk/release/app-release.apk \ | |
| app/build/outputs/apk/release/CloudFlareAssistant-v${{ steps.version.outputs.version_name }}.apk | |
| - name: Prepare Release Notes | |
| id: release_notes | |
| run: | | |
| TAG_NAME="${{ steps.version.outputs.tag_name }}" | |
| # 检查是否存在对应的 release notes 文件 | |
| RELEASE_NOTES_FILE="RELEASE_NOTES_${TAG_NAME}.md" | |
| if [ -f "$RELEASE_NOTES_FILE" ]; then | |
| echo "使用 $RELEASE_NOTES_FILE 作为发布说明" | |
| # 读取文件内容,添加版本信息头部 | |
| { | |
| echo "## 🎉 CloudFlare Assistant ${TAG_NAME} 发布" | |
| echo "" | |
| echo "**版本号**: ${{ steps.version.outputs.version_name }}" | |
| echo "**Build**: ${{ steps.version.outputs.version_code }}" | |
| echo "" | |
| cat "$RELEASE_NOTES_FILE" | |
| echo "" | |
| echo "---" | |
| echo "" | |
| echo "### 📥 下载" | |
| echo "点击下方的 APK 文件即可下载安装(已签名)" | |
| echo "" | |
| echo "### 📦 安装要求" | |
| echo "- 最低 Android 版本: 7.0 (API 25)" | |
| echo "- 目标 Android 版本: 14 (API 34)" | |
| echo "" | |
| echo "### 🔐 签名信息" | |
| echo "此版本已使用开发者证书签名,可以直接安装使用。" | |
| } > release_notes.md | |
| else | |
| echo "未找到 $RELEASE_NOTES_FILE,使用默认模板" | |
| { | |
| echo "## 🎉 新版本发布" | |
| echo "" | |
| echo "**版本号**: ${{ steps.version.outputs.version_name }}" | |
| echo "**Build**: ${{ steps.version.outputs.version_code }}" | |
| echo "" | |
| echo "### 📥 下载" | |
| echo "点击下方的 APK 文件即可下载安装(已签名)" | |
| echo "" | |
| echo "### 📦 安装要求" | |
| echo "- 最低 Android 版本: 7.0 (API 25)" | |
| echo "- 目标 Android 版本: 14 (API 34)" | |
| echo "" | |
| echo "### 🔐 签名信息" | |
| echo "此版本已使用开发者证书签名,可以直接安装使用。" | |
| } > release_notes.md | |
| fi | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: ${{ steps.version.outputs.tag_name }} | |
| files: app/build/outputs/apk/release/CloudFlareAssistant-v${{ steps.version.outputs.version_name }}.apk | |
| body_path: release_notes.md | |
| draft: false | |
| prerelease: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |