Allows MixPanel to be configured per environment. The hardcoded MixPanel app ID and token are removed from the code (see the parent issue for more details). The token can be exploited and that’s by design in most analytics tools https://developer.mixpanel.com/reference/project-token. Fixes https://github.com/status-im/status-mobile/issues/21974 Areas that may be impacted - Analytics
155 lines
4.2 KiB
Groovy
155 lines
4.2 KiB
Groovy
#!/usr/bin/env groovy
|
|
library 'status-jenkins-lib@v1.9.20'
|
|
|
|
pipeline {
|
|
|
|
agent { label 'linux' }
|
|
|
|
parameters {
|
|
string(
|
|
name: 'BRANCH_NAME',
|
|
description: 'Name of the branch to checkout and build.',
|
|
defaultValue: 'develop',
|
|
)
|
|
string(
|
|
name: 'PR_ID',
|
|
description: 'ID of the Pull Request triggering this build.',
|
|
)
|
|
string(
|
|
name: 'APK_URL',
|
|
description: 'Optional, set if job require APK to be downloaded from URL.',
|
|
)
|
|
string(
|
|
name: 'KEYWORD_EXPRESSION',
|
|
description: 'This will run tests which contain names that match the given string expression (Optional)',
|
|
defaultValue: '',
|
|
)
|
|
string(
|
|
name: 'TR_CASE_IDS',
|
|
description: 'IDs of the TestRail case, separated by a comma (Optional)',
|
|
defaultValue: '',
|
|
)
|
|
/* FIXME: Remove this no longer relevant argument */
|
|
string(
|
|
name: 'APK_NAME',
|
|
description: 'OBSOLETE ARGUMENT TO BE REMOVED',
|
|
defaultValue: 'DUMMY',
|
|
)
|
|
string(
|
|
name: 'TEST_MARKERS',
|
|
description: 'Marker expression for matching tests to run.',
|
|
defaultValue: 'smoke',
|
|
)
|
|
}
|
|
|
|
options {
|
|
disableConcurrentBuilds()
|
|
timeout(time: 90, unit: 'MINUTES')
|
|
buildDiscarder(logRotator(
|
|
numToKeepStr: '10',
|
|
daysToKeepStr: '30',
|
|
artifactNumToKeepStr: '1',
|
|
))
|
|
}
|
|
|
|
environment {
|
|
/* Avoid race conditions with other builds using virtualenv. */
|
|
VIRTUAL_ENV = "${WORKSPACE_TMP}/venv"
|
|
PATH = "${VIRTUAL_ENV}/bin:${PATH}"
|
|
}
|
|
|
|
stages {
|
|
stage('Prep') {
|
|
steps { script {
|
|
currentBuild.displayName = "PR-${params.PR_ID}"
|
|
if (params.PR_ID == null) {
|
|
error("PR_ID parameter not set!")
|
|
}
|
|
} }
|
|
}
|
|
|
|
stage('Fetch') {
|
|
when { expression { !params.APK_URL } }
|
|
steps { script {
|
|
copyArtifacts(
|
|
projectName: "status-mobile/prs/android-e2e/PR-${params.PR_ID}",
|
|
/* WARNING: This copies the latest available artifact. */
|
|
selector: lastWithArtifacts(),
|
|
)
|
|
apk_path = "${env.WORKSPACE}/${utils.findFile('result/*.apk')}"
|
|
} }
|
|
}
|
|
|
|
stage('Setup') {
|
|
steps { script {
|
|
dir('test/appium') {
|
|
sh "python3 -m venv ${VIRTUAL_ENV}"
|
|
sh 'pip3 install -r requirements.txt'
|
|
}
|
|
} }
|
|
}
|
|
|
|
stage('Test') {
|
|
steps { script {
|
|
/* for managing optional arguments */
|
|
def extraPytestOpts = ''
|
|
if (params.TR_CASE_IDS != '') {
|
|
extraPytestOpts = "--run_testrail_ids='${params.TR_CASE_IDS}'"
|
|
} else {
|
|
extraPytestOpts = "-m \"${params.TEST_MARKERS}\""
|
|
}
|
|
|
|
withCredentials([
|
|
usernamePassword(
|
|
credentialsId: 'status-im-auto',
|
|
usernameVariable: 'GIT_HUB_USER', /* ignored */
|
|
passwordVariable: 'GIT_HUB_TOKEN'
|
|
),
|
|
usernamePassword(
|
|
credentialsId: 'test-rail-api',
|
|
usernameVariable: 'TESTRAIL_USER',
|
|
passwordVariable: 'TESTRAIL_PASS'
|
|
),
|
|
usernamePassword(
|
|
credentialsId: 'lambda-test-api',
|
|
usernameVariable: 'LAMBDA_TEST_USERNAME',
|
|
passwordVariable: 'LAMBDA_TEST_ACCESS_KEY'
|
|
),
|
|
string(
|
|
credentialsId: 'etherscan-api-key',
|
|
variable: 'ETHERSCAN_API_KEY'
|
|
),
|
|
string(
|
|
credentialsId: 'infura-e2e-token',
|
|
variable: 'WEB3_INFURA_PROJECT_ID'
|
|
),
|
|
file(
|
|
credentialsId: "mobile-tests-eth-accounts",
|
|
variable: 'TEST_ETH_ACCOUNTS_FILE'
|
|
),
|
|
]) {
|
|
dir('test/appium/tests') {
|
|
/* Provide Eth test account secrets. */
|
|
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
|
|
sh """
|
|
python3 -m pytest \
|
|
--numprocesses 9 \
|
|
--testrail_report=True \
|
|
-k \"${params.KEYWORD_EXPRESSION}\" \
|
|
--apk=${params.APK_URL ?: apk_path} \
|
|
--build=PR-${params.PR_ID}-${utils.timestamp()} \
|
|
--pr_number=${params.PR_ID} \
|
|
${extraPytestOpts}
|
|
"""
|
|
}
|
|
}
|
|
} }
|
|
}
|
|
}
|
|
post {
|
|
cleanup {
|
|
sh 'make purge'
|
|
}
|
|
}
|
|
}
|