4 function github(array $matrix) {
5 $idx = function($job_id) {
8 $parts = explode("-", $job_id);
10 if (is_numeric($count)) {
11 unset($parts[key($parts)]);
14 $base = implode("-", $parts);
15 if (isset($ids[$base])) {
20 $parts[] = $ids[$base];
22 return implode("-", $parts);
26 foreach ($matrix as $id => $array) {
28 foreach ($array as $key => $values) {
29 if (is_numeric($key) && is_string($values)) {
30 // duplicate each job and switch on yes/no
32 $jobs[$idx($id)][$values] = "yes";
33 $jobs[$idx($id)][$values] = "no";
35 foreach (array_keys($jobs) as $job_id) {
36 $jobs[$job_id][$values] = "yes";
37 $job_idx = $idx($job_id);
38 $jobs[$job_idx] = $jobs[$job_id];
39 $jobs[$job_idx][$values] = "no";
42 } else if (is_numeric($key) && is_array($values)) {
43 // multiplicate each job for each mutually enabled combination of options
45 foreach ($values as $yes) {
46 $mut = [$yes => "yes"];
47 foreach ($values as $no) {
56 foreach ($all_mut as $mut) {
57 $jobs[$idx($id)] = $mut;
60 foreach (array_keys($jobs) as $job_id) {
61 foreach ($all_mut as $i => $mut) {
62 $mut_job = array_merge($jobs[$job_id], $mut);
64 $jobs[$job_id] = $mut_job;
66 $jobs[$idx($job_id)] = $mut_job;
72 // multiplicate all jobs for each value
74 foreach ((array) $values as $val) {
75 $jobs[$idx($id)][$key] = $val;
78 foreach (array_keys($jobs) as $job_id) {
79 foreach ((array) $values as $i => $val) {
81 $jobs[$job_id][$key] = $val;
83 $job_idx = $idx($job_id);
84 $jobs[$job_idx] = $jobs[$job_id];
85 $jobs[$job_idx][$key] = $val;
94 return array_merge(...$all_jobs);
96 function travis(array $matrix) {
98 foreach ($matrix as $id => $array) {
100 foreach ($array as $key => $values) {
101 if (is_numeric($key) && is_string($values)) {
104 $values = ["no", "yes"];
105 } else if (is_numeric($key) && is_array($values)) {
106 // mutually enabled options
108 foreach ($values as $yes) {
110 foreach ($values as $no) {
124 foreach ((array) $values as $val) {
125 $apc[] = strlen($key) ?
"$key=$val" : $val;
131 foreach ((array) $values as $val) {
132 foreach ($cpc as $e) {
133 $apc[] = strlen($key) ?
"$e $key=$val" : "$e $val";
142 function __invoke(...$args) {
143 return $this->travis(...$args); // BC