Skip to content

Commit 52fa409

Browse files
bgilbertneheb
authored andcommitted
tools: add formatting for releases.json
Have sanity_checks.py check that releases.json is formatted, and have format.py format it. Remove the sorted keys check since the format check subsumes it. We could also format ci_config.json, but sorting keys alphabetically would break some semantically meaningful groupings, so skip for now.
1 parent cdfab18 commit 52fa409

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

tools/format.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def main() -> None:
3737
files += [f for f in patch_dir.rglob('*') if f.name in FORMAT_FILES]
3838

3939
format_meson(files)
40+
Releases.format()
4041

4142

4243
if __name__ == '__main__':

tools/sanity_checks.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,15 @@ def test_releases_json(self):
211211
self.assertIn(name, self.releases)
212212
self.assertIn(version, self.releases[name]['versions'], f'for {name}')
213213

214-
# Verify keys are sorted
215-
self.assertEqual(sorted(self.releases.keys()), list(self.releases.keys()))
216-
217214
for name, info in self.releases.items():
218215
for k in info.keys():
219216
self.assertIn(k, PERMITTED_KEYS)
220217

218+
try:
219+
Releases.format(check=True)
220+
except FormattingError:
221+
self.fail('releases.json is not formatted. Run tools/format.py to format it.')
222+
221223
def get_patch_path(self, wrap_section):
222224
patch_directory = wrap_section.get('patch_directory')
223225
if patch_directory:

tools/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ def save(self) -> None:
126126
f.write(self.encode())
127127
os.rename(f'{self.FILENAME}.new', self.FILENAME)
128128

129+
@classmethod
130+
def format(cls, *, check: bool = False) -> None:
131+
contents = Path(cls.FILENAME).read_text(encoding='utf-8')
132+
parsed = cls.load()
133+
if contents != parsed.encode():
134+
if check:
135+
raise FormattingError
136+
else:
137+
parsed.save()
138+
129139
class ProjectReleases(T.TypedDict):
130140
dependency_names: T.NotRequired[list[str]]
131141
program_names: T.NotRequired[list[str]]

0 commit comments

Comments
 (0)