Skip to content

refactor(traffic): replace clear-traffic pref with dialog button #539

refactor(traffic): replace clear-traffic pref with dialog button

refactor(traffic): replace clear-traffic pref with dialog button #539

Workflow file for this run

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