ci(release): cap the Android build so it cannot freeze the runner host
The APK job container now runs with --cpus=3 --memory=6g and no swap; CMake / ninja for the React Native native code are limited to 2 jobs (they used every core), and Gradle runs under nice / ionice. Notes for hypervisor-hosted runners (Proxmox) are in docs/ci-cd.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4cca427b82
commit
4fb4e124a0
2 files changed
+13
-1
No files matched your search
@@ -58,6 +58,9 @@ jobs:
|
||||
shell: bash
|
||||
container:
|
||||
image: docker.gitea.com/runner-images:ubuntu-latest
|
||||
# Жёсткие пределы контейнера: сборка не должна забирать всю VM раннера (а через неё — хост гипервизора).
|
||||
# Своп запрещён (memory-swap = memory): лучше OOM внутри контейнера, чем подвисший хост.
|
||||
options: --cpus=3 --memory=6g --memory-swap=6g
|
||||
volumes:
|
||||
- /opt/ci-cache/gradle:/root/.gradle
|
||||
- /opt/ci-cache/android:/root/.android
|
||||
@@ -100,6 +103,9 @@ jobs:
|
||||
# CI=1 — Metro без file watcher и с 2 воркерами (metro.config.js); NODE_ENV нужен expo для .env-файлов
|
||||
CI: "1"
|
||||
NODE_ENV: production
|
||||
# CMake / ninja нативной части React Native по умолчанию берут все ядра — ограничиваем.
|
||||
CMAKE_BUILD_PARALLEL_LEVEL: "2"
|
||||
NINJAFLAGS: "-j2"
|
||||
# Только arm64-v8a: C++-часть React Native собирается под каждую ABI, и четыре ABI
|
||||
# вместе с NDK (~2.5 ГБ) не помещаются на диск раннера. arm64 — все устройства с 2017+.
|
||||
# Память: на раннере 8 ГБ, и без ограничений Gradle + демон Kotlin + Metro вызывают OOM killer.
|
||||
@@ -111,7 +117,8 @@ jobs:
|
||||
run: |
|
||||
npx expo prebuild --platform android --clean --no-install
|
||||
cd android
|
||||
gradle=(./gradlew --max-workers=2 --build-cache -PreactNativeArchitectures=arm64-v8a
|
||||
# nice / ionice: сборка уступает CPU и диск всему остальному на машине
|
||||
gradle=(nice -n 19 ionice -c 3 ./gradlew --max-workers=2 --build-cache -PreactNativeArchitectures=arm64-v8a
|
||||
-Pkotlin.compiler.execution.strategy=in-process -Dorg.gradle.jvmargs="-Xmx2560m -XX:MaxMetaspaceSize=512m")
|
||||
# Без New Architecture (app.config.ts) CMake приложения не собирается — отдельный codegen не нужен.
|
||||
if grep -q '^newArchEnabled=true' gradle.properties; then
|
||||
|
||||
Reference in new issue
Block a user