Skip to content

chore(main): release 1.15.0 #262

chore(main): release 1.15.0

chore(main): release 1.15.0 #262

name: Build Release Artifacts
on:
release:
types: [published]
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:
permissions:
contents: write
jobs:
android:
name: Android APK/AAB
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Detect Android project directory
id: detect-app
run: |
if [ -f "EveryTalk/app1/gradlew" ]; then
APP_DIR="EveryTalk/app1"
elif [ -f "app1/gradlew" ]; then
APP_DIR="app1"
elif [ -f "app/gradlew" ]; then
APP_DIR="app"
else
echo "::error::Unable to locate gradlew under EveryTalk/app1, app1, or app"
exit 1
fi
echo "Resolved app directory: $APP_DIR"
echo "APP_DIR=$APP_DIR" >> $GITHUB_ENV
# 从 Secrets 还原 keystore(你已经有签名)
# 在仓库 Settings → Secrets and variables → Actions 中配置:
# ANDROID_KEYSTORE_BASE64 / ANDROID_KEYSTORE_PASSWORD / ANDROID_KEY_ALIAS / ANDROID_KEY_PASSWORD
- name: Restore keystore from base64
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ANDROID_KEYSTORE_PATH: ${{ secrets.ANDROID_KEYSTORE_PATH }}
if: ${{ env.ANDROID_KEYSTORE_BASE64 != '' }}
run: |
echo "Secrets ANDROID_KEYSTORE_PATH='${ANDROID_KEYSTORE_PATH}'"
# Default to ${APP_DIR}/everytalk-release.jks if not specified
KEYPATH=${ANDROID_KEYSTORE_PATH:-${APP_DIR}/everytalk-release.jks}
# Use absolute path to avoid relative path issues in Gradle
ABS_KEYPATH=$GITHUB_WORKSPACE/$KEYPATH
echo "Writing keystore to $ABS_KEYPATH"
echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > "$ABS_KEYPATH"
echo "ANDROID_KEYSTORE_PATH=$ABS_KEYPATH" >> $GITHUB_ENV
- name: Grant Gradle permissions
run: chmod +x "./${{ env.APP_DIR }}/gradlew"
- name: Extract Version from Tag
if: startsWith(github.ref, 'refs/tags/')
run: |
TAG_NAME=${GITHUB_REF#refs/tags/}
# Remove 'v' prefix if present (e.g. v1.7.5 -> 1.7.5)
VERSION_NAME=${TAG_NAME#v}
echo "Detected version from tag: $VERSION_NAME"
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
- name: Create local.properties with Secrets
env:
# ===== 直连模式 API 配置 =====
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
GOOGLE_API_BASE_URL: ${{ secrets.GOOGLE_API_BASE_URL }}
GOOGLE_CSE_ID: ${{ secrets.GOOGLE_CSE_ID }}
GOOGLE_SEARCH_API_KEY: ${{ secrets.GOOGLE_SEARCH_API_KEY }}
DEFAULT_OPENAI_API_BASE_URL: ${{ secrets.DEFAULT_OPENAI_API_BASE_URL }}
DEFAULT_TEXT_API_KEY: ${{ secrets.DEFAULT_TEXT_API_KEY }}
DEFAULT_TEXT_API_URL: ${{ secrets.DEFAULT_TEXT_API_URL }}
DEFAULT_TEXT_MODELS: ${{ secrets.DEFAULT_TEXT_MODELS }}
SILICONFLOW_API_KEY: ${{ secrets.SILICONFLOW_API_KEY }}
SILICONFLOW_IMAGE_API_URL: ${{ secrets.SILICONFLOW_IMAGE_API_URL }}
SILICONFLOW_DEFAULT_IMAGE_MODEL: ${{ secrets.SILICONFLOW_DEFAULT_IMAGE_MODEL }}
VITE_API_URLS: ${{ secrets.VITE_API_URLS }}
QWEN_EDIT_API_URLS: ${{ secrets.QWEN_EDIT_API_URLS }}
QWEN_EDIT_API_SECRET: ${{ secrets.QWEN_EDIT_API_SECRET }}
SEEDREAM_API_URL: ${{ secrets.SEEDREAM_API_URL }}
ZHIPU_API_KEY: ${{ secrets.ZHIPU_API_KEY }}
run: |
echo "Creating local.properties..."
cat > ${{ env.APP_DIR }}/local.properties <<EOF
sdk.dir=$ANDROID_HOME
GOOGLE_API_KEY=$GOOGLE_API_KEY
GOOGLE_API_BASE_URL=$GOOGLE_API_BASE_URL
GOOGLE_CSE_ID=$GOOGLE_CSE_ID
GOOGLE_SEARCH_API_KEY=$GOOGLE_SEARCH_API_KEY
DEFAULT_OPENAI_API_BASE_URL=$DEFAULT_OPENAI_API_BASE_URL
DEFAULT_TEXT_API_KEY=$DEFAULT_TEXT_API_KEY
DEFAULT_TEXT_API_URL=$DEFAULT_TEXT_API_URL
DEFAULT_TEXT_MODELS=$DEFAULT_TEXT_MODELS
SILICONFLOW_API_KEY=$SILICONFLOW_API_KEY
SILICONFLOW_IMAGE_API_URL=$SILICONFLOW_IMAGE_API_URL
SILICONFLOW_DEFAULT_IMAGE_MODEL=$SILICONFLOW_DEFAULT_IMAGE_MODEL
VITE_API_URLS=$VITE_API_URLS
QWEN_EDIT_API_URLS=$QWEN_EDIT_API_URLS
QWEN_EDIT_API_SECRET=$QWEN_EDIT_API_SECRET
SEEDREAM_API_URL=$SEEDREAM_API_URL
ZHIPU_API_KEY=$ZHIPU_API_KEY
EOF
echo "local.properties created."
- name: Build Release APK
working-directory: ${{ env.APP_DIR }}
env:
# 签名配置
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
VERSION_NAME: ${{ env.VERSION_NAME }}
run: |
./gradlew :app:assembleRelease --parallel --build-cache --stacktrace
- name: Upload Android artifacts to Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: |
${{ env.APP_DIR }}/app/build/outputs/apk/release/*.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get Commit Message
id: get_commit_msg
if: startsWith(github.ref, 'refs/tags/')
run: |
# 获取最近一次提交的信息
COMMIT_MSG=$(git log -1 --pretty=%B)
echo "COMMIT_MSG<<EOF" >> $GITHUB_ENV
echo "$COMMIT_MSG" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Install Python dependencies
if: startsWith(github.ref, 'refs/tags/')
run: |
pip install requests
- name: Send Telegram Notification (APK)
if: startsWith(github.ref, 'refs/tags/')
env:
TG_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
TG_CHAT_ID: ${{ secrets.TELEGRAM_TO }}
REPO: ${{ github.repository }}
BRANCH: ${{ github.ref_name }}
RUN_ID: ${{ github.run_id }}
SHA: ${{ github.sha }}
APK_DIR: ${{ env.APP_DIR }}/app/build/outputs/apk/release
run: |
# 脚本位于仓库根目录的 .github/scripts 下
python3 .github/scripts/send_telegram.py
- name: Upload artifacts for manual runs
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: actions/upload-artifact@v4
with:
name: android-release-apk
path: |
${{ env.APP_DIR }}/app/build/outputs/apk/release/*.apk