Commit:    726eafa89d81cabf05a56c10d1ebe06ab7dc8590
Author:    Anatol Belski <[email protected]>         Wed, 6 May 2015 13:42:32 +0200
Parents:   262500301bf7678dec2569ef8ebaec3254646c78
Branches:  master pecl_legacy

Link:       
http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=726eafa89d81cabf05a56c10d1ebe06ab7dc8590

Log:
basic build uploads for pickle

Changed paths:
  M  client/include/Tools.php
  M  client/script/pickle.php


Diff:
diff --git a/client/include/Tools.php b/client/include/Tools.php
index 77d02e4..8bcb68a 100644
--- a/client/include/Tools.php
+++ b/client/include/Tools.php
@@ -471,3 +471,103 @@ function upload_pecl_pkg_ftp_curl($files, $logs, $target)
     return true;
 }
 
+function upload_pickle_pkg_ftp_curl($files, $logs, $target)
+{
+       include __DIR__ . '/../data/config/credentials_ftps.php';
+
+       $ftp = ftp_connect($ftp_server);
+       if (!$ftp) {
+               echo "Cannot connect to $ftp_server\n";
+               return false;
+       }
+       $login_result = ftp_login($ftp, $user_pickle, $password_pickle);
+       if (!$login_result) {
+               return false;
+       }
+       
+       $try = 0;
+       do {
+               $status = ftp_make_directory($ftp, $target . '/logs/');
+               $try++;
+       } while ( $status === false && $try < 10 );
+       ftp_close($ftp);
+
+       $curl = array();
+
+       $ftp_path   = $target;
+       $ftp_user   = $user_pickle;
+       $ftp_password   = $password_pickle;
+
+       if ($ftp_path[0] != '/') {
+               $ftp_path = '/' . $ftp_path;
+       }
+       $mh = \curl_multi_init();
+
+       $files = is_array($files) ? $files : array($files);
+       $offset = 0;
+       foreach ($files as $i => $local_file) {
+
+               $curl[$i] = $ch =  \curl_init();
+               $fp = fopen($local_file, "rb");
+               $local_file = basename($local_file);
+
+               $remoteurl = 
"ftps://${ftp_user}:${ftp_password}@${ftp_server}${ftp_path}/${local_file}";
+
+               \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+               \curl_setopt($ch, CURLOPT_URL, $remoteurl);
+               \curl_setopt($ch, CURLOPT_UPLOAD, 1);
+               \curl_setopt($ch, CURLOPT_INFILE, $fp);
+               \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . 
$ftp_password);
+
+               \curl_multi_add_handle ($mh, $ch);
+               $offset++;
+       }
+
+       $files = is_array($logs) ? $logs : array($logs);
+       foreach ($files as $i => $local_file) {
+
+               $ch = $curl[$offset + $i] = \curl_init();
+               $fp = fopen($local_file, "rb");
+               $local_file = basename($local_file);
+
+               $remoteurl = 
"ftps://${ftp_user}:${ftp_password}@${ftp_server}${ftp_path}/logs/${local_file}";
+
+               \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+               \curl_setopt($ch, CURLOPT_URL, $remoteurl);
+               \curl_setopt($ch, CURLOPT_UPLOAD, 1);
+               \curl_setopt($ch, CURLOPT_INFILE, $fp);
+               \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . 
$ftp_password);
+
+               \curl_multi_add_handle ($mh, $ch);
+       }
+
+       $retry = 0;
+       do {
+               $err = 0;
+               do {
+                       \curl_multi_exec($mh,$active);
+                       $info = curl_multi_info_read($mh);
+                       if ($info !== false) {
+                               curl_multi_remove_handle($mh, $info['handle']);
+                               if ($info['result'] != 0)  {
+                                       $err = 1;
+//                                     echo curl_getinfo($info['handle'], 
CURLINFO_EFFECTIVE_URL) . "\n";
+//                                     echo curl_error($info['handle']) . 
"\n\n";
+                                       curl_multi_add_handle($mh, 
$info['handle']);
+                               }
+                       }
+               } while ($active);
+               $retry++;
+       } while ($err != 0 && $retry < 10);
+
+       foreach ($curl as $ch) {
+               \curl_multi_remove_handle($mh, $ch);
+               if (\curl_errno($ch) != 0) {
+                       echo \curl_error($ch) . "\n";
+               }
+               \curl_close($ch);
+       }
+       //\curl_multi_close($mh);
+    return true;
+}
+
diff --git a/client/script/pickle.php b/client/script/pickle.php
index a7a6b34..dfe851d 100644
--- a/client/script/pickle.php
+++ b/client/script/pickle.php
@@ -57,6 +57,8 @@ echo "Using <$pkg_path>" . PHP_EOL . PHP_EOL;
 
 foreach ($builds as $build_name) {
 
+       $build_error = 0;
+
        echo "Starting build $build_name" . PHP_EOL;
 
        //$build_config = $branch->config->getBuildFromName($build_name);
@@ -85,13 +87,15 @@ foreach ($builds as $build_name) {
        echo "Running pickle build" . PHP_EOL;
 
        try {
-       $ret = $build->build($ext);
+               $ret = $build->build($ext);
        } catch (Exception $e) {
                echo 'Error: ' . $e->getMessage() . PHP_EOL;
 
                $ret = array("return_value" => 1, "log" => "");
                /* send error mail*/
 
+               $build_error++;
+
                continue;
        }
 
@@ -108,6 +112,8 @@ foreach ($builds as $build_name) {
                echo "Build failed" . PHP_EOL;
                echo $ret["log"];
 
+               $build_error++;
+
                continue;
        }
 
@@ -117,6 +123,41 @@ foreach ($builds as $build_name) {
        // add the deps license to the pickle archive ... or should pickle do 
that?
 
        /* upload logs and builds */
+
+       $fl_base = "php_" . $ext->getName() . "-" . $ext->getVersion() . "-" . 
$build->branch->config->getBranch() . "-" . ($build->thread_safe ? "ts" : 
"nts") . "-" . $build->compiler . "-" . $build->architecture;
+
+       $logs_zip = realpath(TMP_DIR . DIRECTORY_SEPARATOR . 
"$fl_base-logs.zip");
+       $pkg_file = realpath(TMP_DIR . DIRECTORY_SEPARATOR . "$fl_base.zip");
+
+       $upload_success = true;
+       if ($upload) {
+               try {
+                       $root = $is_snap ? 'snaps' : 'releases';
+                       $target = '/' . $root . '/' .  $ext->getName() . '/' . 
$ext->getVersion();
+
+                       $pkgs_to_upload = $build_error ? array() : 
array($pkg_file);
+
+                       if ($build_error) {
+                               echo "Uploading logs" . PHP_EOL;
+                       } else {
+                               echo "Uploading '$pkg_file' and logs" . PHP_EOL;
+                       }
+
+                       if ($build_error && !file_exists($logs_zip)) {
+                               throw new Exception("Logs wasn't packaged, 
nothing to upload");
+                       }
+
+                       if (rm\upload_pickle_pkg_ftp_curl($pkgs_to_upload, 
array($logs_zip), $target)) {
+                               echo "Upload succeeded" . PHP_EOL;
+                       } else {
+                               echo "Upload failed" . PHP_EOL;
+                       }
+               } catch (Exception $e) {
+                       echo 'Error . ' . $e->getMessage() . PHP_EOL;
+                       $upload_success = false;
+               }
+       }
+
        /* notify pickle */
 
        //var_dump($build_name);


--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to