# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions # Derived from stock python-package.yml name: CI on: [push, pull_request] jobs: linter: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.x"] steps: - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt -r test-requirements.txt setuptools - name: Lint run: | pylint --output-format colorized --rcfile .pylintrc \ bugzilla-cli setup.py bugzilla examples tests test_3_6: # python 3.6 is for rhel/centos8/sles15 compat runs-on: ubuntu-latest container: image: python:3.6 steps: - uses: actions/checkout@v6 - name: Install dependencies run: | python -m pip install --upgrade pip pip install pytest pip install -r requirements.txt -r test-requirements.txt - name: Test with pytest run: | pytest test: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest pytest-cov pip install -r requirements.txt -r test-requirements.txt - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest and generate coverage report run: | pytest --cov --cov-report=xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} # Run functional tests integration: runs-on: ubuntu-latest services: mariadb: image: mariadb:latest env: MARIADB_USER: bugs MARIADB_DATABASE: bugs MARIADB_PASSWORD: secret MARIADB_ROOT_PASSWORD: supersecret ports: - 3306:3306 bugzilla: image: ghcr.io/crazyscientist/bugzilla:test ports: - 80:80 strategy: matrix: python-version: ["3.x"] steps: - uses: actions/checkout@v6 - name: Install MariaDB utils run: sudo apt install --no-install-recommends -q -y mariadb-client - name: Restore DB dump run: mariadb -h 127.0.0.1 -P 3306 --password=secret -u bugs bugs < tests/services/bugs.sql - name: Store API key run: | mkdir -p ~/.config/python-bugzilla/ cp tests/services/bugzillarc ~/.config/python-bugzilla/ - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install pytest pytest-cov pip install -r requirements.txt -r test-requirements.txt - name: Test with pytest run: pytest --ro-integration --rw-integration env: BUGZILLA_URL: http://localhost # Build and install on Windows windows: runs-on: windows-latest strategy: matrix: python-version: ["3.x"] steps: - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Build tarball & install run: | python setup.py sdist pip install --find-links dist python-bugzilla