Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51e8add0 authored by Nishith  Khanna's avatar Nishith Khanna
Browse files

Merge branch '000-main-pre-hook-ai-review' into 'main'

Add pre hook for code quality analysis

See merge request !736
parents 458fcc5e 4c20e789
Loading
Loading
Loading
Loading
Loading
+68 −70
Original line number Original line Diff line number Diff line
image: registry.gitlab.e.foundation/e/os/docker-android-apps-cicd:latest
image: registry.gitlab.e.foundation/e/os/docker-android-apps-cicd:latest


workflow:
  auto_cancel:
    on_new_commit: interruptible

variables:
variables:
  GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
  GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  SENTRY_DSN: $SENTRY_DSN
  SENTRY_DSN: $SENTRY_DSN
  APK_PATH: "app/build/outputs/apk/release"
  APK_PATH: "app/build/outputs/apk/release"
  UNSIGNED_APK: "AppLounge_release.apk"
  UNSIGNED_APK: "AppLounge_release.apk"
@@ -12,6 +17,7 @@ variables:
stages:
stages:
  - auto-merge-main
  - auto-merge-main
  - build
  - build
  - code-quality
  - ai-review
  - ai-review
  - publish
  - publish


@@ -33,109 +39,107 @@ before_script:
  - export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
  - export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
  - echo user_agent=$USER_AGENT > local.properties
  - echo user_agent=$USER_AGENT > local.properties


.rules_merge_request_ref:
.prod_apk_rules: &prod_apk_rules
  rules: &rules_merge_request_ref
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: never
    - if: $CI_COMMIT_TAG
    - when: always
    - when: never

  interruptible: false
.rules_protected_ref:
  allow_failure: false
  rules: &rules_protected_ref
  cache:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
    key: ${CI_PROJECT_ID}
      when: never
    paths:
    - if: '$CI_COMMIT_REF_PROTECTED == "true"'
      - .gradle/
      when: always
    policy: pull-push
    - when: manual


.rules_manual_ref:
.merge_request_rules: &merge_request_rules
  rules: &rules_manual_ref
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: never
    - when: never
    - when: manual
  interruptible: true
  allow_failure: false
  cache:
    key: ${CI_PROJECT_ID}
    paths:
      - .gradle/
    policy: pull


.rules_protected_tag:
.rules_protected_tag:
  rules: &rules_protected_tag
  rules: &rules_protected_tag
    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
      when: always
      when: always
    - when: never
    - when: never
  interruptible: false
  allow_failure: false


.rules_protected_tag_manual:
.rules_protected_tag_manual:
  rules: &rules_protected_tag_manual
  rules: &rules_protected_tag_manual
    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
    - if: '$CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED == "true"'
      when: manual
      when: manual
    - when: never
    - when: never
  interruptible: false
  allow_failure: true


.rules_publish:
.rules_publish:
  rules: &rules_publish
  rules: &rules_publish
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual
      when: manual
    - if: '$CI_COMMIT_TAG !~ "/^$/"'
    - if: $CI_COMMIT_TAG
      when: always
      when: always
  interruptible: false
  allow_failure: true


.build:
.build:
  stage: build
  stage: build
  rules: *rules_merge_request_ref
  script:
  script:
    - ./gradlew testReleaseUnitTest jacocoReleaseReport -PtestAccountName="$testAccountName" -PtestAccountPwd="$testAccountPwd" -PtestServerUrl="$testServerUrl" lintRelease detekt assembleRelease --parallel --build-cache --configure-on-demand --no-daemon
    - ./gradlew assembleRelease
    - python3 scripts/print_instruction_coverage.py app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml
  coverage: "/Total.*?([0-9]{1,3})%/"
  artifacts:
  artifacts:
    paths:
    paths:
      - app/build/outputs/apk/release
      - app/build/outputs/apk/release
      - app/build/reports/
      - build/reports/
      - app/build/test-results/*/TEST-*.xml
    reports:
      junit: app/build/test-results/*/TEST-*.xml
      coverage_report:
        coverage_format: jacoco
        path: app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml


build-release:
build-apk-mr:
  extends: .build
  extends: .build
  rules: *rules_protected_ref
  <<: *merge_request_rules
  allow_failure: false
  cache:
    key: ${CI_PROJECT_ID}
    paths:
      - .gradle/
    policy: pull


build-generate-cache:
build-apk-prod:
  extends: .build
  extends: .build
  allow_failure: true
  <<: *prod_apk_rules
  rules:
    - when: manual
  cache:
    key: ${CI_PROJECT_ID}
    paths:
      - .gradle/
    policy: pull-push


build-debug:
analysis:
  stage: build
  stage: code-quality
  cache:
  <<: *merge_request_rules
    key: ${CI_PROJECT_ID}
  needs:
    paths:
    - build-apk-mr
      - .gradle/
    policy: pull
  allow_failure: true
  rules:
    - when: manual
  script:
  script:
    - ./gradlew lintDebug assembleDebug --parallel
    - ./gradlew detekt lintRelease
  artifacts:
  artifacts:
    paths:
    paths:
      - app/build/outputs/apk/debug
      - app/build/reports/
      - app/build/reports/
      - build/reports/
      - build/reports/


tests:
  stage: code-quality
  <<: *merge_request_rules
  needs:
    - build-apk-mr
  script:
    - ./gradlew testReleaseUnitTest jacocoReleaseReport -PtestAccountName="$testAccountName" -PtestAccountPwd="$testAccountPwd" -PtestServerUrl="$testServerUrl"
    - python3 scripts/print_instruction_coverage.py app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml
  coverage: "/Total.*?([0-9]{1,3})%/"
  artifacts:
    paths:
      - app/build/test-results/*/TEST-*.xml
    reports:
      junit: app/build/test-results/*/TEST-*.xml
      coverage_report:
        coverage_format: jacoco
        path: app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml

generate-apks:
generate-apks:
  stage: build
  stage: build
  rules: *rules_manual_ref
  <<: *prod_apk_rules
  allow_failure: true
  needs:
  needs:
    - job: build-release
    - job: build-apk-prod
  script:
  script:
    - |
    - |
      git clone https://gitlab.e.foundation/e/os/system-apps-update-info.git systemAppsUpdateInfo
      git clone https://gitlab.e.foundation/e/os/system-apps-update-info.git systemAppsUpdateInfo
@@ -188,24 +192,18 @@ create-release:
    - |
    - |
      ./systemAppsUpdateInfo/scripts/create-release.sh \
      ./systemAppsUpdateInfo/scripts/create-release.sh \
      "$APK_PATH" "$UNSIGNED_APK" "$COMMUNITY_APK" "$OFFICIAL_APK"
      "$APK_PATH" "$UNSIGNED_APK" "$COMMUNITY_APK" "$OFFICIAL_APK"
  allow_failure: true


publish-authdatalib:
publish-authdatalib:
  stage: publish
  stage: publish
  needs:
    - job: build-release
  rules: *rules_publish
  rules: *rules_publish
  script:
  script:
    - ./gradlew :auth-data-lib:build
    - ./gradlew :auth-data-lib:build
    - ./gradlew :auth-data-lib:publish
    - ./gradlew :auth-data-lib:publish
  allow_failure: true


publish-contracts:
publish-contracts:
  stage: publish
  stage: publish
  needs:
  interruptible: false
    - job: build-release
  rules: *rules_publish
  rules: *rules_publish
  script:
  script:
    - ./gradlew :parental-control-data:build
    - ./gradlew :parental-control-data:build
    - ./gradlew :parental-control-data:publish
    - ./gradlew :parental-control-data:publish
  allow_failure: true
+16 −0
Original line number Original line Diff line number Diff line
@@ -46,3 +46,19 @@ tasks.register('clean', Delete) {
    delete rootProject.buildDir
    delete rootProject.buildDir
}
}


tasks.register('installGitHooks', Copy) {
    description = 'Installs git hooks from scripts/hooks into .git/hooks'
    group = 'setup'

    from("${rootProject.rootDir}/scripts/hooks")
    into("${rootProject.rootDir}/.git/hooks")
    fileMode = 0755
}

gradle.projectsEvaluated {
    subprojects {
        tasks.matching { it.name == 'preBuild' }.configureEach {
            dependsOn rootProject.tasks.named('installGitHooks')
        }
    }
}
+5 −1
Original line number Original line Diff line number Diff line
@@ -21,3 +21,7 @@ android.enableJetifier=true
kotlin.code.style=official
kotlin.code.style=official
android.nonTransitiveRClass=false
android.nonTransitiveRClass=false
android.nonFinalResIds=false
android.nonFinalResIds=false

org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true

scripts/hooks/pre-push

0 → 100644
+21 −0
Original line number Original line Diff line number Diff line
#!/usr/bin/env bash
echo "🔍 Running Detekt..."
./gradlew detekt
DETEKT_EXIT=$?

if [ $DETEKT_EXIT -ne 0 ]; then
  echo "❌ Push rejected: fix Detekt issues before pushing."
  exit 1
fi

echo "🔍 Running Lint..."
./gradlew lintRelease
LINT_EXIT=$?

if [ $LINT_EXIT -ne 0 ]; then
  echo "❌ Push rejected: fix Lint issues before pushing."
  exit 1
fi

echo "✅ All checks passed!"
exit 0