Skip to content

Build SFA PuerNya

Build SFA PuerNya #11

Workflow file for this run

name: Build SFA PuerNya
on:
schedule:
- cron: '0 20,6 * * *' # 每天在 20:00 和 06:00 运行
workflow_dispatch: # 保留手动触发选项
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout sing-box repository
uses: actions/[email protected]
with:
path: sing-box
repository: PuerNya/sing-box
ref: building
fetch-depth: 0
- name: Get latest go version
id: go
run: |
echo version=$(curl -s https://raw.githubusercontent.com/actions/go-versions/update-versions-manifest-file/versions-manifest.json | grep -oE '"version": "[0-9]{1}.[0-9]{1,}(.[0-9]{1,})?"' | head -1 | cut -d':' -f2 | sed 's/ //g; s/"//g') >> $GITHUB_OUTPUT
- name: Setup go
uses: actions/[email protected]
with:
go-version: ${{steps.go.outputs.version}}
- name: Get latest commit message
id: get_commit_message
run: |
cd sing-box
echo "commit_message=$(git log -1 --pretty=%B)" >> $GITHUB_OUTPUT
- name: Get sing-box commit ID
id: get-commit-id
run: |
cd sing-box
echo "commit_id=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Setup java
uses: actions/[email protected]
with:
distribution: 'oracle'
java-version: 21
- name: Setup ndk
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r26b
- name: Get latest build tools version
id: sdk
run: echo version=$(ls $ANDROID_HOME/build-tools | tail -n 1) >> $GITHUB_OUTPUT
- name: Get sing-box version
id: sing-box
run: |
cd sing-box
git remote add sekai https://github.com/SagerNet/sing-box
git fetch --tags sekai
version=$(CGO_ENABLED=0 go run ./cmd/internal/read_tag)
echo version=$version >> $GITHUB_OUTPUT
- name: Build libbox
env:
CC: ${{steps.setup-ndk.outputs.ndk-path}}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang
TAGS: with_quic,with_dhcp,with_wireguard,with_shadowsocksr,with_ech,with_utls,with_clash_api,with_gvisor
VERSION: ${{steps.sing-box.outputs.version}}
CGO_ENABLED: '0'
run: |
cd sing-box
go mod tidy
make lib_install
gomobile bind -v -a -trimpath -androidapi 21 -javapkg=io.nekohasekai -libname=box -tags ${TAGS} -ldflags "-X github.com/sagernet/sing-box/constant.Version=${VERSION} -s -w -buildid=" ./experimental/libbox
- name: Checkout app repository
uses: actions/[email protected]
with:
path: sfa
repository: LQ2002/sing-box-for-android
submodules: recursive
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install Build Tools
run: |
sdkmanager --install "build-tools;30.0.3"
echo "$ANDROID_HOME/build-tools/30.0.3" >> $GITHUB_PATH
- name: Debug Keystore
run: |
ls -l sfa/app/
file sfa/app/release.keystore
echo "KEYSTORE_PASSWORD length: ${#KEYSTORE_PASSWORD}"
echo "KEY_ALIAS length: ${#KEY_ALIAS}"
echo "KEY_PASSWORD length: ${#KEY_PASSWORD}"
- name: Setup build env && build app
env:
VERSION: ${{steps.sing-box.outputs.version}}
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: |
mkdir -p sfa/app/libs/
cp ./sing-box/libbox.aar sfa/app/libs/
cd sfa
echo "" >> gradle.properties
echo "org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 -XX:+UseParallelGC" >> gradle.properties
echo "org.gradle.caching=true" >> gradle.properties
echo "org.gradle.parallel=true" >> gradle.properties
echo "VERSION_NAME=${VERSION}" > local.properties
echo "VERSION_CODE=$(date +%Y%m%d%H)" >> local.properties
chmod +x ./gradlew
./gradlew assembleRelease \
-Pandroid.injected.signing.store.file=$PWD/app/release.keystore \
-Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \
-Pandroid.injected.signing.key.alias=$KEY_ALIAS \
-Pandroid.injected.signing.key.password=$KEY_PASSWORD \
-Pandroid.injected.signing.v1-signing-enabled=true \
-Pandroid.injected.signing.v2-signing-enabled=true \
-Pandroid.injected.signing.v3-signing-enabled=true \
-Pandroid.injected.signing.v4-signing-enabled=true
- name: List build output directory
run: |
echo "Listing APK files in build output directory:"
find sfa/app/build/outputs -name "*.apk"
- name: Verify APK signatures
run: |
for apk in sfa/app/build/outputs/apk/other/release/*.apk; do
apksigner verify --verbose "$apk"
done
for apk in sfa/app/build/outputs/apk/play/release/*.apk; do
apksigner verify --verbose "$apk"
done
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.sing-box.outputs.version }}-${{ steps.get-commit-id.outputs.commit_id }}
release_name: Release ${{ steps.sing-box.outputs.version }}-${{ steps.get-commit-id.outputs.commit_id }}
draft: false
prerelease: false
- name: Upload arm64-v8a APK
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./sfa/app/build/outputs/apk/other/release/*arm64-v8a*.apk
asset_name: SFA-PuerNya-${{ steps.sing-box.outputs.version }}-${{ steps.get-commit-id.outputs.commit_id }}-arm64-v8a.apk
asset_content_type: application/vnd.android.package-archive
- name: Upload armeabi-v7a APK
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./sfa/app/build/outputs/apk/other/release/*armeabi-v7a*.apk
asset_name: SFA-PuerNya-${{ steps.sing-box.outputs.version }}-${{ steps.get-commit-id.outputs.commit_id }}-armeabi-v7a.apk
asset_content_type: application/vnd.android.package-archive
- name: Upload x86_64 APK
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./sfa/app/build/outputs/apk/other/release/*x86_64*.apk
asset_name: SFA-PuerNya-${{ steps.sing-box.outputs.version }}-${{ steps.get-commit-id.outputs.commit_id }}-x86_64.apk
asset_content_type: application/vnd.android.package-archive
- name: Upload x86 APK
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./sfa/app/build/outputs/apk/other/release/*x86*.apk
asset_name: SFA-PuerNya-${{ steps.sing-box.outputs.version }}-${{ steps.get-commit-id.outputs.commit_id }}-x86.apk
asset_content_type: application/vnd.android.package-archive
- name: Upload universal APK
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./sfa/app/build/outputs/apk/other/release/*universal*.apk
asset_name: SFA-PuerNya-${{ steps.sing-box.outputs.version }}-${{ steps.get-commit-id.outputs.commit_id }}-universal.apk
asset_content_type: application/vnd.android.package-archive