forked from starifly/NekoBoxForAndroid
-
Notifications
You must be signed in to change notification settings - Fork 0
238 lines (238 loc) · 9.12 KB
/
Copy pathrelease.yml
File metadata and controls
238 lines (238 loc) · 9.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
name: Release Build
on:
workflow_dispatch:
inputs:
tag:
description: "Release Tag"
required: true
publish:
description: "Publish the completed release"
required: false
type: boolean
default: false
env:
MIERU_VERSION: v3.34.1
MDVPN_REF: android-vpnservice-protect-hook
MDVPN_COMMIT: d481d72d4b86783a87d536c214d2c68cc4e9320e
NAIVE_VERSION: v149.0.7827.114-1
OLCRTC_REPO: https://github.com/hawkff/olcrtc.git
OLCRTC_COMMIT: ad5cc1e3d60b657b15ccd26f8db91395bf9630d0
permissions:
contents: read
jobs:
libcore:
name: Native Build (LibCore)
runs-on: namespace-profile-nekoyay
steps:
- name: Checkout
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Golang Status
run: find buildScript libcore/*.sh | xargs cat | sha1sum > golang_status
- name: Libcore Status
run: git ls-files libcore | xargs cat | sha1sum > libcore_status
- name: LibCore Cache
id: cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
app/libs/libcore.aar
key: ${{ hashFiles('.github/workflows/*', 'golang_status', 'libcore_status') }}
- name: Install Golang
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: '1.26.4'
- name: Native Build
if: steps.cache.outputs.cache-hit != 'true'
run: ./run lib core
- name: Verify 16 KB ELF alignment
run: bash ./scripts/verify-elf-alignment.sh app/libs/libcore.aar
- name: Upload LibCore
uses: namespace-actions/upload-artifact@f6ccaacc655aec41b93af180d1d7eef21af862d2 # v1
with:
name: libcore-aar-release
path: app/libs/libcore.aar
retention-days: 1
if-no-files-found: error
sidecars:
name: Native Build (Sidecars)
runs-on: namespace-profile-nekoyay
steps:
- name: Checkout
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Sidecars Status
run: |
git ls-files -s -- \
buildScript/lib/mieru.sh \
buildScript/lib/masterdnsvpn.sh \
buildScript/lib/naive.sh \
buildScript/lib/olcrtc.sh \
buildScript/lib/olcrtc-src/main.go \
buildScript/lib/olcrtc-src/main_test.go \
buildScript/lib/olcrtc-src/go.mod \
buildScript/init/env.sh \
buildScript/init/env_ndk.sh \
| sha1sum > sidecars_status
- name: Sidecars Cache
id: cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
app/executableSo
key: ${{ hashFiles('.github/workflows/*', 'sidecars_status') }}-${{ env.MIERU_VERSION }}-${{ env.MDVPN_COMMIT }}-${{ env.NAIVE_VERSION }}-${{ env.OLCRTC_COMMIT }}-sidecars
- name: Install Golang
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: '1.26.4'
- name: Mieru Build
if: steps.cache.outputs.cache-hit != 'true'
run: ./run lib mieru
- name: MasterDnsVPN Build
if: steps.cache.outputs.cache-hit != 'true'
run: ./run lib masterdnsvpn
- name: Naive Download
if: steps.cache.outputs.cache-hit != 'true'
run: ./run lib naive
- name: olcRTC Build
if: steps.cache.outputs.cache-hit != 'true'
run: ./run lib olcrtc
- name: Upload Sidecars
uses: namespace-actions/upload-artifact@f6ccaacc655aec41b93af180d1d7eef21af862d2 # v1
with:
name: sidecars-so-release
path: app/executableSo
retention-days: 1
if-no-files-found: error
build:
name: Build OSS APK
runs-on: namespace-profile-nekoyay
needs:
- libcore
- sidecars
steps:
- name: Checkout
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Download LibCore
uses: namespace-actions/download-artifact@5c070f7d7ebdc47682b04aa736c76e46ff5f6e1e # v1
with:
name: libcore-aar-release
path: app/libs
- name: Download Sidecars
uses: namespace-actions/download-artifact@5c070f7d7ebdc47682b04aa736c76e46ff5f6e1e # v1
with:
name: sidecars-so-release
path: app/executableSo
- name: Verify Sidecar Artifacts
run: |
for abi in arm64-v8a armeabi-v7a x86 x86_64; do
for so in libmieru.so libmasterdnsvpn.so libnaive.so libolcrtc.so; do
if [ ! -f "app/executableSo/$abi/$so" ]; then
echo "Error: missing app/executableSo/$abi/$so (sidecar artifact missing)" >&2
exit 1
fi
done
done
- name: Gradle cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: ~/.gradle
key: gradle-oss-${{ hashFiles('**/*.gradle.kts') }}
- name: Gradle Build
env:
BUILD_PLUGIN: none
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
# release.keystore is not committed; decode it from the KEYSTORE_B64 secret.
if [ -n "${{ secrets.KEYSTORE_B64 }}" ]; then
echo "${{ secrets.KEYSTORE_B64 }}" | base64 -d > release.keystore
fi
KEYSTORE_PASS="${{ secrets.KEYSTORE_PASS }}" ALIAS_NAME="${{ secrets.ALIAS_NAME }}" ALIAS_PASS="${{ secrets.ALIAS_PASS }}" ./gradlew app:assembleOssRelease
APK=$(find app/build/outputs/renamed_apks -name '*arm64-v8a*.apk' | head -n 1)
if [ -z "$APK" ]; then
echo "Error: no arm64-v8a APK found under app/build/outputs/renamed_apks" >&2
exit 1
fi
APK=$(dirname "$APK")
echo "APK=$APK" >> $GITHUB_ENV
- name: Generate APK checksums
env:
APK: ${{ env.APK }}
run: |
set -euo pipefail
shopt -s nullglob
APK_FILES=("$APK"/*.apk)
if [ "${#APK_FILES[@]}" -eq 0 ]; then
echo "Error: no release APKs found in $APK" >&2
exit 1
fi
(
cd "$APK"
sha256sum ./*.apk > SHA256SUMS
)
- uses: namespace-actions/upload-artifact@f6ccaacc655aec41b93af180d1d7eef21af862d2 # v1
with:
name: APKs
path: ${{ env.APK }}
- name: Publish arm64 release APK to Namespace workspace store
env:
APK: ${{ env.APK }}
run: |
set -euo pipefail
shopt -s nullglob
APK_FILES=("$APK"/*arm64-v8a*.apk)
if [ "${#APK_FILES[@]}" -ne 1 ]; then
echo "Error: expected one arm64-v8a release APK, found ${#APK_FILES[@]}" >&2
exit 1
fi
APK_FILE="${APK_FILES[0]}"
REF="${GITHUB_REF_NAME//\//-}"
DEST_DIR="nekobox-release/${REF}/${GITHUB_RUN_ID}"
DEST="$DEST_DIR/$(basename "$APK_FILE")"
ARM64_SUMS=$(mktemp)
(cd "$APK" && sha256sum "./$(basename "$APK_FILE")") > "$ARM64_SUMS"
nsc artifact upload "$APK_FILE" "$DEST"
nsc artifact upload "$ARM64_SUMS" "$DEST_DIR/SHA256SUMS"
echo "Uploaded to Namespace workspace store: $DEST"
echo "Uploaded checksums to Namespace workspace store: $DEST_DIR/SHA256SUMS"
publish:
name: Publish Release
if: ${{ inputs.publish == true }}
runs-on: namespace-profile-nekoyay
permissions:
contents: write
needs: build
steps:
- name: Checkout
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Donwload Artifacts
uses: namespace-actions/download-artifact@5c070f7d7ebdc47682b04aa736c76e46ff5f6e1e # v1
with:
name: APKs
path: artifacts
- name: Release
run: |
set -euo pipefail
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 .
shopt -s globstar nullglob
CHECKSUM_FILES=(artifacts/**/SHA256SUMS)
if [ "${#CHECKSUM_FILES[@]}" -ne 1 ]; then
echo "Error: expected one SHA256SUMS file, found ${#CHECKSUM_FILES[@]}" >&2
exit 1
fi
CHECKSUM_DIR=$(dirname "${CHECKSUM_FILES[0]}")
(cd "$CHECKSUM_DIR" && sha256sum --check SHA256SUMS)
APK_FILES=(artifacts/**/*.apk)
if [ "${#APK_FILES[@]}" -eq 0 ]; then
echo "Error: no release APKs found in artifacts" >&2
exit 1
fi
mkdir apks
RELEASE_FILES=("${APK_FILES[@]}" "${CHECKSUM_FILES[@]}")
cp "${RELEASE_FILES[@]}" apks/
./ghr -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" apks