version: 2.1 parameters: # This parameter is used to trigger the main workflow trigger: type: boolean default: true # A parameter per group backend: type: boolean default: false frontend: type: boolean default: false jobs: trigger-workflows: docker: - image: cimg/base:stable steps: - checkout - run: name: Trigger workflows command: .circleci/conditional-builds.sh backend: docker: - image: cimg/python:3.8.11 environment: PIPENV_VENV_IN_PROJECT: true steps: - checkout - restore_cache: key: pipenv-v1-{{ checksum "setup.py" }} # Only install if .venv wasn’t cached. - run: | if [[ ! -e ".venv" ]]; then pipenv install -e .[testing] fi - save_cache: key: pipenv-v1-{{ checksum "setup.py" }} paths: - .venv - run: pipenv run flake8 - run: pipenv run isort --check-only --diff . # Filter out known false positives, while preserving normal output and error codes. # See https://github.com/motet-a/jinjalint/issues/18. # And https://circleci.com/docs/2.0/configuration-reference/#default-shell-options. - run: shell: /bin/bash -e command: pipenv run jinjalint --parse-only wagtail | grep -v 'welcome_page.html:6:70' | tee /dev/tty | wc -l | grep -q '0' - run: pipenv run doc8 docs - run: DATABASE_NAME=wagtail.db pipenv run python -u runtests.py frontend: docker: - image: circleci/node:14 steps: - checkout - restore_cache: key: frontend-v1-{{ checksum "package-lock.json" }} # Only install if node_modules wasn’t cached. - run: | if [[ ! -e "node_modules" ]]; then npm install --no-save --no-optional --no-audit --no-fund --progress=false fi - save_cache: paths: - node_modules key: frontend-v1-{{ checksum "package-lock.json" }} - run: npm run dist # Save static files for subsequent jobs. - persist_to_workspace: root: ~/project paths: - wagtail - run: npm run lint:js - run: npm run lint:css - run: npm run test:unit:coverage -- --runInBand - run: bash <(curl -s https://codecov.io/bash) -F frontend ui_tests: docker: - image: cimg/python:3.8.11-browsers environment: PIPENV_VENV_IN_PROJECT: true DJANGO_SETTINGS_MODULE: wagtail.tests.settings_ui steps: - checkout - attach_workspace: at: ~/project - restore_cache: key: pipenv-v1-{{ checksum "setup.py" }} # Only install if .venv wasn’t cached. - run: | if [[ ! -e ".venv" ]]; then pipenv install -e .[testing] fi - save_cache: key: pipenv-v1-{{ checksum "setup.py" }} paths: - .venv - restore_cache: key: ui_tests-npm_integration-v1-{{ checksum "client/tests/integration/package-lock.json" }} # Only install if node_modules wasn’t cached. - run: | if [[ ! -e "client/tests/integration/node_modules" ]]; then npm --prefix ./client/tests/integration ci fi - save_cache: key: ui_tests-npm_integration-v1-{{ checksum "client/tests/integration/package-lock.json" }} paths: - client/tests/integration/node_modules - run: pipenv run ./wagtail/tests/manage.py migrate - run: command: pipenv run ./wagtail/tests/manage.py runserver 0:8000 background: true - run: pipenv run ./wagtail/tests/manage.py createcachetable - run: command: pipenv run ./wagtail/tests/manage.py createsuperuser --noinput environment: DJANGO_SUPERUSER_EMAIL: admin@example.com DJANGO_SUPERUSER_USERNAME: admin DJANGO_SUPERUSER_PASSWORD: changeme - run: command: npm run test:integration -- --runInBand --reporters=default --reporters=jest-junit environment: JEST_JUNIT_OUTPUT_DIR: reports/jest - store_test_results: path: ./reports/jest nightly-build: docker: - image: cimg/python:3.8.11 steps: - checkout - run: cd ~ && wget https://nodejs.org/dist/v14.17.5/node-v14.17.5-linux-x64.tar.gz - run: cd /usr/local/ && sudo tar --strip-components 1 -xzf ~/node-v14.17.5-linux-x64.tar.gz - run: pip install --user wheel boto3 - run: npm install - run: npm run dist - run: PYTHONPATH=. python scripts/nightly/get_version.py > __init__.py - run: mv __init__.py wagtail/__init__.py - run: python setup.py bdist_wheel - run: python scripts/nightly/upload.py workflows: version: 2 ci: when: << pipeline.parameters.trigger >> jobs: - trigger-workflows backend: when: << pipeline.parameters.backend >> jobs: - backend frontend: when: << pipeline.parameters.frontend >> jobs: - frontend - ui_tests: requires: - frontend nightly: jobs: - nightly-build triggers: - schedule: cron: "0 0 * * *" filters: branches: only: - main