Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f7e7194
Migrate Phase 1 libcore to official sing-box v1.14.0
inkzer0 Sep 11, 2026
66df9c1
Merge pull request #1 from inkzer0/phase1/core-v1.14.0
inkzer0 Sep 11, 2026
e790a7a
Fix BROKEN-BASELINE DNS successful callback timeout
inkzer0 Sep 11, 2026
248700e
Merge pull request #2 from inkzer0/bugfix/dns-success-callback-timeout
inkzer0 Sep 11, 2026
14214c1
Phase 2: add App-managed remote rule set subscriptions
inkzer0 Sep 12, 2026
f44d980
Merge pull request #3 from inkzer0/phase2/remote-rule-set
inkzer0 Sep 12, 2026
81da1cc
Fix BROKEN-BASELINE: preserve combined GeoSite and GeoIP rule conditions
inkzer0 Sep 12, 2026
e7d0ac1
Merge pull request #4 from inkzer0/bugfix/legacy-geosite-geoip-rule
inkzer0 Sep 12, 2026
51fd154
Phase 3: refresh Views and XML with Material 3 visual styles
inkzer0 Sep 12, 2026
bfa8909
Merge pull request #5 from inkzer0/phase3/material3-ui
inkzer0 Sep 12, 2026
e98e421
Fix StatsBar host lookup through Material theme contexts
inkzer0 Sep 13, 2026
48f6bd9
Merge pull request #6 from inkzer0/bugfix/statsbar-themed-context
inkzer0 Sep 13, 2026
5c76e06
Fix status bar contrast across day-night and Android API levels
inkzer0 Sep 13, 2026
90f3857
Merge pull request #7 from inkzer0/bugfix/light-status-bar-contrast
inkzer0 Sep 13, 2026
1c2062e
fix(ui): keep service button above StatsBar with M3 cradle mode
inkzer0 Sep 13, 2026
1ba1899
Merge pull request #8 from inkzer0/bugfix/service-button-statsbar-ove…
inkzer0 Sep 13, 2026
e197334
fix: clear legacy StatsBar testing status after URLTest failure
inkzer0 Sep 13, 2026
66b66c1
Merge pull request #9 from inkzer0/bugfix/urltest-failure-status
inkzer0 Sep 13, 2026
dc4a0d8
Prepare v1.4.3 independent fork release signing
inkzer0 Sep 16, 2026
78384b2
Document only fork changes in README
inkzer0 Sep 21, 2026
979cac9
Restore README verbatim from upstream
inkzer0 Sep 22, 2026
eeb53fd
ci: upgrade Play artifact upload action to v4
inkzer0 Nov 14, 2026
4b5ebc7
security: upgrade SnakeYAML to patched 2.7
inkzer0 Nov 14, 2026
2f29534
security: parse untrusted subscription YAML with SafeConstructor
inkzer0 Nov 14, 2026
d6d1fef
fix: do not require caches for unused remote rule sets
inkzer0 Nov 14, 2026
0be08a8
test: unused remote rule sets without cache do not block startup
inkzer0 Nov 14, 2026
f9c2c11
test: cover safe YAML parsing of subscriptions
inkzer0 Nov 14, 2026
c99c2e1
revert unverified unused rule-set filtering
inkzer0 Nov 14, 2026
f243562
remove unverified rule-set behavior assertion
inkzer0 Nov 14, 2026
962c4bd
Merge pull request #10 from inkzer0/fix/static-audit-security-build
inkzer0 Nov 14, 2026
708a972
Fix Android service startup, rule-set isolation and backup integrity
Nov 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Regression checks
on:
push:
pull_request:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: checks-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
regression:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- uses: actions/setup-go@v5
with:
go-version: '1.25.5'
cache-dependency-path: libcore/go.sum
- uses: android-actions/setup-android@v3
- uses: gradle/actions/setup-gradle@v4
- name: Install Android toolchain
run: sdkmanager 'platforms;android-35' 'build-tools;35.0.1' 'ndk;25.0.8775105'
- name: Build libcore from verified sources
run: ./run lib core
- name: Prepare Geo assets
run: ./run init action gradle
- name: Android JVM regressions and compile classpath
run: |
./gradlew -I app/src/test/phase2.init.gradle -I app/src/test/fixtures/classpath.init.gradle :app:testOssDebugUnitTest :app:writeFixtureClasspath
- name: Generate actual ConfigBuilder fixtures
run: |
python3 app/src/test/fixtures/legacy_geo_fixture.py \
--repo "$PWD" --classpath-file app/build/fixture-classpath.txt \
--android-jar "$ANDROID_HOME/platforms/android-35/android.jar" \
--jdk "$JAVA_HOME" --output "$RUNNER_TEMP/neko-fixtures"
- name: Go core, DNS callbacks, Geo and generated config regressions
run: |
mkdir -p "$RUNNER_TEMP/neko-geo"
xz -dc app/src/main/assets/sing-box/geoip.db.xz > "$RUNNER_TEMP/neko-geo/geoip.db"
xz -dc app/src/main/assets/sing-box/geosite.db.xz > "$RUNNER_TEMP/neko-geo/geosite.db"
export NEKO_GEO_ASSETS="$RUNNER_TEMP/neko-geo"
export NEKO_CONFIG_FIXTURES="$RUNNER_TEMP/neko-fixtures/config-fixture/configs"
export NEKO_REMOTE_CONFIG_FIXTURES="$RUNNER_TEMP/neko-fixtures/config-fixture/remotes/configs"
export NEKO_LEGACY_GEO_FIXTURES="$RUNNER_TEMP/neko-fixtures/config-fixture/geo-configs"
bash buildScript/test/core.sh
- name: Upload test evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: regression-results
path: |
app/build/reports/tests/
app/build/test-results/
${{ runner.temp }}/neko-fixtures/*.log
35 changes: 28 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,23 @@ jobs:
with:
path: ~/.gradle
key: gradle-oss-${{ hashFiles('**/*.gradle.kts') }}
- name: Prepare fork release signing
env:
RELEASE_KEYSTORE_BASE64: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}
run: |
test -n "$RELEASE_KEYSTORE_BASE64"
umask 077
printf '%s' "$RELEASE_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/nekobox-release.p12"
echo "KEYSTORE_PATH=$RUNNER_TEMP/nekobox-release.p12" >> "$GITHUB_ENV"
- name: Gradle Build
env:
BUILD_PLUGIN: none
KEYSTORE_PASS: ${{ secrets.KEYSTORE_PASS }}
ALIAS_NAME: ${{ secrets.ALIAS_NAME }}
ALIAS_PASS: ${{ secrets.ALIAS_PASS }}
run: |
echo "sdk.dir=${ANDROID_HOME}" > local.properties
echo "ndk.dir=${ANDROID_HOME}/ndk/25.0.8775105" >> local.properties
export LOCAL_PROPERTIES="${{ secrets.LOCAL_PROPERTIES }}"
./run init action gradle
./gradlew app:assembleOssRelease
APK=$(find app/build/outputs/apk -name '*arm64-v8a*.apk')
Expand All @@ -90,13 +100,13 @@ jobs:
name: APKs
path: artifacts
- name: Release
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ github.event.inputs.tag }}
run: |
wget -O ghr.tar.gz https://github.com/tcnksm/ghr/releases/download/v0.13.0/ghr_v0.13.0_linux_amd64.tar.gz
tar -xvf ghr.tar.gz
mv ghr*linux_amd64/ghr .
mkdir apks
find artifacts -name "*.apk" -exec cp {} apks \;
./ghr -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" apks
gh release create "$RELEASE_TAG" apks/*.apk --verify-tag --draft --title "$RELEASE_TAG"
play:
name: Build Play Bundle
if: github.event.inputs.play != 'y'
Expand Down Expand Up @@ -124,14 +134,25 @@ jobs:
- name: Checkout Library
run: |
git submodule update --init 'app/*'
- name: Prepare fork release signing
env:
RELEASE_KEYSTORE_BASE64: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}
run: |
test -n "$RELEASE_KEYSTORE_BASE64"
umask 077
printf '%s' "$RELEASE_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/nekobox-release.p12"
echo "KEYSTORE_PATH=$RUNNER_TEMP/nekobox-release.p12" >> "$GITHUB_ENV"
- name: Gradle Build
env:
KEYSTORE_PASS: ${{ secrets.KEYSTORE_PASS }}
ALIAS_NAME: ${{ secrets.ALIAS_NAME }}
ALIAS_PASS: ${{ secrets.ALIAS_PASS }}
run: |
echo "sdk.dir=${ANDROID_HOME}" > local.properties
echo "ndk.dir=${ANDROID_HOME}/ndk/25.0.8775105" >> local.properties
export LOCAL_PROPERTIES="${{ secrets.LOCAL_PROPERTIES }}"
./run init action gradle
./gradlew bundlePlayRelease
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: AAB
path: app/build/outputs/bundle/playRelease/app-play-release.aab
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ dependencies {
implementation("com.blacksquircle.ui:language-json:2.6.0")

implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.3")
implementation("org.yaml:snakeyaml:1.30")
implementation("org.yaml:snakeyaml:2.7")
implementation("com.github.daniel-stoneuk:material-about-library:3.2.0-rc01")
implementation("com.jakewharton:process-phoenix:2.1.2")
implementation("com.esotericsoftware:kryo:5.2.1")
Expand Down
Loading