proton-mail-android/.gitlab-ci.yml

347 lines
8.6 KiB
YAML
Raw Normal View History

2020-04-21 10:43:05 +00:00
default:
2020-12-04 11:54:10 +00:00
image: $CI_REGISTRY/protonvpn/android/android-app-new:latest
2020-04-21 10:43:05 +00:00
before_script:
- export JAVA_TOOL_OPTIONS="-Dhttp.proxyHost=$( echo ${http_proxy##http://} | cut -d':' -f1 ) -Dhttp.proxyPort=$( echo ${http_proxy##http://} | cut -d':' -f2 ) -Dhttps.proxyHost=$( echo ${https_proxy##http://} | cut -d':' -f1 ) -Dhttps.proxyPort=$( echo ${https_proxy##http://} | cut -d':' -f2 ) -Dhttp.nonProxyHosts=\"$( echo $no_proxy | tr ',' '|' )\""
# - echo -e "y\ny\ny\ny\ny\ny\ny\ny\n" | $ANDROID_HOME/tools/bin/sdkmanager --licenses --proxy=http --proxy_host=$( echo ${https_proxy##http://} | cut -d':' -f1 ) --proxy_port=$( echo ${https_proxy##http://} | cut -d':' -f2 )
2020-04-21 10:43:05 +00:00
- export GRADLE_USER_HOME=`pwd`/.gradle
- export VERSION_NAME=$(grep -E "versionName " buildSrc/src/main/kotlin/ProtonMail.kt | awk '{print $5}' | sed s/\"//g)
- export VERSION_CODE=$(grep -E "versionCode " buildSrc/src/main/kotlin/ProtonMail.kt | awk '{print $5}' | sed s/\"//g)
2020-04-21 10:43:05 +00:00
- echo "App version name ${VERSION_NAME}"
- echo "App version name ${VERSION_CODE}"
cache:
2020-12-04 11:54:10 +00:00
key: ${CI_COMMIT_REF_SLUG}
2020-04-21 10:43:05 +00:00
paths:
2020-12-04 11:54:10 +00:00
- .gradle
- '**/build'
- '**/**/build'
- '**/**/**/build'
2020-04-21 10:43:05 +00:00
stages:
2020-10-14 15:05:15 +00:00
- manual-release
2020-04-21 10:43:05 +00:00
- analyze
- build
- test
- bot-i18n
- bot-release
#####################
.detekt-analysis-common:
2020-04-21 10:43:05 +00:00
stage: analyze
tags:
- medium
2020-04-21 10:43:05 +00:00
script:
- ./gradlew multiModuleDetekt
2020-04-21 10:43:05 +00:00
artifacts:
reports:
codequality: config/detekt/reports/mergedReport.json
2020-04-21 10:43:05 +00:00
detekt analysis release:
extends: .detekt-analysis-common
allow_failure: true
only:
- release
- prerelease
- tags
except:
- schedules
detekt analysis:
extends: .detekt-analysis-common
2020-11-23 09:15:18 +00:00
only:
refs:
- merge_requests
- branches
- schedules
except:
- release
- prerelease
- tags
.build-debug-common:
2020-04-21 10:43:05 +00:00
stage: build
2020-11-23 09:15:18 +00:00
only:
- merge_requests
- branches
- schedules
2020-04-21 10:43:05 +00:00
tags:
2020-11-23 09:15:18 +00:00
- large
2020-04-21 10:43:05 +00:00
script:
- ./gradlew assembleBetaDebug
- ./gradlew assembleBetaDebugAndroidTest
2020-04-21 10:43:05 +00:00
artifacts:
expire_in: 1 week
paths:
- app/build/outputs/apk
build debug:
extends: .build-debug-common
needs:
- job: detekt analysis
except:
- develop
- release
- prerelease
- tags
- schedules
build debug develop:
extends: .build-debug-common
needs:
- job: detekt analysis
only:
- develop
script:
- ./gradlew clean
- ./gradlew assembleBetaDebug
- ./gradlew assembleBetaDebugAndroidTest
build debug uitests:
extends: .build-debug-common
only:
- schedules
build debug release:
extends: .build-debug-common
only:
- release
- prerelease
- tags
2020-04-21 10:43:05 +00:00
build prerelease:
stage: build
except:
- schedules
2020-04-21 10:43:05 +00:00
only:
- prerelease
2020-07-06 10:06:04 +00:00
- tags
2020-04-21 10:43:05 +00:00
tags:
2020-11-23 09:15:18 +00:00
- large
2020-04-21 10:43:05 +00:00
script:
- ./gradlew clean
2020-04-21 10:43:05 +00:00
- ./gradlew assemblePlaystoreReleasePlayStore
artifacts:
expire_in: 3 week
paths:
- app/build/outputs
build release:
stage: build
except:
- schedules
2020-04-21 10:43:05 +00:00
only:
- releases
tags:
2020-11-23 09:15:18 +00:00
- large
2020-04-21 10:43:05 +00:00
script:
- ./gradlew clean
2020-04-21 10:43:05 +00:00
- ./gradlew assemblePlaystoreReleasePlayStore
artifacts:
expire_in: 4 week
paths:
- app/build/outputs
.unit-tests-common:
2020-04-21 10:43:05 +00:00
stage: test
2020-11-23 09:15:18 +00:00
only:
- merge_requests
- branches
except:
- schedules
2020-04-21 10:43:05 +00:00
tags:
2020-11-23 09:15:18 +00:00
- large
2020-04-21 10:43:05 +00:00
script:
- ./gradlew -Pci --console=plain allTest
2020-04-21 10:43:05 +00:00
unit tests:
extends: .unit-tests-common
2020-11-23 09:15:18 +00:00
needs:
- job: build debug
except:
- develop
- release
- prerelease
- tags
- schedules
unit tests develop:
extends: .unit-tests-common
needs:
- job: build debug develop
only:
- develop
unit tests release:
extends: .unit-tests-common
only:
- release
- prerelease
- tags
.firebase-tests-common:
stage: test
2020-11-23 09:15:18 +00:00
only:
- merge_requests
- branches
except:
- schedules
2020-11-23 09:15:18 +00:00
tags:
- medium
script:
- wget --quiet --output-document=/tmp/google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/google-cloud-sdk.tar.gz
- mkdir -p /opt
- tar zxf /tmp/google-cloud-sdk.tar.gz --directory /opt
- /opt/google-cloud-sdk/install.sh --quiet
- source /opt/google-cloud-sdk/path.bash.inc
- gcloud components update
- echo $CLOUD_PROJECT_ID_MAIL
- gcloud config set project $CLOUD_PROJECT_ID_MAIL
- echo $SERVICE_ACCOUNT_MAIL > /tmp/service-account.json
- gcloud auth activate-service-account --key-file /tmp/service-account.json
- gcloud firebase test android run
--app app/build/outputs/apk/beta/debug/ProtonMail-Android-${VERSION_NAME}-beta-debug.apk
--test app/build/outputs/apk/androidTest/beta/debug/ProtonMail-Android-${VERSION_NAME}-beta-debug-androidTest.apk
--device model=Pixel2,version=28
--test-targets "class ch.protonmail.android.uitests.tests.suites.SmokeSuite"
--use-orchestrator
--num-flaky-test-attempts=1
--timeout 30m
firebase tests:
extends: .firebase-tests-common
needs:
- job: build debug
except:
- develop
- release
- prerelease
- tags
- schedules
firebase tests develop:
extends: .firebase-tests-common
needs:
- job: build debug develop
only:
- develop
firebase tests release:
extends: .firebase-tests-common
only:
- release
- prerelease
- tags
firebase feature tests:
stage: test
needs:
- job: build debug uitests
rules:
- if: '$TEST_TYPE == "feature" || $TEST_TYPE == "regression"'
2020-11-23 09:15:18 +00:00
tags:
- medium
variables:
MODEL: ""
script:
- if [ -z ${DEVICE_MODEL+x} ]; then MODEL="Pixel2"; else MODEL=$DEVICE_MODEL; fi
- wget --quiet --output-document=/tmp/google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/google-cloud-sdk.tar.gz
- mkdir -p /opt
- tar zxf /tmp/google-cloud-sdk.tar.gz --directory /opt
- /opt/google-cloud-sdk/install.sh --quiet
- source /opt/google-cloud-sdk/path.bash.inc
- gcloud components update
- echo $CLOUD_PROJECT_ID_MAIL
- gcloud config set project $CLOUD_PROJECT_ID_MAIL
- echo $SERVICE_ACCOUNT_MAIL > /tmp/service-account.json
- gcloud auth activate-service-account --key-file /tmp/service-account.json
- export CLOUDSDK_CORE_DISABLE_PROMPTS=1
- gcloud beta --quiet firebase test android run
--app app/build/outputs/apk/beta/debug/ProtonMail-Android-${VERSION_NAME}-beta-debug.apk
--test app/build/outputs/apk/androidTest/beta/debug/ProtonMail-Android-${VERSION_NAME}-beta-debug-androidTest.apk
--device model=$MODEL,version=$API_LEVEL
--test-targets "class ch.protonmail.android.uitests.tests.$TEST_CLASS"
--use-orchestrator
--num-flaky-test-attempts=1
--timeout 45m
--client-details testType=$TEST_TYPE,testSuite=$TEST_CLASS,commitBranch=$CI_COMMIT_BRANCH,gitlabJobUrl=$CI_JOB_URL
2020-04-21 10:43:05 +00:00
include:
- project: 'translations/generator'
ref: master
file: '/jobs/sync-crowdin.gitlab-ci.yml'
- project: 'translations/generator'
ref: master
file: '/jobs/commit-locales.gitlab-ci.yml'
- project: 'agarroux/publish-github'
ref: master
file: '/jobs/release.gitlab-ci.yml'
i18n-sync-crowdin:
stage: bot-i18n
variables:
I18N_SYNC_CROWDIN_PROJECT: 'android-mail'
2020-04-21 10:43:05 +00:00
extends: .i18n-sync-crowdin-shared
except:
variables:
- $TEST_TYPE == "feature" || $TEST_TYPE == "regression"
2020-04-21 10:43:05 +00:00
i18n-commit-locales:
stage: bot-i18n
variables:
I18N_COMMIT_CROWDIN_PROJECT: 'android-mail'
2020-04-21 10:43:05 +00:00
extends: .i18n-commit-locales-shared
except:
variables:
- $TEST_TYPE == "feature" || $TEST_TYPE == "regression"
2020-04-21 10:43:05 +00:00
release-publish-github:
2020-10-14 15:05:15 +00:00
stage: manual-release
2020-04-21 10:43:05 +00:00
when: 'manual'
variables:
RELEASE_SYNC_PUBLIC_URL: git@github.com:ProtonMail/proton-mail-android.git
RELEASE_SYNC_TO_BRANCH: 'release'
RELEASE_SYNC_FROM_BRANCH: 'release'
extends: .release-sync-commit-shared
2020-11-23 09:15:18 +00:00
tags:
2020-12-04 11:54:10 +00:00
- small
2020-04-21 10:43:05 +00:00
release-publish-github-tags:
needs:
- job: build prerelease
artifacts: true
2020-04-21 10:43:05 +00:00
stage: bot-release
variables:
RELEASE_SYNC_PUBLIC_URL: git@github.com:ProtonMail/proton-mail-android.git
RELEASE_SYNC_TO_BRANCH: 'release'
RELEASE_SYNC_FROM_BRANCH: 'release'
extends: .release-sync-tags-shared
2020-11-23 09:15:18 +00:00
tags:
2020-12-04 11:54:10 +00:00
- small
publish-github:
stage: bot-release
needs:
- job: build prerelease
artifacts: true
variables:
RELEASE_APP: android-mail
RELEASE_GITHUB_REPOSITORY: ProtonMail/proton-mail-android
RELEASE_GITHUB_BRANCH: 'release'
extends: .release-make-release
2020-11-23 09:15:18 +00:00
tags:
2020-12-04 11:54:10 +00:00
- small
2020-11-23 09:15:18 +00:00
check for fixups:
stage: analyze
only:
- merge_requests
script:
- git fetch origin "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"
- git fetch origin "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"
- git log --pretty=%s "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME..origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" | awk '$0 ~ /^fixup/ {find = 1}; END { exit find }'