Skip to content

Commit 22b10d5

Browse files
committed
ci: wire MasterDnsVPN sidecar into build workflows; collision-safe temp files
- Add a MasterDnsVPN build step to the combined 'sidecars' job across ci/build/ preview/release: builds libmasterdnsvpn.so (4 ABIs) from the fork ref pinned via MDV_REF, caches it with the other sidecars (cache key + status hash include masterdnsvpn.sh and MDV_REF), and the build job's verify covers libmasterdnsvpn.so. Go 1.26.4 already satisfies the fork's Go 1.25+ requirement, so no extra setup-go. - BoxInstance: namespace the MasterDnsVPN config/resolvers temp files by port (unique per chain entry) to avoid same-millisecond collisions (CodeRabbit).
1 parent 33523bd commit 22b10d5

5 files changed

Lines changed: 39 additions & 21 deletions

File tree

.github/workflows/build.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ on:
99
env:
1010
MIERU_VERSION: v3.34.0
1111
HYSTERIA_VERSION: v2.9.2
12+
MDV_REF: android-vpnservice-protect-hook
1213
permissions:
1314
contents: read
1415
jobs:
@@ -44,14 +45,14 @@ jobs:
4445
- name: Checkout
4546
uses: actions/checkout@v5
4647
- name: Sidecars Status
47-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
48+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
4849
- name: Sidecars Cache
4950
id: cache
5051
uses: actions/cache@v5
5152
with:
5253
path: |
5354
app/executableSo
54-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars
55+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars
5556
- name: Install Golang
5657
if: steps.cache.outputs.cache-hit != 'true'
5758
uses: actions/setup-go@v6
@@ -63,6 +64,9 @@ jobs:
6364
- name: Hysteria2 Download
6465
if: steps.cache.outputs.cache-hit != 'true'
6566
run: ./run lib hysteria2
67+
- name: MasterDnsVPN Build
68+
if: steps.cache.outputs.cache-hit != 'true'
69+
run: ./run lib masterdnsvpn
6670
build:
6771
name: Build OSS APK
6872
runs-on: ubuntu-latest
@@ -83,18 +87,18 @@ jobs:
8387
app/libs/libcore.aar
8488
key: ${{ hashFiles('.github/workflows/*', 'golang_status', 'libcore_status') }}
8589
- name: Sidecars Status
86-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
90+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
8791
- name: Sidecars Cache
8892
id: sidecars-cache
8993
uses: actions/cache@v5
9094
with:
9195
path: |
9296
app/executableSo
93-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars
97+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars
9498
- name: Verify Sidecar Artifacts
9599
run: |
96100
for abi in arm64-v8a armeabi-v7a x86 x86_64; do
97-
for so in libmieru.so libhysteria2.so; do
101+
for so in libmieru.so libhysteria2.so libmasterdnsvpn.so; do
98102
if [ ! -f "app/executableSo/$abi/$so" ]; then
99103
echo "Error: missing app/executableSo/$abi/$so (sidecar cache miss)" >&2
100104
exit 1

.github/workflows/ci.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ on:
99
env:
1010
MIERU_VERSION: v3.34.0
1111
HYSTERIA_VERSION: v2.9.2
12+
MDV_REF: android-vpnservice-protect-hook
1213
permissions:
1314
contents: read
1415
jobs:
@@ -49,14 +50,14 @@ jobs:
4950
- name: Checkout
5051
uses: actions/checkout@v5
5152
- name: Sidecars Status
52-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
53+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
5354
- name: Sidecars Cache
5455
id: cache
5556
uses: actions/cache@v5
5657
with:
5758
path: |
5859
app/executableSo
59-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars-ci
60+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars-ci
6061
- name: Install Golang
6162
if: steps.cache.outputs.cache-hit != 'true'
6263
uses: actions/setup-go@v6
@@ -68,6 +69,9 @@ jobs:
6869
- name: Hysteria2 Download
6970
if: steps.cache.outputs.cache-hit != 'true'
7071
run: ./run lib hysteria2
72+
- name: MasterDnsVPN Build
73+
if: steps.cache.outputs.cache-hit != 'true'
74+
run: ./run lib masterdnsvpn
7175
build:
7276
name: Build OSS APK
7377
runs-on: ubuntu-latest
@@ -93,18 +97,18 @@ jobs:
9397
app/libs/libcore.aar
9498
key: ${{ hashFiles('.github/workflows/*', 'golang_status', 'libcore_status') }}-ci
9599
- name: Sidecars Status
96-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
100+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
97101
- name: Sidecars Cache
98102
id: sidecars-cache
99103
uses: actions/cache@v5
100104
with:
101105
path: |
102106
app/executableSo
103-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars-ci
107+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars-ci
104108
- name: Verify Sidecar Artifacts
105109
run: |
106110
for abi in arm64-v8a armeabi-v7a x86 x86_64; do
107-
for so in libmieru.so libhysteria2.so; do
111+
for so in libmieru.so libhysteria2.so libmasterdnsvpn.so; do
108112
if [ ! -f "app/executableSo/$abi/$so" ]; then
109113
echo "Error: missing app/executableSo/$abi/$so (sidecar cache miss)" >&2
110114
exit 1

.github/workflows/preview.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55
env:
66
MIERU_VERSION: v3.34.0
77
HYSTERIA_VERSION: v2.9.2
8+
MDV_REF: android-vpnservice-protect-hook
89
permissions:
910
contents: read
1011
jobs:
@@ -40,14 +41,14 @@ jobs:
4041
- name: Checkout
4142
uses: actions/checkout@v5
4243
- name: Sidecars Status
43-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
44+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
4445
- name: Sidecars Cache
4546
id: cache
4647
uses: actions/cache@v5
4748
with:
4849
path: |
4950
app/executableSo
50-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars
51+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars
5152
- name: Install Golang
5253
if: steps.cache.outputs.cache-hit != 'true'
5354
uses: actions/setup-go@v6
@@ -59,6 +60,9 @@ jobs:
5960
- name: Hysteria2 Download
6061
if: steps.cache.outputs.cache-hit != 'true'
6162
run: ./run lib hysteria2
63+
- name: MasterDnsVPN Build
64+
if: steps.cache.outputs.cache-hit != 'true'
65+
run: ./run lib masterdnsvpn
6266
build:
6367
name: Build OSS APK
6468
runs-on: ubuntu-latest
@@ -79,18 +83,18 @@ jobs:
7983
app/libs/libcore.aar
8084
key: ${{ hashFiles('.github/workflows/*', 'golang_status', 'libcore_status') }}
8185
- name: Sidecars Status
82-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
86+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
8387
- name: Sidecars Cache
8488
id: sidecars-cache
8589
uses: actions/cache@v5
8690
with:
8791
path: |
8892
app/executableSo
89-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars
93+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars
9094
- name: Verify Sidecar Artifacts
9195
run: |
9296
for abi in arm64-v8a armeabi-v7a x86 x86_64; do
93-
for so in libmieru.so libhysteria2.so; do
97+
for so in libmieru.so libhysteria2.so libmasterdnsvpn.so; do
9498
if [ ! -f "app/executableSo/$abi/$so" ]; then
9599
echo "Error: missing app/executableSo/$abi/$so (sidecar cache miss)" >&2
96100
exit 1

.github/workflows/release.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ on:
1111
env:
1212
MIERU_VERSION: v3.34.0
1313
HYSTERIA_VERSION: v2.9.2
14+
MDV_REF: android-vpnservice-protect-hook
1415
permissions:
1516
contents: write
1617
jobs:
@@ -46,14 +47,14 @@ jobs:
4647
- name: Checkout
4748
uses: actions/checkout@v5
4849
- name: Sidecars Status
49-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
50+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
5051
- name: Sidecars Cache
5152
id: cache
5253
uses: actions/cache@v5
5354
with:
5455
path: |
5556
app/executableSo
56-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars
57+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars
5758
- name: Install Golang
5859
if: steps.cache.outputs.cache-hit != 'true'
5960
uses: actions/setup-go@v6
@@ -65,6 +66,9 @@ jobs:
6566
- name: Hysteria2 Download
6667
if: steps.cache.outputs.cache-hit != 'true'
6768
run: ./run lib hysteria2
69+
- name: MasterDnsVPN Build
70+
if: steps.cache.outputs.cache-hit != 'true'
71+
run: ./run lib masterdnsvpn
6872
build:
6973
name: Build OSS APK
7074
runs-on: ubuntu-latest
@@ -85,18 +89,18 @@ jobs:
8589
app/libs/libcore.aar
8690
key: ${{ hashFiles('.github/workflows/*', 'golang_status', 'libcore_status') }}
8791
- name: Sidecars Status
88-
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
92+
run: cat buildScript/lib/mieru.sh buildScript/lib/hysteria2.sh buildScript/lib/masterdnsvpn.sh buildScript/init/env.sh buildScript/init/env_ndk.sh | sha1sum > sidecars_status
8993
- name: Sidecars Cache
9094
id: sidecars-cache
9195
uses: actions/cache@v5
9296
with:
9397
path: |
9498
app/executableSo
95-
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-sidecars
99+
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.HYSTERIA_VERSION }}-${{ env.MDV_REF }}-sidecars
96100
- name: Verify Sidecar Artifacts
97101
run: |
98102
for abi in arm64-v8a armeabi-v7a x86 x86_64; do
99-
for so in libmieru.so libhysteria2.so; do
103+
for so in libmieru.so libhysteria2.so libmasterdnsvpn.so; do
100104
if [ ! -f "app/executableSo/$abi/$so" ]; then
101105
echo "Error: missing app/executableSo/$abi/$so (sidecar cache miss)" >&2
102106
exit 1

app/src/main/java/io/nekohasekai/sagernet/bg/proto/BoxInstance.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,9 @@ abstract class BoxInstance(
246246
}
247247

248248
bean is MasterDnsVpnBean -> {
249-
val ts = SystemClock.elapsedRealtime()
249+
// Port is unique per chain entry, so two sidecars can't collide
250+
// (unlike a bare elapsedRealtime() shared by the config+resolvers pair).
251+
val ts = "${port}_${SystemClock.elapsedRealtime()}"
250252
val configFile = File(cacheDir, "masterdnsvpn_$ts.json")
251253
configFile.parentFile?.mkdirs()
252254
configFile.writeText(config)

0 commit comments

Comments
 (0)