Skip to content

Commit be57219

Browse files
committed
libs: Add envoy.code.check[version_history]
Signed-off-by: Ryan Northey <ryan@synca.io>
1 parent 2b7409f commit be57219

File tree

9 files changed

+351
-5
lines changed

9 files changed

+351
-5
lines changed

envoy.code.check/envoy/code/check/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ pytooling_library(
77
"//deps:aio.run.checker",
88
"//deps:envoy.base.utils",
99
"//deps:flake8",
10+
"//deps:packaging",
1011
"//deps:yapf",
1112
],
1213
sources=[
@@ -17,7 +18,9 @@ pytooling_library(
1718
"abstract/extensions.py",
1819
"abstract/flake8.py",
1920
"abstract/glint.py",
21+
"abstract/project.py",
2022
"abstract/shellcheck.py",
23+
"abstract/version_history.py",
2124
"abstract/yapf.py",
2225
"checker.py",
2326
"cmd.py",

envoy.code.check/envoy/code/check/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
AFileCodeCheck,
99
AGlintCheck,
1010
AShellcheckCheck,
11+
AVersionHistoryCheck,
1112
AYapfCheck)
1213
from .checker import (
1314
CodeChecker,
1415
ExtensionsCheck,
1516
Flake8Check,
1617
GlintCheck,
1718
ShellcheckCheck,
19+
VersionHistoryCheck,
1820
YapfCheck)
1921
from .cmd import run, main
2022
from . import checker
@@ -29,6 +31,7 @@
2931
"AFlake8Check",
3032
"AGlintCheck",
3133
"AShellcheckCheck",
34+
"AVersionHistoryCheck",
3235
"AYapfCheck",
3336
"checker",
3437
"CodeChecker",
@@ -42,4 +45,5 @@
4245
"run",
4346
"ShellcheckCheck",
4447
"typing",
48+
"VersionHistoryCheck",
4549
"YapfCheck")

envoy.code.check/envoy/code/check/abstract/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from .flake8 import AFlake8Check
66
from .glint import AGlintCheck
77
from .shellcheck import AShellcheckCheck
8+
from .version_history import AVersionHistoryCheck
89
from .yapf import AYapfCheck
910
from . import (
1011
base,
@@ -13,6 +14,7 @@
1314
flake8,
1415
glint,
1516
shellcheck,
17+
version_history,
1618
yapf)
1719

1820

@@ -24,11 +26,13 @@
2426
"AFlake8Check",
2527
"AGlintCheck",
2628
"AShellcheckCheck",
29+
"AVersionHistoryCheck",
2730
"AYapfCheck",
2831
"base",
2932
"checker",
3033
"flake8",
3134
"glint",
3235
"extensions",
3336
"shellcheck",
37+
"version_history",
3438
"yapf")

envoy.code.check/envoy/code/check/abstract/checker.py

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,16 @@ class ACodeChecker(
5151
"""Code checker."""
5252

5353
checks = (
54+
"changelogs_changes",
55+
"changelogs_pending",
5456
"extensions_fuzzed",
5557
"extensions_metadata",
5658
"extensions_registered",
5759
"glint",
5860
"python_yapf",
5961
"python_flake8",
60-
"shellcheck")
62+
"shellcheck",
63+
"version")
6164

6265
@property
6366
def all_files(self) -> bool:
@@ -192,6 +195,16 @@ def summary_class(self) -> Type[CodeCheckerSummary]:
192195
"""CodeChecker's summary class."""
193196
return CodeCheckerSummary
194197

198+
@cached_property
199+
def version_history(self) -> "abstract.AVersionHistoryCheck":
200+
"""VERSION_HISTORY checker."""
201+
return self.version_history_class(self.directory, fix=self.fix)
202+
203+
@property # type:ignore
204+
@abstracts.interfacemethod
205+
def version_history_class(self) -> Type["abstract.AVersionHistoryCheck"]:
206+
raise NotImplementedError
207+
195208
@cached_property
196209
def yapf(self) -> "abstract.AYapfCheck":
197210
"""YAPF checker."""
@@ -210,6 +223,41 @@ def add_arguments(self, parser: argparse.ArgumentParser) -> None:
210223
parser.add_argument("-s", "--since")
211224
parser.add_argument("--extensions_build_config")
212225

226+
async def check_changelogs_changes(self):
227+
for changelog in self.version_history.project.changelogs.values():
228+
errors = self.version_history.version_file(
229+
self.version_history.project, changelog).run_checks()
230+
if errors:
231+
self.error("changelogs", errors)
232+
else:
233+
self.succeed("changelogs", [f"{changelog.version}"])
234+
235+
async def check_changelogs_pending(self):
236+
pending = [
237+
k.base_version
238+
for k, v in self.version_history.project.changelogs.items()
239+
if v.release_date == "Pending"]
240+
all_good = (
241+
not pending
242+
or (self.version_history.project.is_dev
243+
and (pending
244+
== [self.version_history.project.version.base_version])))
245+
if all_good:
246+
self.succeed("pending", ["No extraneous pending versions found"])
247+
return
248+
pending = [
249+
x for x
250+
in pending
251+
if x != self.version_history.project.version.base_version]
252+
if self.version_history.project.is_dev:
253+
self.error(
254+
"pending",
255+
[f"Only current version should be pending, found: {pending}"])
256+
else:
257+
self.error(
258+
"pending",
259+
[f"Nothing should be pending, found: {pending}"])
260+
213261
async def check_extensions_fuzzed(self) -> None:
214262
"""Check for glint issues."""
215263
if self.extensions.all_fuzzed:
@@ -258,6 +306,44 @@ async def check_shellcheck(self) -> None:
258306
"""Check for shellcheck issues."""
259307
await self._code_check(self.shellcheck)
260308

309+
async def check_version(self) -> None:
310+
is_current = self.version_history.project.is_current(
311+
self.version_history.project.changelogs.current)
312+
if is_current:
313+
self.succeed(
314+
"version",
315+
["VERSION.txt version matches most recent changelog"])
316+
else:
317+
self.error(
318+
"version",
319+
["VERSION.txt does not match most recent changelog"])
320+
not_pending = (
321+
self.version_history.project.is_dev
322+
and not self.version_history.project.changelogs.is_pending)
323+
not_dev = (
324+
not self.version_history.project.is_dev
325+
and self.version_history.project.changelogs.is_pending)
326+
if not_pending:
327+
self.error(
328+
"version",
329+
["VERSION.txt is set to `-dev` but most recent changelog "
330+
"is not `Pending`"])
331+
elif not_dev:
332+
self.error(
333+
"version",
334+
["VERSION.txt is not set to `-dev` but most recent changelog "
335+
"is `Pending`"])
336+
elif self.version_history.project.is_dev:
337+
self.succeed(
338+
"version",
339+
["VERSION.txt is set to `-dev` and most recent changelog "
340+
"is `Pending`"])
341+
else:
342+
self.succeed(
343+
"version",
344+
["VERSION.txt is not set to `-dev` and most recent "
345+
"changelog is not `Pending`"])
346+
261347
@checker.preload(
262348
when=["python_flake8"],
263349
catches=[subprocess.exceptions.OSCommandError])

0 commit comments

Comments
 (0)