X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fpecl-ci;a=blobdiff_plain;f=gen-matrix.php;h=1901afbb0131c28b8e51ae3bdf589c0535967c0d;hp=90e0011e555457661d1d5c9b1adca8a4ec203c62;hb=HEAD;hpb=3f32c9f45f15e329d1751cdb58cd411a3a5adfcd diff --git a/gen-matrix.php b/gen-matrix.php index 90e0011..1901afb 100644 --- a/gen-matrix.php +++ b/gen-matrix.php @@ -1,26 +1,145 @@ $values) { - if (is_numeric($key) && is_string($values)) { - $key = $values; - $values = ["no","yes"]; - } - if (empty($apc)) { - // seed - foreach ($values as $val) { - $apc[] = "$key=$val"; - } - } else { - // combine - $cpc = $apc; - $apc = []; - foreach ($values as $val) { - foreach ($cpc as $e) { - $apc[] = "$e $key=$val"; - } - } - } - } - return $apc; +return new class { + function github(array $matrix) { + $idx = function($job_id) { + static $ids = []; + + $parts = explode("-", $job_id); + $count = end($parts); + if (is_numeric($count)) { + unset($parts[key($parts)]); + } + + $base = implode("-", $parts); + if (isset($ids[$base])) { + $ids[$base]++; + } else { + $ids[$base] = 0; + } + $parts[] = $ids[$base]; + + return implode("-", $parts); + }; + + $all_jobs = []; + foreach ($matrix as $id => $array) { + $jobs = []; + foreach ($array as $key => $values) { + if (is_numeric($key) && is_string($values)) { + // duplicate each job and switch on yes/no + if (!$jobs) { + $jobs[$idx($id)][$values] = "yes"; + $jobs[$idx($id)][$values] = "no"; + } else { + foreach (array_keys($jobs) as $job_id) { + $jobs[$job_id][$values] = "yes"; + $job_idx = $idx($job_id); + $jobs[$job_idx] = $jobs[$job_id]; + $jobs[$job_idx][$values] = "no"; + } + } + } else if (is_numeric($key) && is_array($values)) { + // multiplicate each job for each mutually enabled combination of options + $all_mut = []; + foreach ($values as $yes) { + $mut = [$yes => "yes"]; + foreach ($values as $no) { + if ($yes !== $no) { + $mut[$no] = "no"; + } + } + $all_mut[] = $mut; + } + + if (!$jobs) { + foreach ($all_mut as $mut) { + $jobs[$idx($id)] = $mut; + } + } else { + foreach (array_keys($jobs) as $job_id) { + foreach ($all_mut as $i => $mut) { + $mut_job = array_merge($jobs[$job_id], $mut); + if ($i == 0) { + $jobs[$job_id] = $mut_job; + } else { + $jobs[$idx($job_id)] = $mut_job; + } + } + } + } + } else { + // multiplicate all jobs for each value + if (!$jobs) { + foreach ((array) $values as $val) { + $jobs[$idx($id)][$key] = $val; + } + } else { + foreach (array_keys($jobs) as $job_id) { + foreach ((array) $values as $i => $val) { + if ($i == 0) { + $jobs[$job_id][$key] = $val; + } else { + $job_idx = $idx($job_id); + $jobs[$job_idx] = $jobs[$job_id]; + $jobs[$job_idx][$key] = $val; + } + } + } + } + } + } + $all_jobs[] = $jobs; + } + return array_merge(...$all_jobs); + } + function travis(array $matrix) { + $xpc = []; + foreach ($matrix as $id => $array) { + $apc = []; + foreach ($array as $key => $values) { + if (is_numeric($key) && is_string($values)) { + // switch on yes/no + $key = $values; + $values = ["no", "yes"]; + } else if (is_numeric($key) && is_array($values)) { + // mutually enabled options + $vpc = []; + foreach ($values as $yes) { + $mpc = "$yes=yes "; + foreach ($values as $no) { + if ($yes === $no) { + continue; + } + $mpc .= "$no=no "; + } + $vpc[] = $mpc; + } + $key = null; + $values = $vpc; + } + + if (empty($apc)) { + // seed + foreach ((array) $values as $val) { + $apc[] = strlen($key) ? "$key=$val" : $val; + } + } else { + // combine + $cpc = $apc; + $apc = []; + foreach ((array) $values as $val) { + foreach ($cpc as $e) { + $apc[] = strlen($key) ? "$e $key=$val" : "$e $val"; + } + } + } + } + $xpc[$id] = $apc; + } + return $xpc; + } + function __invoke(...$args) { + return $this->travis(...$args); // BC + } };