mirror of
https://github.com/kanaka/mal.git
synced 2024-10-26 22:28:26 +03:00
1cf6e2f1a5
For the case where there are code changes outside of the implementation directories, sort the implementations that have actual changes in their own directory to the top of the matrix.
67 lines
2.1 KiB
Python
Executable File
67 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import sys
|
|
import yaml
|
|
|
|
IMPLS_FILE = "IMPLS.yml"
|
|
RE_IGNORE = re.compile(r'(^LICENSE$|^README.md$|^docs/|^process/)')
|
|
RE_IMPL = re.compile(r'^impls/(?!lib|tests)([^/]*)/')
|
|
|
|
OVERRIDE_IMPLS = os.environ.get('OVERRIDE_IMPLS', '').split()
|
|
|
|
def impl_text(impl):
|
|
s = "IMPL=%s" % impl['IMPL']
|
|
for k, v in impl.items():
|
|
if k == 'IMPL': continue
|
|
s += " %s=%s" % (k, v)
|
|
return s
|
|
|
|
all_changes = sys.argv[1:]
|
|
# code changes that are not just to docs
|
|
code_changes = set([c for c in all_changes if not RE_IGNORE.search(c)])
|
|
# actual changes to implementations
|
|
impl_changes = set([c for c in all_changes if RE_IMPL.search(c)])
|
|
# names of changed implementations
|
|
run_impls = set([RE_IMPL.search(c).groups()[0] for c in impl_changes])
|
|
|
|
do_full = (len(code_changes) != len(impl_changes))
|
|
|
|
# If we have non-implementation code changes then we will add all
|
|
# implementations to the test matrix
|
|
if OVERRIDE_IMPLS:
|
|
run_impls = OVERRIDE_IMPLS
|
|
if 'all' in OVERRIDE_IMPLS:
|
|
do_full = True
|
|
|
|
|
|
print("OVERRIDE_IMPLS: %s" % OVERRIDE_IMPLS)
|
|
print("code_changes: %s (%d)" % (code_changes, len(code_changes)))
|
|
print("impl_changes: %s (%d)" % (impl_changes, len(impl_changes)))
|
|
print("run_impls: %s (%d)" % (run_impls, len(run_impls)))
|
|
print("do_full: %s" % do_full)
|
|
|
|
# Load the full implementation description file
|
|
all_impls = yaml.safe_load(open(IMPLS_FILE))
|
|
|
|
# Accumulate and output linux and macos implementations separately
|
|
linux_impls = []
|
|
macos_impls = []
|
|
for impl in all_impls['IMPL']:
|
|
targ = linux_impls
|
|
if 'OS' in impl and impl['OS'] == 'macos':
|
|
targ = macos_impls
|
|
# Run implementations with actual changes first before running
|
|
# other impls triggered by non-impl code changes
|
|
if impl['IMPL'] in run_impls:
|
|
targ.insert(0, impl_text(impl))
|
|
elif do_full:
|
|
targ.append(impl_text(impl))
|
|
|
|
print("::set-output name=do-linux::%s" % json.dumps(len(linux_impls)>0))
|
|
print("::set-output name=do-macos::%s" % json.dumps(len(macos_impls)>0))
|
|
print("::set-output name=linux::{\"IMPL\":%s}" % json.dumps(linux_impls))
|
|
print("::set-output name=macos::{\"IMPL\":%s}" % json.dumps(macos_impls))
|