Skip to content

Commit 4ddcf81

Browse files
committed
Frame initial functionality
1 parent 4889ac3 commit 4ddcf81

File tree

5 files changed

+171
-6
lines changed

5 files changed

+171
-6
lines changed

.github/workflows/lint_test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- name: Install uv
1919
uses: astral-sh/setup-uv@v6
2020
with:
21-
version: "0.6.x"
21+
version: "0.7.x"
2222
enable-cache: true
2323
cache-dependency-glob: "uv.lock"
2424

@@ -47,7 +47,7 @@ jobs:
4747
- name: Install uv
4848
uses: astral-sh/setup-uv@v6
4949
with:
50-
version: "0.6.x"
50+
version: "0.7.x"
5151
enable-cache: true
5252
cache-dependency-glob: "uv.lock"
5353

.github/workflows/pypi_release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: Install uv
1818
uses: astral-sh/setup-uv@v6
1919
with:
20-
version: "0.6.x"
20+
version: "0.7.x"
2121
enable-cache: true
2222
cache-dependency-glob: "uv.lock"
2323

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ Add this to your `.pre-commit-config.yaml`
1717
```
1818
1919
## Hooks
20-
### `asdf`
21-
Lorem ipsum dolor sit amet
20+
**NOTE:** Only pyproject.toml is currently inspected. It is assumed that project metadata is supported per [PyPA Guidance](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/)
21+
22+
### `check-eol`
23+
Check `requires-python` against the current Python lifecycle & fail if an EOL version is included.
2224

2325
## Python Version Support
2426
Starting with Python 3.11, a best attempt is made to support Python versions until they reach EOL, after which support will be formally dropped by the next minor or major release of this package, whichever arrives first. The status of Python versions can be found [here](https://devguide.python.org/versions/).

cached_release_cycle.json

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
{
2+
"3.14": {
3+
"branch": "main",
4+
"pep": 745,
5+
"status": "feature",
6+
"first_release": "2025-10-01",
7+
"end_of_life": "2030-10",
8+
"release_manager": "Hugo van Kemenade"
9+
},
10+
"3.13": {
11+
"branch": "3.13",
12+
"pep": 719,
13+
"status": "bugfix",
14+
"first_release": "2024-10-07",
15+
"end_of_life": "2029-10",
16+
"release_manager": "Thomas Wouters"
17+
},
18+
"3.12": {
19+
"branch": "3.12",
20+
"pep": 693,
21+
"status": "security",
22+
"first_release": "2023-10-02",
23+
"end_of_life": "2028-10",
24+
"release_manager": "Thomas Wouters"
25+
},
26+
"3.11": {
27+
"branch": "3.11",
28+
"pep": 664,
29+
"status": "security",
30+
"first_release": "2022-10-24",
31+
"end_of_life": "2027-10",
32+
"release_manager": "Pablo Galindo Salgado"
33+
},
34+
"3.10": {
35+
"branch": "3.10",
36+
"pep": 619,
37+
"status": "security",
38+
"first_release": "2021-10-04",
39+
"end_of_life": "2026-10",
40+
"release_manager": "Pablo Galindo Salgado"
41+
},
42+
"3.9": {
43+
"branch": "3.9",
44+
"pep": 596,
45+
"status": "security",
46+
"first_release": "2020-10-05",
47+
"end_of_life": "2025-10",
48+
"release_manager": "Łukasz Langa"
49+
},
50+
"3.8": {
51+
"branch": "3.8",
52+
"pep": 569,
53+
"status": "end-of-life",
54+
"first_release": "2019-10-14",
55+
"end_of_life": "2024-10-07",
56+
"release_manager": "Łukasz Langa"
57+
},
58+
"3.7": {
59+
"branch": "3.7",
60+
"pep": 537,
61+
"status": "end-of-life",
62+
"first_release": "2018-06-27",
63+
"end_of_life": "2023-06-27",
64+
"release_manager": "Ned Deily"
65+
},
66+
"3.6": {
67+
"branch": "3.6",
68+
"pep": 494,
69+
"status": "end-of-life",
70+
"first_release": "2016-12-23",
71+
"end_of_life": "2021-12-23",
72+
"release_manager": "Ned Deily"
73+
},
74+
"3.5": {
75+
"branch": "3.5",
76+
"pep": 478,
77+
"status": "end-of-life",
78+
"first_release": "2015-09-13",
79+
"end_of_life": "2020-09-30",
80+
"release_manager": "Larry Hastings"
81+
},
82+
"3.4": {
83+
"branch": "3.4",
84+
"pep": 429,
85+
"status": "end-of-life",
86+
"first_release": "2014-03-16",
87+
"end_of_life": "2019-03-18",
88+
"release_manager": "Larry Hastings"
89+
},
90+
"3.3": {
91+
"branch": "3.3",
92+
"pep": 398,
93+
"status": "end-of-life",
94+
"first_release": "2012-09-29",
95+
"end_of_life": "2017-09-29",
96+
"release_manager": "Georg Brandl, Ned Deily (3.3.7+)"
97+
},
98+
"3.2": {
99+
"branch": "3.2",
100+
"pep": 392,
101+
"status": "end-of-life",
102+
"first_release": "2011-02-20",
103+
"end_of_life": "2016-02-20",
104+
"release_manager": "Georg Brandl"
105+
},
106+
"2.7": {
107+
"branch": "2.7",
108+
"pep": 373,
109+
"status": "end-of-life",
110+
"first_release": "2010-07-03",
111+
"end_of_life": "2020-01-01",
112+
"release_manager": "Benjamin Peterson"
113+
},
114+
"3.1": {
115+
"branch": "3.1",
116+
"pep": 375,
117+
"status": "end-of-life",
118+
"first_release": "2009-06-27",
119+
"end_of_life": "2012-04-09",
120+
"release_manager": "Benjamin Peterson"
121+
},
122+
"3.0": {
123+
"branch": "3.0",
124+
"pep": 361,
125+
"status": "end-of-life",
126+
"first_release": "2008-12-03",
127+
"end_of_life": "2009-06-27",
128+
"release_manager": "Barry Warsaw"
129+
},
130+
"2.6": {
131+
"branch": "2.6",
132+
"pep": 361,
133+
"status": "end-of-life",
134+
"first_release": "2008-10-01",
135+
"end_of_life": "2013-10-29",
136+
"release_manager": "Barry Warsaw"
137+
}
138+
}

pre_commit_python_eol/check_eol.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,38 @@
44
from pathlib import Path
55

66

7+
class EOLPythonError(Exception): ... # noqa: D101
8+
9+
10+
def _get_supported_python(toml_file: Path) -> None:
11+
raise NotImplementedError
12+
13+
14+
def _get_cached_release_cycle() -> None:
15+
raise NotImplementedError
16+
17+
18+
def _get_release_cycle() -> None:
19+
raise NotImplementedError
20+
21+
22+
def check_python_support(toml_file: Path) -> None:
23+
raise NotImplementedError
24+
25+
726
def main(argv: abc.Sequence[str] | None = None) -> int: # noqa: D103
827
parser = argparse.ArgumentParser()
928
parser.add_argument("filenames", nargs="*", type=Path)
1029
args = parser.parse_args(argv)
1130

1231
ec = 0
13-
raise NotImplementedError
32+
for file in args.filenames:
33+
try:
34+
check_python_support(file)
35+
except EOLPythonError:
36+
print(f"{file}: Fail.")
37+
ec = 1
38+
1439
return ec
1540

1641

0 commit comments

Comments
 (0)