-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #219 from byexamples/Document-Matrix-Version-Tested
Change some prints to make them machine-parseable
- Loading branch information
Showing
8 changed files
with
158 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,3 +14,4 @@ test/ds/django.conf | |
test/ds/args | ||
prof-traces | ||
.release-notes | ||
.workflow-log |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
import sys, re, collections, pprint | ||
from tabulate import tabulate | ||
|
||
lang_re = re.compile( | ||
r'''^Lang[ ] | ||
(?P<language> \w+)[ ] | ||
test[ ]? | ||
(?: | ||
\( (?P<lang_version> [^)]+) \) | [^(] | ||
) | ||
''', re.VERBOSE) | ||
|
||
runner_re = re.compile( | ||
r''' (?P<language> \w+)[ ] | ||
Runner's[ ]version:[ ] | ||
\( (?P<runner_version> [^)]+) \)$ | ||
''', re.VERBOSE) | ||
|
||
failed_re = re.compile( | ||
r''' Failed[ ]to[ ]obtain[ ](?P<language> \w+)[ ] | ||
Runner's[ ]version.*$ | ||
''', re.VERBOSE) | ||
|
||
def parse_line(line): | ||
''' | ||
>>> parse_line(r"Lang Ruby test (3.1) ... Ruby Runner's version: (1.4.1)") | ||
('Ruby', '3.1', '1.4.1') | ||
>>> parse_line(r"Lang Ruby test ... Ruby Runner's version: (1.4.1)") | ||
('Ruby', 'latest', '1.4.1') | ||
>>> parse_line(r"Lang Ruby test ... Failed to obtain Ruby Runner's version ...") | ||
('Ruby', 'latest', 'unknown (to review)') | ||
>>> parse_line(r"Lang Ruby test ... Failed to obtain Python Runner's version ...") | ||
None | ||
''' | ||
|
||
# "Lang Ruby test (3.1) ... Ruby Runner's version: (1.4.1)" | ||
# |--------------------| | ||
m = lang_re.match(line) | ||
assert m | ||
|
||
language, lang_version = m.group('language', 'lang_version') | ||
if not lang_version: | ||
lang_version = 'latest' | ||
|
||
# "Lang Ruby test (3.1) ... Failed to obtain Ruby Runner's version ..." | ||
# ^^^^ |-----------------^^^^-----------------| | ||
m = failed_re.search(line) | ||
if m: | ||
language2 = m.group('language') | ||
if language == language2: | ||
# this case means that something went wrong when byexample | ||
# tried to retrieve the version of the runner | ||
runner_version = '(in review)' | ||
return language, lang_version, runner_version | ||
|
||
# "Lang Ruby test (3.1) ... Failed to obtain Python Runner's version ..." | ||
# ^^^^ |-----------------^^^^^^-----------------| | ||
# In this case the failure is not a failure for our language of | ||
# interest so we skip the line | ||
return language, lang_version, None | ||
|
||
# "Lang Ruby test (3.1) ... Ruby Runner's version: (0.9.6)" | ||
# ^^^^ |^^^^--------------------------| | ||
m = runner_re.search(line) | ||
if not m: | ||
return language, lang_version, None | ||
|
||
language2, runner_version = m.group('language', 'runner_version') | ||
if language != language2: | ||
# Not our language of interest, skip the line | ||
return language, lang_version, None | ||
|
||
return language, lang_version, runner_version | ||
|
||
matrix = collections.defaultdict(dict) | ||
with open(sys.argv[1], 'rt') as f: | ||
for line in f: | ||
|
||
# If it is not a specific job for testing a language, skip it | ||
if not line.startswith('Lang '): | ||
continue | ||
|
||
# If it is not the specific step that run the tests, skip it | ||
if 'Run make lang-' not in line: | ||
continue | ||
|
||
language, lang_version, runner_version = parse_line(line) | ||
if runner_version: | ||
matrix[language][lang_version] = runner_version | ||
else: | ||
if lang_version not in matrix[language]: | ||
matrix[language][lang_version] = 'unknown' | ||
|
||
begin_marker = '<!-- matrix CI begin -->' | ||
end_marker = '<!-- matrix CI end -->' | ||
|
||
document_files = { | ||
'iasm': 'docs/languages/iasm.md', | ||
'powershell': 'docs/languages/powershell.md', | ||
'shell': 'docs/languages/shell.md', | ||
'java': 'docs/languages/java.md', | ||
'python': 'docs/languages/python.md', | ||
'javascript': 'docs/languages/javascript.md', | ||
'ruby': 'docs/languages/ruby.md', | ||
} | ||
|
||
for language, data in matrix.items(): | ||
data = [[lang_ver, runner_ver] for lang_ver, runner_ver in data.items()] | ||
|
||
doc_file = document_files[language.lower()] | ||
with open(doc_file, 'rt') as f: | ||
doc = f.read() | ||
|
||
if begin_marker not in doc or end_marker not in doc: | ||
raise Exception(f"Markers are missing in {doc_file}") | ||
|
||
head, remain = doc.split(begin_marker, 1) | ||
_, tail = remain.split(end_marker, 1) | ||
del remain | ||
|
||
table = tabulate( | ||
data, | ||
["Language", "Runner/Interpreter"], | ||
tablefmt='github', | ||
disable_numparse=True | ||
) | ||
|
||
doc = head + begin_marker + '\n\n' + table + '\n\n' + end_marker + tail | ||
with open(doc_file, 'wt') as f: | ||
f.write(doc) |