Loading .gitlab-ci.yml +99 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ default: # Define pipeline stages stages: - lint - build # Detekt static analysis job detekt: Loading Loading @@ -55,7 +56,6 @@ detekt: # Run detekt - cd cardinal-android - touch local.properties - chmod +x ./gradlew - ./gradlew detekt # Optional: Upload detekt reports as artifacts artifacts: Loading @@ -65,3 +65,101 @@ detekt: paths: - cardinal-android/app/build/reports/detekt/ expire_in: 1 week # Android build job with Rust support build: stage: build # Use an image with Android SDK pre-installed for better performance image: cimg/android:2024.01.1-ndk # Only run on pushes to main and merge requests to main rules: - if: '$CI_COMMIT_BRANCH == "main"' - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"' # Allow newer pipelines to cancel older ones interruptible: true # Resource group for concurrency control resource_group: android-build-${CI_COMMIT_REF_SLUG} variables: # Android SDK and NDK paths ANDROID_HOME: /home/circleci/android-sdk ANDROID_NDK_VERSION: "26.1.10909125" ANDROID_SDK_ROOT: /home/circleci/android-sdk before_script: # Install git-lfs and additional dependencies - sudo apt-get update -qq - sudo apt-get install -y -qq git-lfs curl unzip protobuf-compiler - git lfs install # Install specific NDK version if not present - | if [ ! -d "$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION" ]; then echo "Installing NDK $ANDROID_NDK_VERSION..." yes | sdkmanager "ndk;$ANDROID_NDK_VERSION" || true fi # Configure Android NDK environment - export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION - export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION - export NDK_HOME=$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION # Install Rust if not present - | if ! command -v rustc &> /dev/null; then echo "Installing Rust..." curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable source $HOME/.cargo/env fi # Add Rust to PATH - export PATH="$HOME/.cargo/bin:$PATH" # Install Rust Android targets - rustup target add aarch64-linux-android - rustup target add x86_64-linux-android # Install cargo-ndk - cargo install cargo-ndk || true # Verify setup - | echo "=== Environment Variables ===" echo "ANDROID_HOME: $ANDROID_HOME" echo "ANDROID_NDK_HOME: $ANDROID_NDK_HOME" echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT" echo "NDK_HOME: $NDK_HOME" echo "" echo "=== Android SDK Structure ===" ls -la $ANDROID_HOME || echo "ANDROID_HOME not found" echo "" echo "=== NDK Installation ===" ls -la $ANDROID_NDK_HOME || echo "NDK not found at $ANDROID_NDK_HOME" echo "" echo "=== Rust Targets ===" rustup target list --installed | grep android || echo "No Android targets found" echo "" echo "=== Cargo NDK Version ===" cargo ndk --version || echo "cargo-ndk not found" cache: - key: files: - cardinal-android/**/*.gradle* - cardinal-android/gradle/wrapper/gradle-wrapper.properties prefix: gradle-${CI_JOB_NAME} paths: - .gradle/caches - .gradle/wrapper - cardinal-android/.gradle policy: pull-push - key: files: - Cargo.lock prefix: cargo-${CI_JOB_NAME} paths: - .cargo/registry - .cargo/git - ./target policy: pull-push script: # Configure Gradle for CI - mkdir -p ~/.gradle - echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties - echo "org.gradle.parallel=true" >> ~/.gradle/gradle.properties - echo "org.gradle.configureondemand=true" >> ~/.gradle/gradle.properties - echo "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError" >> ~/.gradle/gradle.properties # Build debug APKs for each architecture - cd cardinal-android - touch local.properties - ./gradlew assembleArm64Debug assembleX86_64Debug --info --stacktrace --no-daemon Loading
.gitlab-ci.yml +99 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ default: # Define pipeline stages stages: - lint - build # Detekt static analysis job detekt: Loading Loading @@ -55,7 +56,6 @@ detekt: # Run detekt - cd cardinal-android - touch local.properties - chmod +x ./gradlew - ./gradlew detekt # Optional: Upload detekt reports as artifacts artifacts: Loading @@ -65,3 +65,101 @@ detekt: paths: - cardinal-android/app/build/reports/detekt/ expire_in: 1 week # Android build job with Rust support build: stage: build # Use an image with Android SDK pre-installed for better performance image: cimg/android:2024.01.1-ndk # Only run on pushes to main and merge requests to main rules: - if: '$CI_COMMIT_BRANCH == "main"' - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"' # Allow newer pipelines to cancel older ones interruptible: true # Resource group for concurrency control resource_group: android-build-${CI_COMMIT_REF_SLUG} variables: # Android SDK and NDK paths ANDROID_HOME: /home/circleci/android-sdk ANDROID_NDK_VERSION: "26.1.10909125" ANDROID_SDK_ROOT: /home/circleci/android-sdk before_script: # Install git-lfs and additional dependencies - sudo apt-get update -qq - sudo apt-get install -y -qq git-lfs curl unzip protobuf-compiler - git lfs install # Install specific NDK version if not present - | if [ ! -d "$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION" ]; then echo "Installing NDK $ANDROID_NDK_VERSION..." yes | sdkmanager "ndk;$ANDROID_NDK_VERSION" || true fi # Configure Android NDK environment - export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION - export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION - export NDK_HOME=$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION # Install Rust if not present - | if ! command -v rustc &> /dev/null; then echo "Installing Rust..." curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable source $HOME/.cargo/env fi # Add Rust to PATH - export PATH="$HOME/.cargo/bin:$PATH" # Install Rust Android targets - rustup target add aarch64-linux-android - rustup target add x86_64-linux-android # Install cargo-ndk - cargo install cargo-ndk || true # Verify setup - | echo "=== Environment Variables ===" echo "ANDROID_HOME: $ANDROID_HOME" echo "ANDROID_NDK_HOME: $ANDROID_NDK_HOME" echo "ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT" echo "NDK_HOME: $NDK_HOME" echo "" echo "=== Android SDK Structure ===" ls -la $ANDROID_HOME || echo "ANDROID_HOME not found" echo "" echo "=== NDK Installation ===" ls -la $ANDROID_NDK_HOME || echo "NDK not found at $ANDROID_NDK_HOME" echo "" echo "=== Rust Targets ===" rustup target list --installed | grep android || echo "No Android targets found" echo "" echo "=== Cargo NDK Version ===" cargo ndk --version || echo "cargo-ndk not found" cache: - key: files: - cardinal-android/**/*.gradle* - cardinal-android/gradle/wrapper/gradle-wrapper.properties prefix: gradle-${CI_JOB_NAME} paths: - .gradle/caches - .gradle/wrapper - cardinal-android/.gradle policy: pull-push - key: files: - Cargo.lock prefix: cargo-${CI_JOB_NAME} paths: - .cargo/registry - .cargo/git - ./target policy: pull-push script: # Configure Gradle for CI - mkdir -p ~/.gradle - echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties - echo "org.gradle.parallel=true" >> ~/.gradle/gradle.properties - echo "org.gradle.configureondemand=true" >> ~/.gradle/gradle.properties - echo "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError" >> ~/.gradle/gradle.properties # Build debug APKs for each architecture - cd cardinal-android - touch local.properties - ./gradlew assembleArm64Debug assembleX86_64Debug --info --stacktrace --no-daemon