keep satis proxy up2date
authorPaul Mehrer <p.mehrer@metaways.de>
Tue, 6 Sep 2016 09:38:11 +0000 (11:38 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Sun, 11 Sep 2016 16:17:41 +0000 (18:17 +0200)
Change-Id: I7d1f93f5776176fd8dc1bc9f2c1f1846eb084d86
Reviewed-on: http://gerrit.tine20.com/customers/3547
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
Tested-by: Philipp Schüle <p.schuele@metaways.de>
scripts/packaging/satisserver/init tasks [new file with mode: 0644]
scripts/packaging/satisserver/updateTine20Conf.php [new file with mode: 0644]

diff --git a/scripts/packaging/satisserver/init tasks b/scripts/packaging/satisserver/init tasks
new file mode 100644 (file)
index 0000000..5cec155
--- /dev/null
@@ -0,0 +1,15 @@
+git init .
+git remote add tine20com https://gerrit.tine20.com/customers/tine20.com
+git remote add tine20org https://gerrit.tine20.org/tine20/tine20
+
+git fetch tine20com
+git fetch tine20org
+git branch -a
+git show remotes/tine20com/2016.11-develop:tine20/composer.json > ./foo1
+
+cronjobs:
+# try to build conf file, if successfull, rebuild satis
+0 */4 * * * php /home/ubuntu/updateTine20Conf.php > /home/ubuntu/tine20.conf && /home/ubuntu/satis/bin/satis build /home/ubuntu/tine20.conf /home/ubuntu/tine20Mirror
+
+# check that there are json files newer than 10 days, then delete all files older than 10 days
+23 3 * * * /bin/bash -c 'expr `find /home/ubuntu/tine20Mirror/include/ -mtime -10 -type f | grep -c json` ">" 0 && find /home/ubuntu/tine20Mirror/include/ -mtime +10 -type f | xargs rm' > /dev/null
diff --git a/scripts/packaging/satisserver/updateTine20Conf.php b/scripts/packaging/satisserver/updateTine20Conf.php
new file mode 100644 (file)
index 0000000..4a7c419
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+
+/**
+ * script to update the tine20.conf file
+ *
+ * * git fetch [both remotes]
+ * * git branch -a [show all branches]
+ * * iterate over all branches newer or equal to 2015.11
+ * * get tine20/composer.json from each branch
+ * * merge data and write it to tine20.conf
+ */
+
+
+$path = '/home/ubuntu/tine20Repos';
+$remotes = array('tine20org', 'tine20com');
+
+foreach($remotes as $r) {
+    $fetchResult = myProcOpen('git fetch ' . $r, $path);
+    if ($fetchResult[0] !== 0) {
+        exit('git fetch failed for ' . $r .': ' . print_r($fetchResult, true));
+    }
+}
+unset($fetchResult);
+
+$branchResult = myProcOpen('git branch -a', $path);
+if ($branchResult[0] !== 0) {
+    exit('git branch -a failed: ' . print_r($branchResult, true));
+}
+
+$branches = explode(PHP_EOL, $branchResult[1]);
+unset($branchResult);
+
+$repositories = array();
+$require = array();
+
+foreach($branches as $branch) {
+    if (preg_match('/(\d\d\d\d\.\d\d)/', $branch, $match) && version_compare($match[1], '2015.11') >= 0) {
+
+        $gitShowResult = myProcOpen('git show ' . $branch . ':tine20/composer.json', $path);
+        if ($gitShowResult[0] !== 0) {
+            exit('git show failed for branch: ' . $branch . PHP_EOL . print_r($gitShowResult, true));
+        }
+
+        if (($composerJson = json_decode($gitShowResult[1], true)) === NULL || !is_array($composerJson)) {
+            exit('could not json_decode composer.json from branch: ' . $branch . PHP_EOL . $gitShowResult[1]);
+        }
+
+        foreach($composerJson['repositories'] as $repo) {
+            if (!isset($repositories[$repo['type']]))
+                $repositories[$repo['type']] = array();
+            $repositories[$repo['type']][$repo['url']] = true;
+        }
+
+        foreach($composerJson['require'] as $req => $version) {
+            if (!isset($require[$req]) || version_compare($version, $require[$req]) > 0) {
+                $require[$req] = $version;
+            }
+        }
+
+        foreach($composerJson['require-dev'] as $req => $version) {
+            if (!isset($require[$req]) || version_compare($version, $require[$req]) > 0) {
+                $require[$req] = $version;
+            }
+        }
+    }
+}
+
+$repositories['composer'] = array('https://packagist.org' => true);
+
+
+$result = '{
+        "name": "Tine20 Composer Mirror",
+        "homepage": "http://79.99.84.34",
+
+        "archive": {
+                "directory": "dist1",
+                "format": "zip"
+        },
+
+        "repositories": [' . PHP_EOL;
+
+$first = true;
+foreach($repositories as $type => $data) {
+    foreach($data as $url => $foo) {
+        $url = str_replace('http://gerrit.tine20.com', 'https://gerrit.tine20.com', $url);
+        if (!$first) {
+            $result .= ',';
+        } else {
+            $first = false;
+        }
+
+        $result .= '        {
+            "type": "' . $type . '",
+            "url": "' . $url . '"
+        }';
+    }
+}
+
+$result .= '],
+        "require": {' . PHP_EOL;
+
+$first = true;
+foreach($require as $name => $version) {
+    if (!$first) {
+        $result .= ',' . PHP_EOL;
+    } else {
+        $first = false;
+    }
+
+    $result .= '            "' . $name .'": "' . $version .'"';
+}
+
+$result .= PHP_EOL . '      },' . PHP_EOL . '       "require-dependencies": true' . PHP_EOL . '}';
+
+echo $result;
+
+
+
+function myProcOpen($cmd, $path)
+{
+    $descriptorspec = array(
+        0 => array("pipe", "r"),
+        1 => array("pipe", "w"),
+        2 => array("pipe", "w")
+    );
+
+    $process = proc_open($cmd, $descriptorspec, $pipes, $path);
+
+    $result = array(
+        0 => false,
+        1 => '',
+        2 => ''
+    );
+
+    if (is_resource($process)) {
+        fclose($pipes[0]);
+
+        $result[1] = stream_get_contents($pipes[1]);
+        fclose($pipes[1]);
+
+        $result[2] = stream_get_contents($pipes[2]);
+        fclose($pipes[2]);
+
+        $result[0] = proc_close($process);
+    }
+
+    return $result;
+}
\ No newline at end of file