name: test on: push: branches-ignore: [deploy] pull_request: branches: [master] jobs: test: runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} strategy: matrix: os: [ubuntu-latest] python-version: ['3.10', '3.11', '3.12'] deps: [newest-deps] experimental: [false] include: - os: ubuntu-latest python-version: '3.11' deps: minimal-deps experimental: false - os: macos-latest python-version: '3.11' deps: newest-deps experimental: true fail-fast: false steps: - name: Checkout code uses: actions/checkout@v4 # experimental targets generally lack lxml wheels - name: Install libxml2 and libxslt development packages if: ${{ matrix.experimental && matrix.os != 'macos-latest' }} run: sudo apt install libxml2-dev libxslt-dev python3-dev # macos needs newer bash - name: Install macos deps if: ${{ matrix.os == 'macos-latest' }} run: | brew install bash gnu-sed # enable gnu-sed usage as "sed" echo "/usr/local/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH - name: Install non-python deps if: ${{ matrix.os == 'ubuntu-latest' }} run: | sudo apt install cpanminus # dep for perl checks sudo cpanm --quiet --notest Gentoo::PerlMod::Version - name: Pin dependencies to minimal versions if: ${{ matrix.deps == 'minimal-deps' }} run: sed -e '/^requires-python/!s/~=/==/' -i pyproject.toml - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' cache-dependency-path: pyproject.toml - name: Install dependencies run: | python -m pip install --upgrade pip pip install ".[test]" pytest-github-actions-annotate-failures - name: Test with pytest env: PY_COLORS: 1 # forcibly enable pytest colors run: pytest --cov --cov-report=term --cov-report=xml -v - name: Submit code coverage to codecov if: ${{ matrix.os == 'ubuntu-latest' }} uses: codecov/codecov-action@v3 with: files: ./coverage.xml lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python 3 uses: actions/setup-python@v5 with: python-version: '3.x' - name: Install dependencies run: | python -m pip install --upgrade pip pip install . pylint - name: Run linting tools run: pylint --exit-zero src/pkgcheck format: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - uses: psf/black@stable