view .github/workflows/ci-test.yml @ 6877:ac2b8a8f5727

fix mysql SQL to create user and grant. set max jobs in parallel add example of how to allow a python version to fail but not fail test.
author John Rouillard <rouilj@ieee.org>
date Thu, 01 Sep 2022 10:52:42 -0400
parents 30656a34e2dd
children 81d811b8d45f
line wrap: on
line source

# merged in python-package.yml workflow

name: roundup-ci

on: 
    push:
        branches: [ "master" ]
#    pull_request:
#        branches: [ "master" ]
#    schedule:
#        - cron '0 11 * * 1-5'

jobs:
  test:
    name: CI build test

    runs-on: ubuntu-latest
    # use below if running on multiple OS's.
    # runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      max-parallel: 3
      matrix:
        # Run in all these versions of Python
        python-version: [ "2.7", "3.10", "3.11.0-rc.1", "3.12" ]
        #python-version: [ "2.7", "3.10", "3.9", "3.8", "3.6" ]
    # use for multiple os or ubuntu versions
    #    os: [ubuntu-latest, macos-latest, windows-latest]
        experimental: [false]
        include:
           # example: if 3.12 fails the jobs still succeeds
           - python-version: 3.12
             experimental: true

    env:
      # get colorized pytest output even without a controlling tty
      PYTEST_ADDOPTS: "--color=yes"
      #  OS: ${{ matrix.os }}
      PYTHON_VERSION: ${{ matrix.python-version }}

    steps:
      # Checkout the latest code from the repo
      - name: Checkout source
        # if: {{ false }}
        # continue-on-error: true
        uses: actions/checkout@v3

      # Setup which version of Python to use
      - name: Set Up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v3
        with:
          python-version: ${{ matrix.python-version }}

      # Display the Python version being used
      - name: Display Python version
        run: python -c "import sys; print(sys.version)"

      # Install the databases
      - name: Install mysql/mariadb
        run: |
          set -xv
          # set up mysql database
          sudo sed -i -e '/^\[mysqld\]/,/^\[mysql/s/^#* *max_allowed_packet.*/max_allowed_packet = 500M/' /etc/mysql/mysql.conf.d/mysqld.cnf; sleep 3
          tail -n +0 /etc/mysql/my.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
          grep max_allowed /etc/mysql/mysql.conf.d/mysqld.cnf
          ls  /etc/mysql/conf.d/  /etc/mysql/mysql.conf.d/
          sleep 5
          sudo service mysql restart; sleep 30
          ps -ef | grep mysqld
          sudo netstat -anp | grep mysqld
          sudo mysql -u root -proot -e 'CREATE USER "rounduptest"@"localhost" IDENTIFIED WITH mysql_native_password BY "rounduptest"; GRANT ALL on rounduptest.* TO "rounduptest"@"localhost";'

      - name: Install postgres
        run: |
          sudo apt-get install postgresql
          # Disable fsync for speed, don't care about data durability
          #   when testing
          sudo sed -i -e '$a\fsync = off' /etc/postgresql/*/*/postgresql.conf
          sudo service postgresql restart; sleep 30
          # set up postgresql database
          sudo -u postgres psql -c "CREATE ROLE rounduptest WITH CREATEDB LOGIN PASSWORD 'rounduptest';" -U postgres

      - name: install redis
        run: |
          sudo apt-get install redis
          pip install redis

      - name: Update pip
        run: python -m pip install --upgrade pip

      - name: Install db libraries
        run: pip install psycopg2 mysqlclient

      - name: Install auxiliary packages
        run: |
          sudo apt-get install swig gpgsm libgpgme-dev
          # pygments for markdown2 to highlight code blocks
          pip install markdown2 pygments
          # docutils for ReStructuredText
          pip install beautifulsoup4 brotli docutils gpg jinja2 \
            mistune==0.8.4 pyjwt pytz whoosh

      - name: Install aux packages that need versions differences
        # if zstd fails install, keep going with test, don't abort
        run: |
          set -xv
          pip install zstd || true
          if [[ "$PYTHON_VERSION" != "2."* ]]; then 
              pip install Markdown; fi

      - name: Install xapian
        continue-on-error: true
        run: |
          sudo apt-get install libxapian-dev
          # Sphinx required to build the xapian python bindings. Use 1.8.5 on
          # older python and newest on newer.
          if [[ $PYTHON_VERSION == "2."* ]]; then pip install sphinx==1.8.5; fi
          if [[ $PYTHON_VERSION == '3.'* ]] ; then pip install sphinx; fi
          XAPIAN_VER=$(dpkg -l libxapian-dev | tail -n 1 | awk '{print $3}' | cut -d '-' -f 1); echo $XAPIAN_VER
          cd /tmp
          curl -s -O https://oligarchy.co.uk/xapian/$XAPIAN_VER/xapian-bindings-$XAPIAN_VER.tar.xz
          tar -Jxvf xapian-bindings-$XAPIAN_VER.tar.xz
          cd xapian-bindings-$XAPIAN_VER/
          if [[ $PYTHON_VERSION == "2."* ]]; then ./configure --prefix=$VIRTUAL_ENV --with-python --disable-documentation; fi
          # edit the configure script.
          # distutils.sysconfig.get_config_vars('SO')  doesn't work for
          # 3.11 or newer.
          # Change distutils.sysconfig... to just sysconfig and SO
          # to EXT_SUFFIX to get valid value.
          if [[ $PYTHON_VERSION == "3."* ]]; then sed -i -e '/PYTHON3_SO=/s/distutils\.//g' -e '/PYTHON3_SO=/s/"SO"/"EXT_SUFFIX"/g' configure; ./configure --prefix=$VIRTUAL_ENV --with-python3 --disable-documentation; fi
          case "$PYTHON_VERSION" in nightly) echo skipping xapian build;; *) make && sudo make install; esac

      - name: Install pytest and other packages needed for running tests
        run: pip install codecov flake8 pytest pytest-cov requests

      - name: Test build roundup and install locale so lang tests work.
        run: |
          sudo apt-get install gettext
          python setup.py build
          (cd locale; make local_install; ls -lR locale/de/LC_MESSAGES)

      - name: run flake8 - abort for syntax error, otherwise warn only
        run: |
            # stop the build for Python syntax errors or undefined names
            # talgettext is a utility function ignore it.
            flake8 roundup --count --select=E9,F63,F7,F82 --show-source --statistics --extend-exclude talgettext.py
            # exit-zero treats all errors as warnings.
            #   The GitHub editor is 127 chars wide
            flake8 roundup --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

      # Run the tests using pytest with test files in tests directory.
      - name: Run tests
        run: |
          if [[ "$PYTHON_VERSION" != "2."* ]]; then 
            pytest -r a \
              -W default \
              -W "ignore:SelectableGroups:DeprecationWarning" \
              -W "ignore:the imp module:DeprecationWarning:gpg.gpgme:15" \
              -W "ignore:'U' mode::docutils.io"  \
              -W "ignore:unclosed:ResourceWarning:roundup.roundup.demo" \
              -W "ignore:unclosed file:ResourceWarning:enum" \
              -v --maxfail=5 test/ --cov=roundup
          else
            # python2 case
            pytest -v -r a --maxfail=5 test/ --cov=roundup
          fi

      - name: Upload coverage to Codecov
        # see: https://github.com/codecov/codecov-action#usage
        uses: codecov/codecov-action@v3
        with:
          verbose: true

      - name: test build_doc
        run: |
          python ./setup.py build_doc

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