refactor(traffic): replace clear-traffic pref with dialog button #539
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 APK | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release_tag: | |
| description: 'Release Tag (Optional)' | |
| required: false | |
| type: string | |
| build_type: | |
| description: 'Build Type' | |
| required: true | |
| default: 'test' | |
| type: choice | |
| options: | |
| - test | |
| - release | |
| upload_telegram: | |
| description: 'Upload APK to Telegram?' | |
| required: true | |
| default: false | |
| type: boolean | |
| commit_count: | |
| description: 'Number of latest commits to send to Telegram when manual SHAs are empty' | |
| required: false | |
| default: 1 | |
| type: number | |
| commit_shas: | |
| description: 'Manual commit SHA(s), one per line or comma-separated; takes priority over commit_count' | |
| required: false | |
| default: '' | |
| type: string | |
| push: | |
| branches: | |
| - master | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| env: | |
| BUILD_TYPE: ${{ github.event.inputs.build_type == 'release' && 'release' || 'releaseTesting' }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: 'recursive' | |
| fetch-depth: '0' | |
| - name: Prepare commit metadata | |
| id: commit_metadata | |
| shell: bash | |
| env: | |
| EVENT_BEFORE: ${{ github.event.before }} | |
| CURRENT_SHA: ${{ github.sha }} | |
| run: | | |
| if [[ "${GITHUB_EVENT_NAME}" == "push" ]]; then | |
| if [[ -n "${EVENT_BEFORE}" \ | |
| && "${EVENT_BEFORE}" != "0000000000000000000000000000000000000000" \ | |
| && "${EVENT_BEFORE}" != "${CURRENT_SHA}" ]] \ | |
| && git cat-file -e "${EVENT_BEFORE}^{commit}" 2>/dev/null; then | |
| echo "range=${EVENT_BEFORE}..${CURRENT_SHA}" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "range=${CURRENT_SHA}" >> "$GITHUB_OUTPUT" | |
| fi | |
| else | |
| # For manual runs, commit_count controls how many latest commits are selected. | |
| # Leave the range empty so the upload script selects from HEAD. | |
| echo "range=" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v4 | |
| with: | |
| log-accepted-android-sdk-licenses: false | |
| cmdline-tools-version: '14742923' | |
| packages: 'platforms;android-37.0 build-tools;37.0.0 platform-tools' | |
| - name: Install NDK | |
| run: | | |
| echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \ | |
| --channel=0 \ | |
| --install "ndk;29.0.14206865" | |
| echo "NDK_HOME=$ANDROID_HOME/ndk/29.0.14206865" >> $GITHUB_ENV | |
| - name: Restore cached libhevtun | |
| id: cache-libhevtun-restore | |
| uses: actions/cache/restore@v6 | |
| with: | |
| path: ${{ github.workspace }}/libs | |
| key: libhevtun-${{ runner.os }}-${{ env.NDK_HOME }}-${{ hashFiles('.git/modules/hev-socks5-tunnel/HEAD') }}-${{ hashFiles('compile-hevtun.sh') }} | |
| - name: Build libhevtun | |
| if: steps.cache-libhevtun-restore.outputs.cache-hit != 'true' | |
| run: | | |
| bash compile-hevtun.sh | |
| - name: Save libhevtun | |
| if: steps.cache-libhevtun-restore.outputs.cache-hit != 'true' | |
| uses: actions/cache/save@v6 | |
| with: | |
| path: ${{ github.workspace }}/libs | |
| key: libhevtun-${{ runner.os }}-${{ env.NDK_HOME }}-${{ hashFiles('.git/modules/hev-socks5-tunnel/HEAD') }}-${{ hashFiles('compile-hevtun.sh') }} | |
| - name: Copy libhevtun | |
| run: | | |
| cp -r ${{ github.workspace }}/libs ${{ github.workspace }}/MikuRay/app | |
| - name: Fetch AndroidLibXrayLite tag | |
| run: | | |
| pushd AndroidLibXrayLite | |
| CURRENT_TAG=$(git describe --tags --abbrev=0) | |
| echo "Current tag in this repo: $CURRENT_TAG" | |
| echo "CURRENT_TAG=$CURRENT_TAG" >> $GITHUB_ENV | |
| popd | |
| - name: Download libv2ray | |
| uses: robinraju/release-downloader@v1.13 | |
| with: | |
| repository: '2dust/AndroidLibXrayLite' | |
| tag: ${{ env.CURRENT_TAG }} | |
| fileName: 'libv2ray.aar' | |
| out-file-path: MikuRay/app/libs/ | |
| - name: Setup Java | |
| uses: actions/setup-java@v5.7.0 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '21' | |
| - name: Decode Keystore | |
| uses: timheuer/base64-to-file@v2.0.0 | |
| id: android_keystore | |
| with: | |
| fileName: "android_keystore.jks" | |
| encodedString: ${{ secrets.APP_KEYSTORE_BASE64 }} | |
| - name: Build APK (${{ env.BUILD_TYPE }}) | |
| run: | | |
| cd ${{ github.workspace }}/MikuRay | |
| echo "sdk.dir=${ANDROID_HOME}" > local.properties | |
| chmod 755 gradlew | |
| if [ "${{ env.BUILD_TYPE }}" == "releaseTesting" ]; then | |
| echo "Starting TEST build process with R8..." | |
| ./gradlew assembleReleaseTesting --console=plain \ | |
| -PKS_PATH="${{ steps.android_keystore.outputs.filePath }}" \ | |
| -PKS_PASS="${{ secrets.APP_KEYSTORE_PASSWORD }}" \ | |
| -PKS_ALIAS="${{ secrets.APP_KEYSTORE_ALIAS }}" \ | |
| -PKEY_PASS="${{ secrets.APP_KEY_PASSWORD }}" | |
| else | |
| echo "Starting RELEASE build process with R8..." | |
| ./gradlew assembleRelease --console=plain \ | |
| -PKS_PATH="${{ steps.android_keystore.outputs.filePath }}" \ | |
| -PKS_PASS="${{ secrets.APP_KEYSTORE_PASSWORD }}" \ | |
| -PKS_ALIAS="${{ secrets.APP_KEYSTORE_ALIAS }}" \ | |
| -PKEY_PASS="${{ secrets.APP_KEY_PASSWORD }}" | |
| fi | |
| - name: Upload arm64-v8a APK | |
| uses: actions/upload-artifact@v7 | |
| if: ${{ success() }} | |
| with: | |
| name: arm64-v8a-${{ env.BUILD_TYPE }} | |
| path: ${{ github.workspace }}/MikuRay/app/build/outputs/apk/${{ env.BUILD_TYPE }}/*arm64-v8a*.apk | |
| - name: Upload armeabi-v7a APK | |
| uses: actions/upload-artifact@v7 | |
| if: ${{ success() }} | |
| with: | |
| name: armeabi-v7a-${{ env.BUILD_TYPE }} | |
| path: ${{ github.workspace }}/MikuRay/app/build/outputs/apk/${{ env.BUILD_TYPE }}/*armeabi-v7a*.apk | |
| - name: Upload x86 APK | |
| uses: actions/upload-artifact@v7 | |
| if: ${{ success() }} | |
| with: | |
| name: x86-apk-${{ env.BUILD_TYPE }} | |
| path: ${{ github.workspace }}/MikuRay/app/build/outputs/apk/${{ env.BUILD_TYPE }}/*x86*.apk | |
| - name: Check Telegram configuration | |
| id: telegram-config | |
| if: ${{ success() && env.BUILD_TYPE == 'releaseTesting' && github.event_name == 'workflow_dispatch' && inputs.upload_telegram == true }} | |
| shell: bash | |
| env: | |
| TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
| TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} | |
| run: | | |
| if [[ -n "${TELEGRAM_BOT_TOKEN}" && -n "${TELEGRAM_CHAT_ID}" ]]; then | |
| echo "configured=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "configured=false" >> "$GITHUB_OUTPUT" | |
| echo "Telegram upload skipped: Telegram secrets are not configured." | |
| fi | |
| - name: Upload APKs to Telegram | |
| if: ${{ env.BUILD_TYPE == 'releaseTesting' && github.event_name == 'workflow_dispatch' && inputs.upload_telegram == true && steps.telegram-config.outputs.configured == 'true' }} | |
| shell: bash | |
| env: | |
| TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
| TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} | |
| APK_DIR: ${{ github.workspace }}/MikuRay/app/build/outputs/apk/${{ env.BUILD_TYPE }} | |
| BUILD_TYPE: ${{ env.BUILD_TYPE }} | |
| TELEGRAM_COMMIT_COUNT: ${{ inputs.commit_count }} | |
| TELEGRAM_COMMIT_SHAS: ${{ inputs.commit_shas }} | |
| TELEGRAM_COMMIT_RANGE: ${{ steps.commit_metadata.outputs.range }} | |
| TELEGRAM_REPOSITORY_URL: ${{ github.server_url }}/${{ github.repository }} | |
| run: bash ./scripts/upload-apks-to-telegram.sh | |
| - name: Upload to release | |
| uses: svenstaro/upload-release-action@v2 | |
| if: github.event.inputs.release_tag != '' | |
| with: | |
| repo_token: ${{ secrets.MY_PERSONAL_TOKEN }} | |
| file: ${{ github.workspace }}/MikuRay/app/build/outputs/apk/${{ env.BUILD_TYPE }}/*.apk | |
| tag: ${{ github.event.inputs.release_tag }} | |
| file_glob: true | |
| prerelease: true |