view .circleci/config.yml @ 7399:deb8e7e6d66d

Skip redis tests if unable to communicate with the server. If the redis module is in the test environment, the redis tests will not be skipped. If connecting to redis during testing fails with a ConnectionError because there is no redis server at localhost, or if it fails with an AuthenticationError, you would fail a slew of tests. This causes the tests to report as skipped if either of the two errors occurs. It is very inefficient as it fails in setup() for the tests, but at least it does report skipping the tests. Also documented how to pass the redis password to the tests in the test part of the install docs. Future note: running tests needs proper docs in development.txt (including database setup) and a link left to that doc in installation.txt.
author John Rouillard <rouilj@ieee.org>
date Wed, 24 May 2023 12:52:53 -0400
parents b85c01544cfe
children
line wrap: on
line source

version: 2
jobs:
  ubuntu:
    docker:
      - image: circleci/buildpack-deps:20.04

      - image: circleci/postgres:12-alpine-ram
        environment:
          POSTGRES_USER: postgres
          POSTGRES_DB: circle_test

      - image: circleci/mysql:8.0-ram
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD=true
          MYSQL_ROOT_HOST=%

    resource_class: small

    working_directory: ~/repo

    steps:
      - checkout

      - run:
          name: install packages
          command: |
            sudo apt-get update
            sudo apt-get install -y libgpgme-dev default-mysql-client-core postgresql-client python3-docutils python3-gpg python3-jwt python3-markdown python3-markdown2 python3-mistune python3-mysqldb python3-pip python3-psycopg2 python3-pytest python3-pytest-cov python3-tz python3-venv python3-whoosh python3-xapian swig

      - run:
          name: setup databases
          command: |
            psql -d postgresql://postgres@localhost/circle_test -c "CREATE ROLE rounduptest WITH CREATEDB LOGIN PASSWORD 'rounduptest';"
            echo -e "[client]\nprotocol=tcp\n" >~/.my.cnf
            mysql --print-defaults
            mysql -u root -e "CREATE USER 'rounduptest'@'127.0.0.1' IDENTIFIED BY 'rounduptest'; GRANT ALL ON rounduptest.* TO 'rounduptest'@'127.0.0.1';"

      - run:
          name: run tests
          command: |
            py.test-3 -v test/ --cov=roundup --junitxml test-results/ubuntu.xml

      - run:
          name: run coverage
          command: |
            python3-coverage html -i

      - store_test_results:
          path: test-results

      - store_artifacts:
          path: htmlcov
          destination: roundup-ubuntu

  ubuntu-old:
    docker:
      - image: circleci/buildpack-deps:18.04

      - image: circleci/postgres:10-alpine-ram
        environment:
          POSTGRES_USER: postgres
          POSTGRES_DB: circle_test

      - image: circleci/mysql:5.7-ram
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD=true
          MYSQL_ROOT_HOST=%

    resource_class: small

    working_directory: ~/repo

    steps:
      - checkout

      - run:
          name: install packages
          command: |
            sudo apt-get update
            sudo apt-get install -y libgpgme-dev default-mysql-client-core postgresql-client python3-docutils python3-gpg python3-jwt python3-markdown python3-mistune python3-mysqldb python3-pip python3-psycopg2 python3-pytest python3-pytest-cov python3-tz python3-venv python3-whoosh python3-xapian swig

      - run:
          name: setup databases
          command: |
            psql -d postgresql://postgres@localhost/circle_test -c "CREATE ROLE rounduptest WITH CREATEDB LOGIN PASSWORD 'rounduptest';"
            echo -e "[client]\nprotocol=tcp\n" >~/.my.cnf
            mysql --print-defaults
            mysql -u root -e "CREATE USER 'rounduptest'@'127.0.0.1' IDENTIFIED BY 'rounduptest'; GRANT ALL ON rounduptest.* TO 'rounduptest'@'127.0.0.1';"

      - run:
          name: run tests
          command: |
            py.test-3 -v test/ --cov=roundup --junitxml test-results/ubuntu-old.xml

      - run:
          name: run coverage
          command: |
            python3-coverage html -i

      - store_test_results:
          path: test-results

      - store_artifacts:
          path: htmlcov
          destination: roundup-ubuntu-old

  debian:
    docker:
      - image: circleci/buildpack-deps:buster

      - image: circleci/postgres:11-alpine-ram
        environment:
          POSTGRES_USER: postgres
          POSTGRES_DB: circle_test

      - image: circleci/mariadb:10.3-ram
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD=true
          MYSQL_ROOT_HOST=%

    resource_class: small

    working_directory: ~/repo

    steps:
      - checkout

      - run:
          name: install packages
          command: |
            sudo apt-get update
            sudo apt-get install -y libgpgme-dev default-mysql-client-core postgresql-client python3-docutils python3-gpg python3-jwt python3-markdown python3-markdown2 python3-mistune python3-mysqldb python3-pip python3-psycopg2 python3-pytest python3-pytest-cov python3-tz python3-venv python3-whoosh python3-xapian swig

      - run:
          name: setup databases
          command: |
            psql -d postgresql://postgres@localhost/circle_test -c "CREATE ROLE rounduptest WITH CREATEDB LOGIN PASSWORD 'rounduptest';"
            echo -e "[client]\nprotocol=tcp\nhost=127.0.0.1\n" >~/.my.cnf
            mysql --print-defaults
            mysql -u root -e "CREATE USER 'rounduptest'@'127.0.0.1' IDENTIFIED BY 'rounduptest'; GRANT ALL ON rounduptest.* TO 'rounduptest'@'127.0.0.1';"
            # patch host to 127.0.0.1 to force TCP connection to MySQL
            sed -i -e 's/\(config[.]RDBMS_HOST =\) "localhost"/\1 "127.0.0.1"/' test/db_test_base.py
            sed -i -e 's/rdbms_name=\([^,]\+\),/rdbms_host=127.0.0.1,rdbms_name=\1,/' test/test_admin.py

      - run:
          name: run tests
          command: |
            py.test-3 -v test/ --cov=roundup --junitxml test-results/debian.xml

      - run:
          name: run coverage
          command: |
            python3-coverage html -i

      - store_test_results:
          path: test-results

      - store_artifacts:
          path: htmlcov
          destination: roundup-debian

workflows:
  version: 2
  test_all:
    jobs:
      - ubuntu
      - ubuntu-old
      - debian

Roundup Issue Tracker: http://roundup-tracker.org/