Skip to content

Feature/legend title kw clean #3080

Feature/legend title kw clean

Feature/legend title kw clean #3080

Workflow file for this run

name: Matrix Test
on:
push:
branches: [main, devel]
pull_request:
branches: [main, devel]
jobs:
run-if-changes:
runs-on: ubuntu-latest
outputs:
run: ${{ (github.event_name == 'push' && github.ref_name == 'main') && 'true' || steps.filter.outputs.python }}
steps:
- uses: actions/checkout@v6
- uses: dorny/paths-filter@v4
id: filter
with:
filters: |
python:
- 'ultraplot/**'
- 'pyproject.toml'
- 'environment.yml'
- '.github/workflows/**'
- 'tools/ci/**'
select-tests:
runs-on: ubuntu-latest
needs:
- run-if-changes
if: always() && needs.run-if-changes.outputs.run == 'true'
outputs:
mode: ${{ steps.select.outputs.mode }}
tests: ${{ steps.select.outputs.tests }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Prepare workspace
run: mkdir -p .ci
- name: Restore test map cache
id: restore-map
uses: actions/cache/restore@v5
with:
path: .ci/test-map.json
key: test-map-${{ github.event.pull_request.base.sha }}
restore-keys: |
test-map-
- name: Build test map on cache miss
if: steps.restore-map.outputs.cache-hit != 'true'
uses: mamba-org/setup-micromamba@v2.0.7
with:
environment-file: ./environment.yml
init-shell: bash
create-args: >-
--verbose
python=3.10
matplotlib=3.9
cache-environment: true
cache-downloads: false
- name: Generate test map on cache miss
if: steps.restore-map.outputs.cache-hit != 'true'
shell: bash -el {0}
run: |
echo "Test map cache miss; generating map from tests."
pip install --no-build-isolation --no-deps .
mkdir -p .ci
pytest -q --tb=short --disable-warnings -n auto -p pytest_cov \
--cov=ultraplot --cov-branch --cov-context=test --cov-report= \
ultraplot/tests
python tools/ci/build_test_map.py --coverage-file .coverage --output .ci/test-map.json --root .
- name: Select impacted tests
id: select
run: |
if [ "${{ github.event_name }}" != "pull_request" ]; then
echo "mode=full" >> $GITHUB_OUTPUT
echo "tests=[]" >> $GITHUB_OUTPUT
exit 0
fi
git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} > .ci/changed.txt
echo "Changed files:"
cat .ci/changed.txt || true
echo "Test map exists:"
if [ -f .ci/test-map.json ]; then
echo "yes (size=$(wc -c < .ci/test-map.json))"
else
echo "no"
fi
python tools/ci/select_tests.py \
--map .ci/test-map.json \
--changed-files .ci/changed.txt \
--output .ci/selection.json \
--always-full 'pyproject.toml' \
--always-full 'environment.yml' \
--always-full 'ultraplot/__init__.py' \
--ignore 'docs/**' \
--ignore 'README.rst'
echo "Selection output:"
cat .ci/selection.json || true
python - <<'PY' > .ci/selection.out
import json
data = json.load(open(".ci/selection.json", "r", encoding="utf-8"))
print(f"mode={data['mode']}")
print("tests=" + json.dumps(data.get("tests", []), separators=(",", ":")))
PY
cat .ci/selection.out >> $GITHUB_OUTPUT
get-versions:
runs-on: ubuntu-latest
needs:
- run-if-changes
if: always() && needs.run-if-changes.outputs.run == 'true'
outputs:
python-versions: ${{ steps.set-versions.outputs.python-versions }}
matplotlib-versions: ${{ steps.set-versions.outputs.matplotlib-versions }}
test-matrix: ${{ steps.set-versions.outputs.test-matrix }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-python@v6
with:
python-version: "3.11"
- id: set-versions
run: |
OUTPUT=$(python tools/ci/version_support.py)
echo "Detected Python versions: $(echo "$OUTPUT" | jq -c '.python_versions')"
echo "Detected Matplotlib versions: $(echo "$OUTPUT" | jq -c '.matplotlib_versions')"
echo "Detected test matrix: $(echo "$OUTPUT" | jq -c '.test_matrix')"
python tools/ci/version_support.py --format github-output >> $GITHUB_OUTPUT
coverage:
name: Coverage
runs-on: ubuntu-latest
needs:
- run-if-changes
if: always() && needs.run-if-changes.outputs.run == 'true' && github.event_name == 'pull_request'
defaults:
run:
shell: bash -el {0}
steps:
- name: Set up swap space
uses: pierotofy/set-swap-space@master
with:
swap-size-gb: 10
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: mamba-org/setup-micromamba@v2.0.7
with:
environment-file: ./environment.yml
init-shell: bash
condarc-file: ./.github/micromamba-condarc.yml
post-cleanup: none
create-args: >-
--verbose
python=3.10
matplotlib=3.9
cache-environment: true
cache-downloads: false
- name: Build Ultraplot
run: |
pip install --no-build-isolation --no-deps .
- name: Run full coverage suite
run: |
pytest -q --tb=short --disable-warnings -n auto -p pytest_cov \
--cov=ultraplot --cov-branch --cov-context=test \
--cov-report=xml:coverage.xml --cov-report= \
ultraplot/tests
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage.xml
name: codecov-pr-python3.10-mpl3.9
build:
needs:
- get-versions
- run-if-changes
- select-tests
if: always() && needs.run-if-changes.outputs.run == 'true' && needs.get-versions.result == 'success' && needs.select-tests.result == 'success'
strategy:
matrix:
include: ${{ fromJson(needs.get-versions.outputs.test-matrix) }}
fail-fast: false
max-parallel: 4
uses: ./.github/workflows/build-ultraplot.yml
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.python-version }}-${{ matrix.matplotlib-version }}
cancel-in-progress: false
with:
python-version: ${{ matrix.python-version }}
matplotlib-version: ${{ matrix.matplotlib-version }}
test-mode: ${{ needs.select-tests.outputs.mode }}
test-nodeids: ${{ needs.select-tests.outputs.tests }}
build-success:
needs:
- build
- run-if-changes
if: always()
runs-on: ubuntu-latest
steps:
- run: |
if [[ '${{ needs.run-if-changes.outputs.run }}' == 'false' ]]; then
echo "No changes detected, tests skipped."
else
if [[ '${{ needs.build.result }}' == 'success' ]]; then
echo "All tests passed successfully!"
else
echo "Tests failed!"
exit 1
fi
fi