#!/usr/bin/env groovy library 'status-jenkins-lib@v1.7.9' pipeline { agent { label 'linux' } parameters { string( name: 'APK_URL', description: 'URL of APK uploaded to SauceLabs.', ) string( name: 'KEYWORD_EXPRESSION', description: 'This will run tests which contain names that match the given string expression (Optional)', defaultValue: '', ) } options { disableConcurrentBuilds() } stages { stage('Fetch') { when { expression { !params.APK_URL } } steps { script { copyArtifacts( projectName: "status-mobile/nightly", filter: '*-x86.apk', /* WARNING: This copies the latest available artifact. */ selector: lastWithArtifacts(), ) apk_path = "${env.WORKSPACE}/${utils.findFile('*-x86.apk')}" } } } stage('Setup') { steps { script { dir('test/appium') { sh 'pip3 install --user -r requirements.txt' } } } } stage('Test') { steps { withCredentials([ usernamePassword( credentialsId: 'test-rail-api', usernameVariable: 'TESTRAIL_USER', passwordVariable: 'TESTRAIL_PASS' ), usernamePassword( credentialsId: 'sauce-labs-api', usernameVariable: 'SAUCE_USERNAME', passwordVariable: 'SAUCE_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 accounts secrets. */ sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py' sh """ python3 -m pytest \ --numprocesses 4 \ --rerun_count=2 \ --testrail_report=True \ -m testrail_id \ -m \"new_ui_critical or new_ui_medium\" \ -k \"${params.KEYWORD_EXPRESSION}\" \ --apk=${params.APK_URL ?: apk_path} """ } } } } } post { always { script { sauce('sauce-labs-cred') { saucePublisher() } } } success { script { junit( testDataPublishers: [[$class: 'SauceOnDemandReportPublisher', jobVisibility: 'public']], testResults: 'test/appium/tests/*.xml' ) } } cleanup { sh 'make purge' } } }