Skip to content

ci: add workflow_call to code analysis workflows #238

ci: add workflow_call to code analysis workflows

ci: add workflow_call to code analysis workflows #238

Workflow file for this run

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions and Operating Systems
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Test Changes
on:
push:
branches: [ "master" ]
pull_request:
types: [opened, reopened, synchronize, ready_for_review] # labeled
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
type: choice
options:
- info
- warning
- debug
# tags:
# description: 'Test scenario tags'
# required: false
# type: boolean
# environment:
# description: 'Environment to run tests against'
# type: environment
# required: true
jobs:
run-guard:
# it succeeds if any of the following conditions are met:
# - when the PR is not a draft and is not labeled 'prevent-ci'
# - when the PR is labeled 'force-ci'
runs-on: ubuntu-latest
if: |
( (!github.event.pull_request.draft) &&
(github.event.action != 'labeled') &&
(!contains( github.event.pull_request.labels.*.name, 'prevent-ci')) )
|| ((github.event.action != 'labeled') && contains( github.event.pull_request.labels.*.name, 'force-ci'))
|| (github.event.label.name == 'force-ci')
steps:
- name: Checking if CI shoud run for this push/PR...
run: echo Resuming CI. Continuing next jobs...
test-source-code:
needs: run-guard
strategy:
fail-fast: false
matrix:
os: [ "ubuntu-latest", "windows-latest", "macos-latest" ]
python: ['3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
include:
- python: '2.7'
os: "ubuntu-latest"
runs-on: "${{ matrix.os }}"
env:
testing: simple
python_eol: no
steps:
- name: Determine what scope of testing is available on ${{ matrix.os }}
if: |
(matrix.python >= '3.' ) && ( matrix.os != 'windows-latest' )
run: |
echo 'testing=full' >> $GITHUB_ENV
- name: Determine if the python ${{ matrix.python }} is available on ${{ matrix.os }}
if: |
(matrix.python < '3.' ) || ( matrix.python == '3.6' && matrix.os == 'ubuntu-latest' )
run: |
echo 'python_eol=yes' >> $GITHUB_ENV
- name: Checkout source code
uses: actions/checkout@v4
- name: Install linux tools
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends python3-h5py
- name: Set up Python ${{ matrix.python }}
if: env.python_eol == 'no'
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Set up Python ${{ matrix.python }} discontinued on ${{ matrix.os }}
if: env.python_eol == 'yes'
uses: MatteoH2O1999/setup-python@v3
with:
python-version: ${{ matrix.python }}
cache: pip
- name: Install test dependencies
run: |
python -m pip install --upgrade pip
python -m pip install --prefer-binary -r requirements-tests.txt
- name: Setup environment variables for remote filesystem testing
if: matrix.os == 'ubuntu-latest' && matrix.python == '3.8'
run: |
echo "Setup SMB environment variable to trigger testing in Petl"
echo 'PETL_TEST_SMB=smb://WORKGROUP;petl:test@localhost/public/' >> $GITHUB_ENV
echo "Setup SFTP environment variable to trigger testing in Petl"
echo 'PETL_TEST_SFTP=sftp://petl:test@localhost:2244/public/' >> $GITHUB_ENV
echo "::group::Install remote test dependencies"
python -m pip install --prefer-binary -r requirements-remote.txt
echo "::endgroup::"
- name: Install optional test dependencies for mode ${{ env.testing }}
if: matrix.os == 'ubuntu-latest' && matrix.python >= '3.7'
env:
DISABLE_BLOSC_AVX2: 1
run: |
echo "::group::Install tricky test dependencies"
if ! pip install --prefer-binary -r requirements-optional.txt ; then
echo 'Dismissed failure installing some optional package. Resuming tests...'
fi
# DISABLE_BLOSC_AVX2=1 && export DISABLE_BLOSC_AVX2
# pip install --prefer-binary bcolz
echo "::endgroup::"
- name: Install containers for remote filesystem testing
if: matrix.os == 'ubuntu-latest' && matrix.python == '3.8'
run: |
echo "::group::Setup docker for SMB at: ${{ env.PETL_TEST_SMB }}$"
docker run -it --name samba -p 139:139 -p 445:445 -d "dperson/samba" -p -u "petl;test" -s "public;/public-dir;yes;no;yes;all"
echo "::endgroup::"
echo "::group::Setup docker for SFTP at: ${{ env.PETL_TEST_SFTP }}$"
docker run -it --name sftp -p 2244:22 -d atmoz/sftp petl:test:::public
echo "::endgroup::"
- name: Install containers for remote database testing
if: matrix.os == 'ubuntu-latest' && matrix.python >= '3.6'
run: |
echo "::group::Setup docker for MySQL"
docker run -it --name mysql -p 3306:3306 -p 33060:33060 -e MYSQL_ROOT_PASSWORD=pass0 -e MYSQL_DATABASE=petl -e MYSQL_USER=petl -e MYSQL_PASSWORD=test -d mysql:latest
echo "::endgroup::"
echo "::group::Setup docker for Postgres"
docker run -it --name postgres -p 5432:5432 -e POSTGRES_DB=petl -e POSTGRES_USER=petl -e POSTGRES_PASSWORD=test -d postgres:latest
echo "::endgroup::"
echo "::group::Install database test dependencies"
python -m pip install --prefer-binary -r requirements-database.txt
echo "::endgroup::"
- name: Setup petl package
run: python setup.py sdist bdist_wheel
- name: Install extra packages dependencies for mode full
if: env.testing == 'full'
run: python -m pip install --prefer-binary -r requirements-formats.txt
- name: List Installed Packages for Throubleshooting
run: |
echo "::group::List Installed Packages for Throubleshooting"
python -m pip list --format freeze
echo "::endgroup::"
- name: Test python source code for mode simple
if: env.testing == 'simple'
run: pytest --cov=petl petl
- name: Test documentation inside source code for mode full
if: env.testing == 'full'
run: |
echo "::group::Perform doctest-modules execution with coverage"
pytest --doctest-modules --cov=petl petl
echo "::endgroup::"
- name: Coveralls
if: matrix.os == 'ubuntu-latest' && matrix.python == '3.8'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
python -m pip install --upgrade coveralls
coveralls --service=github
- name: Print source code coverage
run: coverage report -m
test-documentation:
needs: run-guard
runs-on: ubuntu-latest
strategy:
matrix:
python: [3.8]
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Install doc generation dependencies
run: |
python -m pip install --prefer-binary -r requirements-docs.txt
- name: Setup petl package
run: python setup.py build
- name: Test docs generation
run: |
cd docs
sphinx-build -W -b singlehtml -d ../build/doctrees . ../build/singlehtml