Skip to content

Commit 6d5ef91

Browse files
authored
chore: improve generators (#180)
* chore: ensure generators actually update their fixture files * chore: ensure generators end their fixture files with a newline * chore: ensure generators exit with non-zero code if comparing fails * chore: allow controlling generator output with env variable
1 parent db30f62 commit 6d5ef91

File tree

5 files changed

+111
-26
lines changed

5 files changed

+111
-26
lines changed

generators/GenerateMavenVersions.java

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -133,12 +133,14 @@ public static boolean compareVers(String version1, String op, String version2) {
133133
throw new RuntimeException("unsupported comparison operator " + op);
134134
}
135135

136-
public static void compareVersions(List<String> lines, String select) {
137-
lines.forEach(line -> {
136+
public static boolean compareVersions(List<String> lines, String select) {
137+
boolean didAnyFail = false;
138+
139+
for(String line : lines) {
138140
line = line.trim();
139141

140142
if(line.isEmpty() || line.startsWith("#") || line.startsWith("//")) {
141-
return;
143+
continue;
142144
}
143145

144146
String[] parts = line.split(" ");
@@ -148,22 +150,28 @@ public static void compareVersions(List<String> lines, String select) {
148150

149151
boolean r = compareVers(v1, op, v2);
150152

153+
if(!r) {
154+
didAnyFail = true;
155+
}
156+
151157
if(select.equals("failures") && r) {
152-
return;
158+
continue;
153159
}
154160

155161
if(select.equals("successes") && !r) {
156-
return;
162+
continue;
157163
}
158164

159165
String color = r ? "\033[92m" : "\033[91m";
160166
String rs = r ? "T" : "F";
161167

162168
System.out.printf("%s%s\033[0m: \033[93m%s\033[0m\n", color, rs, line);
163-
});
169+
}
170+
171+
return didAnyFail;
164172
}
165173

166-
public static void compareVersionsInFile(String filepath, String select) throws IOException {
174+
public static boolean compareVersionsInFile(String filepath, String select) throws IOException {
167175
List<String> lines = new ArrayList<>();
168176

169177
try(BufferedReader br = new BufferedReader(new FileReader(filepath))) {
@@ -175,7 +183,7 @@ public static void compareVersionsInFile(String filepath, String select) throws
175183
}
176184
}
177185

178-
compareVersions(lines, select);
186+
return compareVersions(lines, select);
179187
}
180188

181189
public static List<String> generateVersionCompares(List<String> versions) {
@@ -198,12 +206,30 @@ public static List<String> generatePackageCompares(Map<String, List<String>> pac
198206
.collect(Collectors.toList());
199207
}
200208

209+
public static String getSelectFilter() {
210+
// set this to either "failures" or "successes" to only have those comparison results
211+
// printed; setting it to anything else will have all comparison results printed
212+
String value = System.getenv("VERSION_GENERATOR_PRINT");
213+
214+
if(value == null) {
215+
return "failures";
216+
}
217+
218+
return value;
219+
}
220+
201221
public static void main(String[] args) throws IOException {
202-
String outfile = "maven-versions-generated.txt";
222+
String outfile = "pkg/semantic/fixtures/maven-versions-generated.txt";
203223
Map<String, List<String>> packages = fetchPackageVersions();
204224

205225
writeToFile(outfile, generatePackageCompares(packages));
206226

207-
compareVersionsInFile(outfile, "failures");
227+
String show = getSelectFilter();
228+
229+
boolean didAnyFail = compareVersionsInFile(outfile, show);
230+
231+
if(didAnyFail) {
232+
System.exit(1);
233+
}
208234
}
209235
}

generators/generate-debian-versions.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#!/usr/bin/env python3
22

3-
import zipfile
4-
import operator
5-
import urllib.request
63
import json
4+
import operator
5+
import os
76
import subprocess
7+
import urllib.request
8+
import zipfile
89
from pathlib import Path
910

1011

@@ -121,6 +122,8 @@ def compare(v1, relate, v2):
121122

122123

123124
def compare_versions(lines, select="all"):
125+
has_any_failed = False
126+
124127
for line in lines:
125128
line = line.strip()
126129

@@ -131,6 +134,9 @@ def compare_versions(lines, select="all"):
131134

132135
r = compare(DebianVersion(v1), op, DebianVersion(v2))
133136

137+
if not r:
138+
has_any_failed = r
139+
134140
if select == "failures" and r:
135141
continue
136142

@@ -140,12 +146,13 @@ def compare_versions(lines, select="all"):
140146
color = '\033[92m' if r else '\033[91m'
141147
rs = "T" if r else "F"
142148
print(f"{color}{rs}\033[0m: \033[93m{line}\033[0m")
149+
return has_any_failed
143150

144151

145152
def compare_versions_in_file(filepath, select="all"):
146153
with open(filepath) as f:
147154
lines = f.readlines()
148-
compare_versions(lines, select)
155+
return compare_versions(lines, select)
149156

150157

151158
def generate_version_compares(versions):
@@ -184,5 +191,13 @@ def fetch_packages_versions():
184191
packs = fetch_packages_versions()
185192
with open(outfile, "w") as f:
186193
f.writelines(generate_package_compares(packs))
194+
f.write("\n")
195+
196+
# set this to either "failures" or "successes" to only have those comparison results
197+
# printed; setting it to anything else will have all comparison results printed
198+
show = os.environ.get("VERSION_GENERATOR_PRINT", "failures")
199+
200+
did_any_fail = compare_versions_in_file(outfile, show)
187201

188-
compare_versions_in_file(outfile, "failures")
202+
if did_any_fail:
203+
sys.exit(1)

generators/generate-packagist-versions.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,10 @@ function generatePackageCompares(array $packages): array
132132
return array_merge(...$comparisons);
133133
}
134134

135-
function compareVersions(array $lines, string $select = "all"): void
135+
function compareVersions(array $lines, string $select = "all"): bool
136136
{
137+
$hasAnyFailed = false;
138+
137139
foreach ($lines as $line) {
138140
$line = trim($line);
139141

@@ -145,6 +147,10 @@ function compareVersions(array $lines, string $select = "all"): void
145147

146148
$r = version_compare($v1, $v2, $op);
147149

150+
if (!$r) {
151+
$hasAnyFailed = true;
152+
}
153+
148154
if ($select === "failures" && $r === true) {
149155
continue;
150156
}
@@ -157,13 +163,23 @@ function compareVersions(array $lines, string $select = "all"): void
157163
$rs = $r ? "T" : "F";
158164
echo "$color$rs\033[0m: \033[93m$line\033[0m\n";
159165
}
166+
167+
return $hasAnyFailed;
160168
}
161169

162-
$outfile = "packagist-versions-generated.txt";
170+
$outfile = "pkg/semantic/fixtures/packagist-versions-generated.txt";
163171

164172
/** @noinspection PhpUnhandledExceptionInspection */
165173
$packages = fetchPackageVersions();
166174

167-
file_put_contents($outfile, implode("\n", array_unique(generatePackageCompares($packages))));
175+
file_put_contents($outfile, implode("\n", array_unique(generatePackageCompares($packages))) . "\n");
168176

169-
compareVersions(explode("\n", file_get_contents($outfile)), "failures");
177+
// set this to either "failures" or "successes" to only have those comparison results
178+
// printed; setting it to anything else will have all comparison results printed
179+
$show = getenv("VERSION_GENERATOR_PRINT") ?: "failures";
180+
181+
$didAnyFail = compareVersions(explode("\n", file_get_contents($outfile)), $show);
182+
183+
if ($didAnyFail === true) {
184+
exit(1);
185+
}

generators/generate-pypi-versions.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#!/usr/bin/env python3
22

3-
import packaging.version
4-
import zipfile
3+
import json
54
import operator
5+
import os
6+
import packaging.version
67
import urllib.request
7-
import json
8+
import zipfile
89

910

1011
# this requires you run "pip install packaging" - have to be careful about versions too
@@ -43,6 +44,8 @@ def compare(v1, relate, v2):
4344

4445

4546
def compare_versions(lines, select="all"):
47+
has_any_failed = False
48+
4649
for line in lines:
4750
line = line.strip()
4851

@@ -53,6 +56,9 @@ def compare_versions(lines, select="all"):
5356

5457
r = compare(packaging.version.parse(v1), op, packaging.version.parse(v2))
5558

59+
if not r:
60+
has_any_failed = True
61+
5662
if select == "failures" and r:
5763
continue
5864

@@ -62,12 +68,13 @@ def compare_versions(lines, select="all"):
6268
color = '\033[92m' if r else '\033[91m'
6369
rs = "T" if r else "F"
6470
print(f"{color}{rs}\033[0m: \033[93m{line}\033[0m")
71+
return has_any_failed
6572

6673

6774
def compare_versions_in_file(filepath, select="all"):
6875
with open(filepath) as f:
6976
lines = f.readlines()
70-
compare_versions(lines, select)
77+
return compare_versions(lines, select)
7178

7279

7380
def generate_version_compares(versions):
@@ -106,5 +113,13 @@ def fetch_packages_versions():
106113
packs = fetch_packages_versions()
107114
with open(outfile, "w") as f:
108115
f.writelines(generate_package_compares(packs))
116+
f.write("\n")
117+
118+
# set this to either "failures" or "successes" to only have those comparison results
119+
# printed; setting it to anything else will have all comparison results printed
120+
show = os.environ.get("VERSION_GENERATOR_PRINT", "failures")
121+
122+
did_any_fail = compare_versions_in_file(outfile, show)
109123

110-
compare_versions_in_file(outfile, "failures")
124+
if did_any_fail:
125+
sys.exit(1)

generators/generate-rubygems-versions.rb

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ def compare_version(v1, op, v2)
3535
end
3636

3737
# @param [Array<String>] lines
38+
# @return [Boolean]
3839
def compare_versions(lines, select = :all)
40+
has_any_failed = false
41+
3942
lines.each do |line|
4043
line = line.strip
4144

@@ -48,13 +51,17 @@ def compare_versions(lines, select = :all)
4851

4952
r = compare_version(v1, op, v2)
5053

54+
has_any_failed = true unless r
55+
5156
next if select == :failures && r == true
5257
next if select == :successes && r != true
5358

5459
color = r ? "\033[92m" : "\033[91m"
5560
rs = r ? "T" : "F"
5661
puts "#{color}#{rs}\033[0m: \033[93m#{line}\033[0m"
5762
end
63+
64+
has_any_failed
5865
end
5966

6067
def compare_versions_in_file(filepath, select = :all)
@@ -96,6 +103,12 @@ def fetch_packages_versions
96103

97104
packs = fetch_packages_versions
98105

99-
File.open(outfile, "w") { |f| f.write(generate_package_compares(packs).uniq.join("\n")) }
106+
File.open(outfile, "w") { |f| f.write(generate_package_compares(packs).uniq.join("\n") + "\n") }
107+
108+
# set this to either "failures" or "successes" to only have those comparison results
109+
# printed; setting it to anything else will have all comparison results printed
110+
show = ENV.fetch("VERSION_GENERATOR_PRINT", :failures).to_sym
111+
112+
did_any_fail = compare_versions_in_file(outfile, show)
100113

101-
compare_versions_in_file(outfile, :failures)
114+
exit(1) if did_any_fail

0 commit comments

Comments
 (0)