keep satis proxy up2date
[tine20] / scripts / packaging / satisserver / updateTine20Conf.php
1 <?php
2
3 /**
4  * script to update the tine20.conf file
5  *
6  * * git fetch [both remotes]
7  * * git branch -a [show all branches]
8  * * iterate over all branches newer or equal to 2015.11
9  * * get tine20/composer.json from each branch
10  * * merge data and write it to tine20.conf
11  */
12
13
14 $path = '/home/ubuntu/tine20Repos';
15 $remotes = array('tine20org', 'tine20com');
16
17 foreach($remotes as $r) {
18     $fetchResult = myProcOpen('git fetch ' . $r, $path);
19     if ($fetchResult[0] !== 0) {
20         exit('git fetch failed for ' . $r .': ' . print_r($fetchResult, true));
21     }
22 }
23 unset($fetchResult);
24
25 $branchResult = myProcOpen('git branch -a', $path);
26 if ($branchResult[0] !== 0) {
27     exit('git branch -a failed: ' . print_r($branchResult, true));
28 }
29
30 $branches = explode(PHP_EOL, $branchResult[1]);
31 unset($branchResult);
32
33 $repositories = array();
34 $require = array();
35
36 foreach($branches as $branch) {
37     if (preg_match('/(\d\d\d\d\.\d\d)/', $branch, $match) && version_compare($match[1], '2015.11') >= 0) {
38
39         $gitShowResult = myProcOpen('git show ' . $branch . ':tine20/composer.json', $path);
40         if ($gitShowResult[0] !== 0) {
41             exit('git show failed for branch: ' . $branch . PHP_EOL . print_r($gitShowResult, true));
42         }
43
44         if (($composerJson = json_decode($gitShowResult[1], true)) === NULL || !is_array($composerJson)) {
45             exit('could not json_decode composer.json from branch: ' . $branch . PHP_EOL . $gitShowResult[1]);
46         }
47
48         foreach($composerJson['repositories'] as $repo) {
49             if (!isset($repositories[$repo['type']]))
50                 $repositories[$repo['type']] = array();
51             $repositories[$repo['type']][$repo['url']] = true;
52         }
53
54         foreach($composerJson['require'] as $req => $version) {
55             if (!isset($require[$req]) || version_compare($version, $require[$req]) > 0) {
56                 $require[$req] = $version;
57             }
58         }
59
60         foreach($composerJson['require-dev'] as $req => $version) {
61             if (!isset($require[$req]) || version_compare($version, $require[$req]) > 0) {
62                 $require[$req] = $version;
63             }
64         }
65     }
66 }
67
68 $repositories['composer'] = array('https://packagist.org' => true);
69
70
71 $result = '{
72         "name": "Tine20 Composer Mirror",
73         "homepage": "http://79.99.84.34",
74
75         "archive": {
76                 "directory": "dist1",
77                 "format": "zip"
78         },
79
80         "repositories": [' . PHP_EOL;
81
82 $first = true;
83 foreach($repositories as $type => $data) {
84     foreach($data as $url => $foo) {
85         $url = str_replace('http://gerrit.tine20.com', 'https://gerrit.tine20.com', $url);
86         if (!$first) {
87             $result .= ',';
88         } else {
89             $first = false;
90         }
91
92         $result .= '        {
93             "type": "' . $type . '",
94             "url": "' . $url . '"
95         }';
96     }
97 }
98
99 $result .= '],
100         "require": {' . PHP_EOL;
101
102 $first = true;
103 foreach($require as $name => $version) {
104     if (!$first) {
105         $result .= ',' . PHP_EOL;
106     } else {
107         $first = false;
108     }
109
110     $result .= '            "' . $name .'": "' . $version .'"';
111 }
112
113 $result .= PHP_EOL . '      },' . PHP_EOL . '       "require-dependencies": true' . PHP_EOL . '}';
114
115 echo $result;
116
117
118
119 function myProcOpen($cmd, $path)
120 {
121     $descriptorspec = array(
122         0 => array("pipe", "r"),
123         1 => array("pipe", "w"),
124         2 => array("pipe", "w")
125     );
126
127     $process = proc_open($cmd, $descriptorspec, $pipes, $path);
128
129     $result = array(
130         0 => false,
131         1 => '',
132         2 => ''
133     );
134
135     if (is_resource($process)) {
136         fclose($pipes[0]);
137
138         $result[1] = stream_get_contents($pipes[1]);
139         fclose($pipes[1]);
140
141         $result[2] = stream_get_contents($pipes[2]);
142         fclose($pipes[2]);
143
144         $result[0] = proc_close($process);
145     }
146
147     return $result;
148 }