fix: 修复自动识别与文字提取体验 #19
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: Release | |
| # 触发条件:推送 v 前缀的 tag。例如 `git tag v0.2.0 && git push origin v0.2.0`。 | |
| # 也可以在 GitHub Actions 页手动跑(workflow_dispatch),指定 tag 名。 | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: 'Tag name to release (e.g. v0.2.0)' | |
| required: true | |
| permissions: | |
| contents: write # 创建 GitHub Release / 上传 assets 需要 | |
| jobs: | |
| build-and-release: | |
| name: Build release APK and publish to GitHub Releases | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.inputs.tag || github.ref }} | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Set up Gradle | |
| uses: gradle/actions/setup-gradle@v4 | |
| # 仓库未提交 gradle-wrapper.jar,CI 上每次跑时先用 setup-gradle 装的 gradle 生成 wrapper | |
| - name: Generate Gradle wrapper jar | |
| run: gradle wrapper --gradle-version 8.10.2 | |
| - name: Decode release keystore | |
| env: | |
| KEYSTORE_BASE64: ${{ secrets.RELEASE_KEYSTORE_BASE64 }} | |
| run: | | |
| if [ -z "$KEYSTORE_BASE64" ]; then | |
| echo "::error::Secret RELEASE_KEYSTORE_BASE64 is not set. See README → 发版 一节。" | |
| exit 1 | |
| fi | |
| mkdir -p "$RUNNER_TEMP/keystore" | |
| echo "$KEYSTORE_BASE64" | base64 -d > "$RUNNER_TEMP/keystore/release.jks" | |
| echo "RELEASE_KEYSTORE_PATH=$RUNNER_TEMP/keystore/release.jks" >> "$GITHUB_ENV" | |
| - name: Build release APK | |
| env: | |
| RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }} | |
| RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }} | |
| RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }} | |
| run: ./gradlew --no-daemon clean assembleRelease | |
| - name: Locate APK | |
| id: apk | |
| run: | | |
| APK_PATH=$(find app/build/outputs/apk/release -name '*.apk' ! -name '*unsigned*' | head -n1) | |
| if [ -z "$APK_PATH" ]; then | |
| echo "::error::No signed release APK found" | |
| ls -la app/build/outputs/apk/release || true | |
| exit 1 | |
| fi | |
| VERSION=${GITHUB_REF_NAME#v} | |
| [ "$GITHUB_REF_NAME" = "$VERSION" ] && VERSION="${{ github.event.inputs.tag }}" | |
| NEW_NAME="ScreenTranslator-${VERSION}.apk" | |
| cp "$APK_PATH" "$NEW_NAME" | |
| sha256sum "$NEW_NAME" > "$NEW_NAME.sha256" | |
| echo "apk_path=$NEW_NAME" >> "$GITHUB_OUTPUT" | |
| echo "apk_sha=$NEW_NAME.sha256" >> "$GITHUB_OUTPUT" | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ github.event.inputs.tag || github.ref_name }} | |
| name: ${{ github.event.inputs.tag || github.ref_name }} | |
| generate_release_notes: true | |
| files: | | |
| ${{ steps.apk.outputs.apk_path }} | |
| ${{ steps.apk.outputs.apk_sha }} | |
| fail_on_unmatched_files: true |