From e8c37d6f4bf632d4da2a05f2d7c3b05b8323e2f3 Mon Sep 17 00:00:00 2001 From: Nicolas Giard Date: Wed, 13 Jul 2022 18:57:48 -0400 Subject: [PATCH] ci: run cypress tests --- .github/workflows/build.yml | 59 ++++++++++++++++++++++++++-- dev/tests/prepare.sh | 2 +- dev/tests/settings_local.py | 76 +++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 dev/tests/settings_local.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b00091c66..643cd8beb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -94,8 +94,8 @@ jobs: # ----------------------------------------------------------------- # TESTS # ----------------------------------------------------------------- - tests: - name: Run Tests + tests-python: + name: Run Tests (Python) if: ${{ github.event.inputs.skiptests == 'false' }} needs: [prepare] runs-on: ubuntu-latest @@ -155,6 +155,59 @@ jobs: with: name: coverage path: coverage.json + + tests-cypress: + name: Run Tests (Cypress) + if: ${{ github.event.inputs.skiptests == 'false' }} + needs: [prepare] + runs-on: ubuntu-latest + container: ghcr.io/ietf-tools/datatracker-app-base:latest + + services: + db: + image: ghcr.io/ietf-tools/datatracker-db:latest + volumes: + - mariadb-data:/var/lib/mysql + env: + MYSQL_ROOT_PASSWORD: ietf + MYSQL_DATABASE: ietf_utf8 + MYSQL_USER: django + MYSQL_PASSWORD: RkTkDPFnKpko + + steps: + - uses: actions/checkout@v3 + + - name: Prepare for tests + run: | + chmod +x ./dev/tests/prepare.sh + sh ./dev/tests/prepare.sh + + - name: Ensure DB is ready + run: | + /usr/local/bin/wait-for db:3306 -- echo "DB ready" + + - name: Start Datatracker + run: | + echo "Running checks..." + ./ietf/manage.py check + echo "Starting datatracker..." + ./ietf/manage.py runserver 0.0.0.0:8000 --settings=settings_local + + - name: Ensure Datatracker is ready + run: | + /usr/local/bin/wait-for localhost:8000 -- echo "Datatracker ready" + + - name: Run all tests + run: | + echo "Running tests..." + yarn cypress + + - name: Upload Video Recordings + uses: actions/upload-artifact@v3.0.0 + if: ${{ always() }} + with: + name: videos + path: cypress/videos/ # ----------------------------------------------------------------- # RELEASE @@ -162,7 +215,7 @@ jobs: release: name: Make Release if: ${{ always() }} - needs: [tests, prepare] + needs: [tests-python, tests-cypress, prepare] runs-on: ubuntu-latest env: SHOULD_DEPLOY: ${{needs.prepare.outputs.should_deploy}} diff --git a/dev/tests/prepare.sh b/dev/tests/prepare.sh index 3b2c2a929..811a5ec9a 100644 --- a/dev/tests/prepare.sh +++ b/dev/tests/prepare.sh @@ -5,7 +5,7 @@ docker ps -a echo "Fixing permissions..." chmod -R 777 ./ echo "Copying config files..." -cp ./docker/configs/settings_local.py ./ietf/settings_local.py +cp ./dev/tests/settings_local.py ./ietf/settings_local.py echo "Ensure all requirements.txt packages are installed..." pip --disable-pip-version-check --no-cache-dir install -r requirements.txt echo "Compiling native node packages..." diff --git a/dev/tests/settings_local.py b/dev/tests/settings_local.py new file mode 100644 index 000000000..2b3d54138 --- /dev/null +++ b/dev/tests/settings_local.py @@ -0,0 +1,76 @@ +# Copyright The IETF Trust 2007-2019, All Rights Reserved +# -*- coding: utf-8 -*- + +from ietf.settings import * # pyflakes:ignore + +ALLOWED_HOSTS = ['*'] + +DATABASES = { + 'default': { + 'HOST': 'db', + 'PORT': 3306, + 'NAME': 'ietf_utf8', + 'ENGINE': 'django.db.backends.mysql', + 'USER': 'django', + 'PASSWORD': 'RkTkDPFnKpko', + 'OPTIONS': { + 'sql_mode': 'STRICT_TRANS_TABLES', + 'init_command': 'SET storage_engine=InnoDB; SET names "utf8"', + }, + }, +} + +DATABASE_TEST_OPTIONS = { + 'init_command': 'SET storage_engine=InnoDB', +} + +IDSUBMIT_IDNITS_BINARY = "/usr/local/bin/idnits" +IDSUBMIT_REPOSITORY_PATH = "test/id/" +IDSUBMIT_STAGING_PATH = "test/staging/" +INTERNET_DRAFT_ARCHIVE_DIR = "test/archive/" +INTERNET_ALL_DRAFTS_ARCHIVE_DIR = "test/archive/" +RFC_PATH = "test/rfc/" + +AGENDA_PATH = '/assets/www6s/proceedings/' +MEETINGHOST_LOGO_PATH = AGENDA_PATH + +USING_DEBUG_EMAIL_SERVER=True +EMAIL_HOST='localhost' +EMAIL_PORT=2025 + +MEDIA_BASE_DIR = '/assets' +MEDIA_ROOT = MEDIA_BASE_DIR + '/media/' +MEDIA_URL = '/media/' + +PHOTOS_DIRNAME = 'photo' +PHOTOS_DIR = MEDIA_ROOT + PHOTOS_DIRNAME + +SUBMIT_YANG_CATALOG_MODEL_DIR = '/assets/ietf-ftp/yang/catalogmod/' +SUBMIT_YANG_DRAFT_MODEL_DIR = '/assets/ietf-ftp/yang/draftmod/' +SUBMIT_YANG_INVAL_MODEL_DIR = '/assets/ietf-ftp/yang/invalmod/' +SUBMIT_YANG_IANA_MODEL_DIR = '/assets/ietf-ftp/yang/ianamod/' +SUBMIT_YANG_RFC_MODEL_DIR = '/assets/ietf-ftp/yang/rfcmod/' + +# Set INTERNAL_IPS for use within Docker. See https://knasmueller.net/fix-djangos-debug-toolbar-not-showing-inside-docker +import socket +hostname, _, ips = socket.gethostbyname_ex(socket.gethostname()) +INTERNAL_IPS = [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips] + +# DEV_TEMPLATE_CONTEXT_PROCESSORS = [ +# 'ietf.context_processors.sql_debug', +# ] + +DOCUMENT_PATH_PATTERN = '/assets/ietf-ftp/{doc.type_id}/' +INTERNET_DRAFT_PATH = '/assets/ietf-ftp/internet-drafts/' +RFC_PATH = '/assets/ietf-ftp/rfc/' +CHARTER_PATH = '/assets/ietf-ftp/charter/' +BOFREQ_PATH = '/assets/ietf-ftp/bofreq/' +CONFLICT_REVIEW_PATH = '/assets/ietf-ftp/conflict-reviews/' +STATUS_CHANGE_PATH = '/assets/ietf-ftp/status-changes/' +INTERNET_DRAFT_ARCHIVE_DIR = '/assets/ietf-ftp/internet-drafts/' +INTERNET_ALL_DRAFTS_ARCHIVE_DIR = '/assets/ietf-ftp/internet-drafts/' + +NOMCOM_PUBLIC_KEYS_DIR = 'data/nomcom_keys/public_keys/' +SLIDE_STAGING_PATH = 'test/staging/' + +DE_GFM_BINARY = '/usr/local/bin/de-gfm'