mirror of
https://github.com/kanaka/mal.git
synced 2024-09-11 13:55:55 +03:00
This adds a event trigger for 'workflow_dispatch' so that a user can trigger, via the web UI, a build/test for a subset of implementations.
63 lines
2.0 KiB
Python
Executable File
63 lines
2.0 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']:
|
|
if do_full or impl['IMPL'] in run_impls:
|
|
if 'OS' in impl and impl['OS'] == 'macos':
|
|
macos_impls.append(impl_text(impl))
|
|
else:
|
|
linux_impls.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))
|