Skip to content

Commit

Permalink
github actions: Try to parameterise testing
Browse files Browse the repository at this point in the history
Having separate action files for different Python versions sucks.
  • Loading branch information
sjlongland committed May 4, 2024
1 parent 0b23433 commit 2afc84f
Show file tree
Hide file tree
Showing 2 changed files with 148 additions and 0 deletions.
74 changes: 74 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Pre-merge and post-merge tests

on:
push:
pull_request:
workflow_dispatch:
inputs:
run-slow:
description: "Whether to run slow tests (normally they are skipped)"
type: boolean
required: false
default: false

permissions:
contents: read

jobs:
test:
name: Run tests
uses: ./.github/workflows/test.yml
# https://wildwolf.name/github-actions-how-to-avoid-running-the-same-workflow-multiple-times/
if: >
github.event_name != 'pull_request'
|| github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
strategy:
matrix:
python:
- "3.6"
- "3.8"
- "3.12"
platform:
# This package is supposed to be OS-independent and is unlikely to have
# OS-specific bugs, so we conserve runner usage by only testing on Linux
# during pre-merge and post-merge testing. If it works on Linux, it'll
# probably work on Mac and Windows too. But if an OS-specific bug does
# slip through, we should catch it in pre-release testing.
- ubuntu-latest
force-minimum-dependencies:
- false
exclude:
# Python 3.5 does not run on ubuntu-latest
- python: "3.5"
platform: ubuntu-latest
include:
- python: "3.5"
platform: ubuntu-20.04
force-minimum-dependencies: false
# For testing forced minimum deps, use the latest stable version of Python
# on which those dependencies can be installed
- python: "3.12"
platform: ubuntu-latest
force-minimum-dependencies: true
with:
python-version: ${{ matrix.python }}
platform: ${{ matrix.platform }}
force-minimum-dependencies: ${{ matrix.force-minimum-dependencies }}
run-slow: ${{ inputs.run-slow || false }}

check: # This job does nothing and is only used for the branch protection
# https://wildwolf.name/github-actions-how-to-avoid-running-the-same-workflow-multiple-times/
if: >
github.event_name != 'pull_request'
|| github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
needs:
- test

runs-on: ubuntu-latest

steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
74 changes: 74 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Reusable workflow that runs all tests

on:
workflow_call:
inputs:
python-version:
type: string
required: true
platform:
type: string
required: true
# Set this flag to test that the package works with the listed minimum
# versions of dependencies.
force-minimum-dependencies:
type: boolean
required: false
default: false
# Set this flag to run even the slow tests
run-slow:
type: boolean
required: false
default: true

permissions:
contents: read

env:
# Environment variables to support color support (jaraco/skeleton#66):
# Request colored output from CLI tools supporting it. Different tools
# interpret the value differently. For some, just being set is sufficient.
# For others, it must be a non-zero integer. For yet others, being set
# to a non-empty value is sufficient. For tox, it must be one of
# <blank>, 0, 1, false, no, off, on, true, yes. The only enabling value
# in common is "1".
FORCE_COLOR: 1
# Recognized by the `py` package, dependency of `pytest` (must be "1")
PY_COLORS: 1

# Suppress noisy pip warnings
PIP_DISABLE_PIP_VERSION_CHECK: 'true'
PIP_NO_PYTHON_VERSION_WARNING: 'true'
PIP_NO_WARN_SCRIPT_LOCATION: 'true'


jobs:
test:
runs-on: ${{ inputs.platform }}
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ inputs.python-version }}
allow-prereleases: true
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest coverage coverage-lcov toml pint
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- 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.
flake8 . --count --exit-zero --max-complexity=10 --statistics
- name: Test with py.test
run: |
coverage run -m pytest
coverage-lcov
- name: Coveralls
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
path-to-lcov: ./lcov.info

0 comments on commit 2afc84f

Please sign in to comment.