Skip to content

Commit 663d905

Browse files
authored
Test and benchmark 3.14, migrate some CI configs (#170)
* benchmark and test py314 * test new 3.14 error messages python/cpython#131335 * test PyPy 3.11 * convert some CI to GHA
1 parent ad21983 commit 663d905

8 files changed

Lines changed: 221 additions & 145 deletions

File tree

.circleci/config.yml

Lines changed: 2 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,11 @@ workflows:
1212
matrix:
1313
parameters:
1414
python_version:
15-
["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
15+
["3.6", "3.7"]
1616
- test_old_pypy:
1717
matrix:
1818
parameters:
1919
python_version: ["2.7"]
20-
- test_pypy:
21-
matrix:
22-
parameters:
23-
python_version: ["3.7", "3.8", "3.9", "3.10"]
24-
- lint-rst
25-
- clang-format
2620

2721
jobs:
2822
# `cimg/python` doesn't support Python 3.4,
@@ -53,7 +47,7 @@ jobs:
5347
docker:
5448
- image: pypy:<<parameters.python_version>>
5549

56-
test: &tests
50+
test:
5751
parameters:
5852
python_version:
5953
type: string
@@ -79,50 +73,3 @@ jobs:
7973
python -m unittest
8074
docker:
8175
- image: cimg/python:<<parameters.python_version>>
82-
83-
test_pypy:
84-
<<: *tests
85-
docker:
86-
- image: pypy:<<parameters.python_version>>
87-
88-
lint-rst:
89-
working_directory: ~/code
90-
steps:
91-
- checkout
92-
- run:
93-
name: Install lint tools
94-
command: |
95-
python3 -m venv venv
96-
. venv/bin/activate
97-
pip install Pygments restructuredtext-lint
98-
- run:
99-
name: Lint
100-
command: |
101-
. venv/bin/activate
102-
rst-lint --encoding=utf-8 README.rst
103-
docker:
104-
- image: cimg/python:3.13
105-
106-
clang-format:
107-
working_directory: ~/code
108-
steps:
109-
- checkout
110-
- run:
111-
name: Install lint tools
112-
command: |
113-
sudo apt-get update -y
114-
sudo apt-get install -y clang-format
115-
- run:
116-
name: Lint
117-
command: |
118-
SOURCE_FILES=`find ./ -name \*.c -type f -or -name \*.h -type f`
119-
for SOURCE_FILE in $SOURCE_FILES
120-
do
121-
export FORMATTING_ISSUE_COUNT=`clang-format -output-replacements-xml $SOURCE_FILE | grep offset | wc -l`
122-
if [ "$FORMATTING_ISSUE_COUNT" -gt "0" ]; then
123-
echo "Source file $SOURCE_FILE contains formatting issues. Please use clang-format tool to resolve found issues."
124-
exit 1
125-
fi
126-
done
127-
docker:
128-
- image: cimg/python:3.13
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
name: Test and Lint
2+
3+
on:
4+
push:
5+
pull_request:
6+
branches: [ main ]
7+
8+
jobs:
9+
10+
test:
11+
runs-on: ubuntu-24.04
12+
strategy:
13+
fail-fast: true
14+
matrix:
15+
python-version:
16+
- '3.8'
17+
- '3.9'
18+
- '3.10'
19+
- '3.11'
20+
- '3.12'
21+
- '3.13'
22+
- '3.14.0-rc.2'
23+
- 'pypy-3.7'
24+
- 'pypy-3.8'
25+
- 'pypy-3.9'
26+
- 'pypy-3.10'
27+
- 'pypy-3.11'
28+
steps:
29+
- uses: actions/checkout@v4
30+
- uses: actions/setup-python@v5
31+
with:
32+
python-version: ${{ matrix.python-version }}
33+
- name: Install ciso8601
34+
run: |
35+
python -m venv venv
36+
. venv/bin/activate
37+
pip install --upgrade build
38+
python -m build -s
39+
pip install dist/ciso8601-*.tar.gz
40+
- name: Install testing dependencies
41+
run: |
42+
. venv/bin/activate
43+
pip install pytz
44+
- name: Test
45+
run: |
46+
. venv/bin/activate
47+
python -m unittest
48+
49+
lint-rst:
50+
runs-on: ubuntu-latest
51+
steps:
52+
- uses: actions/checkout@v4
53+
- uses: actions/setup-python@v4
54+
with:
55+
python-version: '3.13'
56+
- name: Install lint tools
57+
run: |
58+
python3 -m venv venv
59+
. venv/bin/activate
60+
pip install Pygments restructuredtext-lint
61+
- name: Lint
62+
run: |
63+
. venv/bin/activate
64+
rst-lint --encoding=utf-8 README.rst
65+
66+
clang-format:
67+
runs-on: ubuntu-latest
68+
steps:
69+
- uses: actions/checkout@v4
70+
- name: Install lint tools
71+
run: |
72+
sudo apt-get update -y
73+
sudo apt-get install -y clang-format
74+
- name: Lint
75+
run: |
76+
SOURCE_FILES=`find ./ -name \*.c -type f -or -name \*.h -type f`
77+
for SOURCE_FILE in $SOURCE_FILES
78+
do
79+
export FORMATTING_ISSUE_COUNT=`clang-format -output-replacements-xml $SOURCE_FILE | grep offset | wc -l`
80+
if [ "$FORMATTING_ISSUE_COUNT" -gt "0" ]; then
81+
echo "Source file $SOURCE_FILE contains formatting issues. Please use clang-format tool to resolve found issues."
82+
exit 1
83+
fi
84+
done

README.rst

Lines changed: 84 additions & 84 deletions
Large diffs are not rendered by default.

benchmarking/Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ RUN apt install -y python3.7 python3.7-dev python3.7-venv && \
2222
apt install -y python3.10 python3.10-dev python3.10-venv && \
2323
apt install -y python3.11 python3.11-dev python3.11-venv && \
2424
apt install -y python3.12 python3.12-dev python3.12-venv && \
25-
apt install -y python3.13 python3.13-dev python3.13-venv
25+
apt install -y python3.13 python3.13-dev python3.13-venv && \
26+
apt install -y python3.14 python3.14-dev python3.14-venv
2627

2728
# Make Python 3.13 the default `python`
2829
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.13 10

benchmarking/tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[tox]
22
requires =
33
tox>=4
4-
envlist = py313,py312,py311,py310,py39,py38
4+
envlist = py314,py313,py312,py311,py310,py39,py38
55
setupdir=..
66

77
[testenv]

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"Programming Language :: Python :: 3.11",
7676
"Programming Language :: Python :: 3.12",
7777
"Programming Language :: Python :: 3.13",
78+
"Programming Language :: Python :: 3.14",
7879
"Topic :: Software Development :: Libraries :: Python Modules",
7980
],
8081
)

tests/tests.py

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,36 @@ def test_invalid_empty_but_required_fields(self):
240240
)
241241

242242
def test_invalid_day_for_month(self):
243-
if platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
243+
if platform.python_implementation() == 'CPython' and sys.version_info >= (3, 14):
244+
for non_leap_year in (1700, 1800, 1900, 2014):
245+
self.assertRaisesRegex(
246+
ValueError,
247+
"day 29 must be in range 1..28 for month 2 in year {0}".format(non_leap_year),
248+
parse_datetime,
249+
"{}-02-29".format(non_leap_year),
250+
)
251+
252+
self.assertRaisesRegex(
253+
ValueError,
254+
r"day 32 must be in range 1..31 for month 1 in year 2014",
255+
parse_datetime,
256+
"2014-01-32",
257+
)
258+
259+
self.assertRaisesRegex(
260+
ValueError,
261+
r"day 31 must be in range 1..30 for month 6 in year 2014",
262+
parse_datetime,
263+
"2014-06-31",
264+
)
265+
266+
self.assertRaisesRegex(
267+
ValueError,
268+
r"day 0 must be in range 1..30 for month 6 in year 2014",
269+
parse_datetime,
270+
"2014-06-00",
271+
)
272+
elif platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
244273
for non_leap_year in (1700, 1800, 1900, 2014):
245274
self.assertRaisesRegex(
246275
ValueError,
@@ -577,7 +606,14 @@ def test_issue_13(self):
577606
)
578607

579608
def test_issue_22(self):
580-
if platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
609+
if platform.python_implementation() == 'CPython' and sys.version_info >= (3, 14):
610+
self.assertRaisesRegex(
611+
ValueError,
612+
r"day 31 must be in range 1..30 for month 11 in year 2016",
613+
parse_datetime,
614+
"2016-11-31T12:34:34.521059",
615+
)
616+
elif platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
581617
self.assertRaisesRegex(
582618
ValueError,
583619
r"('day must be in 1..30', 31)",
@@ -601,7 +637,14 @@ def test_issue_35(self):
601637
)
602638

603639
def test_issue_42(self):
604-
if platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
640+
if platform.python_implementation() == 'CPython' and sys.version_info >= (3, 14):
641+
self.assertRaisesRegex(
642+
ValueError,
643+
r"day 0 must be in range 1..28 for month 2 in year 2014",
644+
parse_datetime,
645+
"20140200",
646+
)
647+
elif platform.python_implementation() == 'PyPy' and sys.version_info.major >= 3:
605648
self.assertRaisesRegex(
606649
ValueError,
607650
r"('day must be in 1..28', 0)",

tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[tox]
22
requires =
33
tox>=4
4-
envlist = {py313,py312,py311,py310,py39,py38}-caching_{enabled,disabled}
4+
envlist = {py314,py313,py312,py311,py310,py39,py38}-caching_{enabled,disabled}
55

66
[testenv]
77
package = sdist

0 commit comments

Comments
 (0)