更新:添加 v5.9 发布说明,包含 UI 升级、体验优化及问题修复 #20
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.9)' | |
| 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 | |
| id: 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 }} | |
| - name: Send APK to Telegram | |
| if: success() | |
| env: | |
| TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
| TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} | |
| TELEGRAM_TOPIC_ID: ${{ secrets.TELEGRAM_TOPIC_ID }} | |
| run: | | |
| TAG_NAME="${{ steps.version.outputs.tag_name }}" | |
| VERSION_NAME="${{ steps.version.outputs.version_name }}" | |
| VERSION_CODE="${{ steps.version.outputs.version_code }}" | |
| RELEASE_URL="https://github.com/${{ github.repository }}/releases/tag/${TAG_NAME}" | |
| APK_FILE="app/build/outputs/apk/release/CloudFlareAssistant-v${VERSION_NAME}.apk" | |
| # 读取发布说明(简化版本) | |
| RELEASE_NOTES_FILE="RELEASE_NOTES_${TAG_NAME}.md" | |
| if [ -f "$RELEASE_NOTES_FILE" ]; then | |
| # 提取主要功能点(前20行) | |
| NOTES=$(head -n 20 "$RELEASE_NOTES_FILE" | sed 's/^#//' | sed 's/"/\\"/g') | |
| else | |
| NOTES="新版本发布" | |
| fi | |
| # 构建 Telegram 消息 | |
| CAPTION="🎉 <b>CloudFlare Assistant ${TAG_NAME} 发布</b> | |
| 📱 <b>版本信息</b> | |
| • 版本号: ${VERSION_NAME} | |
| • Build: ${VERSION_CODE} | |
| • 发布日期: $(date +'%Y年%m月%d日') | |
| ${NOTES} | |
| 🔗 <b>相关链接</b> | |
| <a href=\"${RELEASE_URL}\">📄 查看完整发布说明</a> | |
| 📦 <b>安装要求</b> | |
| • 最低版本: Android 7.0 (API 25) | |
| • 目标版本: Android 14 (API 34)" | |
| # 发送 APK 文件到 Telegram(支持话题) | |
| echo "📤 正在发送 APK 文件到 Telegram..." | |
| if [ -n "$TELEGRAM_TOPIC_ID" ]; then | |
| # 发送到指定话题 | |
| curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument" \ | |
| -F "chat_id=${TELEGRAM_CHAT_ID}" \ | |
| -F "message_thread_id=${TELEGRAM_TOPIC_ID}" \ | |
| -F "document=@${APK_FILE}" \ | |
| -F "caption=${CAPTION}" \ | |
| -F "parse_mode=HTML" | |
| else | |
| # 发送到群组主聊天 | |
| curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument" \ | |
| -F "chat_id=${TELEGRAM_CHAT_ID}" \ | |
| -F "document=@${APK_FILE}" \ | |
| -F "caption=${CAPTION}" \ | |
| -F "parse_mode=HTML" | |
| fi | |
| echo "✅ APK 文件和发布说明已发送到 Telegram" |