@@ -0,0 +1,106 @@ | |||
name: UI tests | |||
on: | |||
pull_request: | |||
workflow_dispatch: | |||
jobs: | |||
test: | |||
runs-on: ubuntu-18.04 | |||
strategy: | |||
fail-fast: false | |||
matrix: | |||
containers: [1, 2] | |||
name: UI Mariadb | |||
services: | |||
mysql: | |||
image: mariadb:10.3 | |||
env: | |||
MYSQL_ALLOW_EMPTY_PASSWORD: YES | |||
ports: | |||
- 3306:3306 | |||
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3 | |||
steps: | |||
- name: Clone | |||
uses: actions/checkout@v2 | |||
- name: Setup Python | |||
uses: actions/setup-python@v2 | |||
with: | |||
python-version: 3.7 | |||
- uses: actions/setup-node@v2 | |||
with: | |||
node-version: '12' | |||
check-latest: true | |||
- name: Add to Hosts | |||
run: | | |||
echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts | |||
echo "127.0.0.1 test_site_producer" | sudo tee -a /etc/hosts | |||
- name: Cache pip | |||
uses: actions/cache@v2 | |||
with: | |||
path: ~/.cache/pip | |||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |||
restore-keys: | | |||
${{ runner.os }}-pip- | |||
${{ runner.os }}- | |||
- name: Cache node modules | |||
uses: actions/cache@v2 | |||
env: | |||
cache-name: cache-node-modules | |||
with: | |||
path: ~/.npm | |||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | |||
restore-keys: | | |||
${{ runner.os }}-build-${{ env.cache-name }}- | |||
${{ runner.os }}-build- | |||
${{ runner.os }}- | |||
- name: Get yarn cache directory path | |||
id: yarn-cache-dir-path | |||
run: echo "::set-output name=dir::$(yarn cache dir)" | |||
- uses: actions/cache@v2 | |||
id: yarn-cache | |||
with: | |||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |||
restore-keys: | | |||
${{ runner.os }}-yarn- | |||
- name: Cache cypress binary | |||
uses: actions/cache@v2 | |||
with: | |||
path: ~/.cache | |||
key: ${{ runner.os }}-cypress- | |||
restore-keys: | | |||
${{ runner.os }}-cypress- | |||
${{ runner.os }}- | |||
- name: Install Dependencies | |||
run: bash ${GITHUB_WORKSPACE}/.github/helper/install_dependencies.sh | |||
env: | |||
BEFORE: ${{ env.GITHUB_EVENT_PATH.before }} | |||
AFTER: ${{ env.GITHUB_EVENT_PATH.after }} | |||
TYPE: 'ui' | |||
- name: Install | |||
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh | |||
env: | |||
DB: 'mariadb' | |||
TYPE: 'ui' | |||
- name: Run Set-Up | |||
if: matrix.TYPE == 'ui' | |||
run: cd ~/frappe-bench/ && bench --site test_site execute frappe.utils.install.complete_setup_wizard | |||
- name: Run Tests | |||
run: cd ~/frappe-bench/ && bench --site test_site run-ui-tests frappe --headless --parallel --ci-build-id $GITHUB_RUN_NUMBER |
@@ -565,8 +565,10 @@ def run_parallel_tests(context, app, ci_build_id, with_coverage): | |||
@click.command('run-ui-tests') | |||
@click.argument('app') | |||
@click.option('--headless', is_flag=True, help="Run UI Test in headless mode") | |||
@click.option('--parallel', is_flag=True, help="Run UI Test in parallel mode") | |||
@click.option('--ci-build-id') | |||
@pass_context | |||
def run_ui_tests(context, app, headless=False): | |||
def run_ui_tests(context, app, headless=False, parallel=True, ci_build_id=None): | |||
"Run UI tests" | |||
site = get_site(context) | |||
app_base_path = os.path.abspath(os.path.join(frappe.get_app_path(app), '..')) | |||
@@ -598,6 +600,12 @@ def run_ui_tests(context, app, headless=False): | |||
command = '{site_env} {password_env} {cypress} {run_or_open}' | |||
formatted_command = command.format(site_env=site_env, password_env=password_env, cypress=cypress_path, run_or_open=run_or_open) | |||
if parallel: | |||
formatted_command += ' --parallel' | |||
if ci_build_id: | |||
formatted_command += ' --ci-build-id {}'.format(ci_build_id) | |||
click.secho("Running Cypress...", fg="yellow") | |||
frappe.commands.popen(formatted_command, cwd=app_base_path, raise_err=True) | |||