FoxiGram/.github/workflows/build.yml
instant992 8e79f2ee9c FoxiGram: Telegram client with built-in Xray VLESS proxy
Based on Nekogram. Key additions:
- Rebrand to FoxiGram (app name, APK name, applicationId com.foxigram.app)
- Embedded Xray (VLESS+Reality) proxy client via JNI libxray.so
- Bundled hidden one-tap proxies (LTE + WiFi), read-only in UI
- Auto-restore proxy on restart, rebind to active network (LTE/WiFi)
- Server credentials externalized to git-ignored XrayServers.java (+ template)
- libxray Go source included; compiled .so, keystore, google-services.json ignored
2026-06-08 16:41:07 +04:00

127 lines
4.2 KiB
YAML

name: Build
on:
push:
branches: [ "main", "dev", "ci" ]
paths-ignore:
- '**.md'
- '.github/**'
- '!.github/workflows/build.yml'
workflow_call:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
id-token: write
attestations: write
artifact-metadata: write
env:
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
CCACHE_HARDLINK: "true"
CCACHE_NOHASHDIR: "true"
CCACHE_MAXSIZE: "10G"
steps:
- uses: actions/checkout@v6
- name: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'temurin'
- name: Set up ccache
uses: hendrikmuhs/ccache-action@v1.2
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
with:
cache-read-only: false
- name: Set up Android SDK
uses: android-actions/setup-android@v4
with:
packages: "build-tools;36.1.0 ndk;27.3.13750724 platforms;android-36"
- name: Configure Gradle
run: |
mkdir -p ~/.gradle
echo 'org.gradle.caching=true' >> ~/.gradle/gradle.properties
echo 'org.gradle.parallel=true' >> ~/.gradle/gradle.properties
echo 'org.gradle.jvmargs=-Xmx8192m -Dfile.encoding=UTF-8 -XX:+UseParallelGC' >> ~/.gradle/gradle.properties
echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties
- name: Configure Signing
run: |
echo "storeFile=${{ github.workspace }}/keystore.jks" >> local.properties
echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> local.properties
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> local.properties
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> local.properties
echo "${{ secrets.KEYSTORE_JKS }}" | base64 --decode > keystore.jks
- name: Configure Secrets
run: |
echo "apiId=${{ secrets.API_ID }}" >> local.properties
echo "apiHash=${{ secrets.API_HASH }}" >> local.properties
echo "helperBotId=${{ secrets.HELPER_BOT_ID }}" >> local.properties
echo "helperBotUsername=${{ secrets.HELPER_BOT_USERNAME }}" >> local.properties
echo "sentryDsn=${{ secrets.SENTRY_DSN }}" >> local.properties
echo "mapsApiKey=${{ secrets.MAPS_API_KEY }}" >> local.properties
echo "${{ secrets.GOOGLE_SERVICES_JSON }}" | base64 --decode > TMessagesProj_App/google-services.json
echo "${{ secrets.SENTRY_PROPERTIES }}" | base64 --decode > sentry.properties
- name: Build with Gradle
run: |
./gradlew assembleRelease
./gradlew bundlePlay
./gradlew sentryUploadSourceBundlePlay
- name: Attest
uses: actions/attest@v4
with:
subject-path: '${{ github.workspace }}/TMessagesProj_App/build/outputs'
- name: Upload build artifact
uses: actions/upload-artifact@v7
with:
name: outputs
path: TMessagesProj_App/build/outputs
- name: Upload arm64-v8a build apk
uses: actions/upload-artifact@v7
with:
path: TMessagesProj_App/build/outputs/apk/release/*-arm64-v8a.apk
archive: false
- name: Upload armeabi-v7a build apk
uses: actions/upload-artifact@v7
with:
path: TMessagesProj_App/build/outputs/apk/release/*-armeabi-v7a.apk
archive: false
- name: Upload universal build apk
uses: actions/upload-artifact@v7
with:
path: TMessagesProj_App/build/outputs/apk/release/*-universal.apk
archive: false
- name: Upload x86 build apk
uses: actions/upload-artifact@v7
with:
path: TMessagesProj_App/build/outputs/apk/release/*-x86.apk
archive: false
- name: Upload x86_64 build apk
uses: actions/upload-artifact@v7
with:
path: TMessagesProj_App/build/outputs/apk/release/*-x86_64.apk
archive: false
- name: Upload build bundle
uses: actions/upload-artifact@v7
with:
path: TMessagesProj_App/build/outputs/bundle/play/*-play.aab
archive: false