1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-11 13:55:55 +03:00
mal/get-ci-matrix.py
Joel Martin cbb8b57319 Add user dispatchable workflow definition.
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.
2021-04-21 14:23:30 -05:00

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))