image: eclipse-temurin:17-jdk-jammy variables: ANDROID_COMPILE_SDK: "34" ANDROID_BUILD_TOOLS: "33.0.2" ANDROID_SDK_TOOLS: "9477386" # Keystore credentials stored as GitLab CI/CD variables KEYSTORE_PASSWORD: $KS_PASSWORD KEY_ALIAS: $KS_ALIAS KEY_PASSWORD: $KS_KEY_PASSWORD before_script: - apt-get --quiet update --yes - apt-get --quiet install --yes wget unzip - export ANDROID_HOME="${PWD}/android-sdk-root" - install -d $ANDROID_HOME - wget --no-verbose --output-document=$ANDROID_HOME/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip - unzip -q -d "$ANDROID_HOME/cmdline-tools" "$ANDROID_HOME/cmdline-tools.zip" - mv -T "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/tools" - export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/cmdline-tools/tools/bin - sdkmanager --version - yes | sdkmanager --licenses > /dev/null || true - sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" - sdkmanager "platform-tools" - sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" - chmod +x ./gradlew lintDebug: interruptible: true stage: build script: - ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint artifacts: paths: - app/lint/reports/lint-results-debug.html expose_as: "lint-report" when: always assembleDebug: interruptible: true stage: build script: - ./gradlew assembleDebug artifacts: paths: - app/build/outputs/ # Job for building signed release APK for tags containing "release" assembleRelease: stage: build script: - | if [[ "$CI_COMMIT_TAG" =~ release ]]; then echo "Downloading keystore file from GitLab secure files" curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \ --output $CI_PROJECT_DIR/app/keystore.jks \ "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/uploads/${KEYSTORE_FILE_ID}" echo "Building signed release APK" ./gradlew assembleRelease -Pandroid.injected.signing.store.file=$CI_PROJECT_DIR/app/keystore.jks \ -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \ -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ -Pandroid.injected.signing.key.password=$KEY_PASSWORD else echo "Tag '$CI_COMMIT_TAG' does not contain 'release'. Skipping release build." fi artifacts: paths: - app/build/outputs/ expire_in: never debugTests: needs: [lintDebug, assembleDebug] interruptible: true stage: test script: - ./gradlew -Pci --console=plain :app:testDebug artifacts: paths: - app/build/test-results/ publishTestResults: stage: test script: - echo "Publishing JUnit test results" needs: [debugTests] artifacts: when: always reports: junit: app/build/test-results/testDebugUnitTest/*.xml