Skip to content

Commit

Permalink
Migrate to a reusable workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
kurtmckee committed Nov 6, 2024
1 parent 48f38e2 commit a2c30c3
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 86 deletions.
145 changes: 68 additions & 77 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -1,90 +1,81 @@
name: build
name: "🧪 Test"

on:
push:
pull_request:
branches:
- "main"
pull_request: null
# build weekly at 4:00 AM UTC
schedule:
- cron: '0 4 * * 1'

jobs:
pylint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
python-version: '3.x'
- run: python -m pip install -U tox
- run: tox -e pylint

mypy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
python-version: '3.11'
- run: python -m pip install -U tox
- run: tox -e mypy,mypy-test

test:
tests:
name: "${{ matrix.name }}"
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
# we do not want a large number of windows and macos builds, so
# enumerate them explicitly
# The `include` array below will match against these names
# and add additional keys and values to the JSON object.
name:
- "Linux"
- "macOS"
- "Windows"
- "Quality"

# The `include` array below will also inherit these values,
# which are critical for effective cache-busting.
# The nested list syntax ensures that the full array of values is inherited.
cache-key-hash-files:
-
- "requirements/*/*.txt"
- "pyproject.toml"
- "toxfile.py"

include:
- os: windows-latest
python-version: "3.11"
- os: macos-latest
python-version: "3.11"
name: "test py${{ matrix.python-version }} on ${{ matrix.os }} "
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: install tox
run: python -m pip install -U tox
- name: run tests
run: python -m tox -e py,coverage_report
- name: "Linux"
runner: "ubuntu-latest"
cpythons:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
tox-post-environments:
- "py3.8-mindeps"
- "coverage_report"

- name: "macOS"
runner: "macos-latest"
cpythons:
- "3.8"
- "3.13"
tox-post-environments:
- "coverage_report"

test-lazy-imports:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
python-version: '3.x'
- run: python -m pip install -U tox
- run: tox -e test-lazy-imports
- name: "Windows"
runner: "windows-latest"
cpythons:
- "3.8"
- "3.13"
tox-post-environments:
- "coverage_report"

test-mindeps:
runs-on: ubuntu-latest
name: "mindeps"
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
python-version: "3.8"
- name: install tox
run: python -m pip install -U tox
- name: test
run: tox -e py-mindeps
- name: "Quality"
runner: "ubuntu-latest"
cpythons:
- "3.13"
tox-environments:
- "check-min-python-is-tested"
- "mypy"
- "mypy-test"
- "poetry-check"
- "pylint"
- "test-lazy-imports"
- "twine-check"
cache-paths:
- ".mypy_cache/"

test-package-metadata:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
python-version: "3.11"
- name: install tox
run: python -m pip install -U tox
- name: check package metadata
run: python -m tox -e twine-check,poetry-check
- name: check min version is tested in CI
run: python -m tox r -e check-min-python-is-tested
uses: "globus/workflows/.github/workflows/tox.yaml@04b4abd6fcb9b4be7263bc9d6994ae2ada220739" # v1.1
with: "${{ toJSON(matrix) }}"
18 changes: 9 additions & 9 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ envlist =
pylint
test-lazy-imports
coverage_clean
py{313,312,311,310,39,38}
py38-mindeps
py{3.13,3.12,3.11,3.10,3.9,3.8}
py3.8-mindeps
coverage_report
docs
minversion = 4.22.0
labels =
freezedeps = freezedeps-print,freezedeps-py{313,312,311,310,39,38}
freezedeps = freezedeps-print,freezedeps-py{3.13,3.12,3.11,3.10,3.9,3.8}

[testenv]
# build a wheel, not a tarball, and use a common env to do it (so that the wheel is shared)
Expand All @@ -23,8 +23,8 @@ deps =
mindeps: -r requirements/py{py_dot_ver}/test-mindeps.txt
commands = coverage run -m pytest {posargs}
depends =
py{313,312,311,310,39,38}{-mindeps,}: coverage_clean, lint
coverage_report: py{313,312,311,310,39,38}{-mindeps,}
py{3.13,3.12,3.11,3.10,3.9,3.8}{-mindeps,}: coverage_clean, lint
coverage_report: py{3.13,3.12,3.11,3.10,3.9,3.8}{-mindeps,}

[testenv:coverage_clean]
dependency_groups = coverage
Expand Down Expand Up @@ -65,7 +65,7 @@ deps = pyright
commands = pyright src/ {posargs}

[testenv:docs]
# force use of py311 for doc builds so that we get the same behaviors as the
# force use of py3.11 for doc builds so that we get the same behaviors as the
# readthedocs doc build
basepython = python3.11
deps = -r requirements/py{py_dot_ver}/docs.txt
Expand Down Expand Up @@ -104,7 +104,7 @@ commands =
python -m dependency_groups typing -o requirements/.typing.in
python -m dependency_groups test-mindeps -o requirements/.test-mindeps.in
python -m dependency_groups docs -o requirements/.docs.in
[testenv:freezedeps-py{313,312,311,310,39,38}]
[testenv:freezedeps-py{3.13,3.12,3.11,3.10,3.9,3.8}]
description = freeze development dependencies using pip-compile
skip_install = true
setenv =
Expand All @@ -116,10 +116,10 @@ commands =
pip-compile --strip-extras -q -U --resolver=backtracking .typing.in -o py{py_dot_ver}/typing.txt

# Minimum dependencies are only tested against the lowest supported Python version.
py38: pip-compile --strip-extras -q -U --resolver=backtracking .test-mindeps.in -o py{py_dot_ver}/test-mindeps.txt
py3.8: pip-compile --strip-extras -q -U --resolver=backtracking .test-mindeps.in -o py{py_dot_ver}/test-mindeps.txt

# The docs requirements are only generated for Python 3.11.
py311: pip-compile --strip-extras -q -U --resolver=backtracking .docs.in -o py{py_dot_ver}/docs.txt
py3.11: pip-compile --strip-extras -q -U --resolver=backtracking .docs.in -o py{py_dot_ver}/docs.txt
depends = freezedeps-print

[testenv:check-min-python-is-tested]
Expand Down

0 comments on commit a2c30c3

Please sign in to comment.