Commit: 416e4c399497215ca495ec8c383762658dc43caa
Author: Anatol Belski <[email protected]> Sat, 14 Sep 2013 21:21:59 +0200
Parents: 9a053e3caa3633f448f5a5d7ea456efb1cdb2d10
Branches: master
Link:
http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=416e4c399497215ca495ec8c383762658dc43caa
Log:
improved the current workflow with regard to mailing
Changed paths:
M client/include/PeclExt.php
M client/script/pecl.php
diff --git a/client/include/PeclExt.php b/client/include/PeclExt.php
index fc5a550..222b0ef 100644
--- a/client/include/PeclExt.php
+++ b/client/include/PeclExt.php
@@ -7,7 +7,7 @@ include_once __DIR__ . '/../include/PeclBranch.php';
class PeclExt
{
- protected $pgk_path;
+ protected $pkg_path;
protected $pkg_basename;
protected $pkg_comp;
protected $name;
@@ -24,32 +24,35 @@ class PeclExt
protected $configure_data = NULL;
protected $non_core_ext_deps = array();
- public function __construct($pgk_path, $build, $force_name = NULL,
$force_version = NULL)
+ public function __construct($pkg_path, $build)
{
- if (!file_exists($pgk_path)) {
- throw new \Exception("'$pgk_path' does not exist");
+ if (!file_exists($pkg_path)) {
+ throw new \Exception("'$pkg_path' does not exist");
}
- if ('.tgz' == substr($pgk_path, -4)) {
- $this->pkg_basename = basename($pgk_path, '.tgz');
+ if ('.tgz' == substr($pkg_path, -4)) {
+ $this->pkg_basename = basename($pkg_path, '.tgz');
$this->pkg_comp = 'tgz';
- } else if ('.tar.gz' == substr($pgk_path, -7)) {
- $this->pkg_basename = basename($pgk_path, '.tar.gz');
+ } else if ('.tar.gz' == substr($pkg_path, -7)) {
+ $this->pkg_basename = basename($pkg_path, '.tar.gz');
$this->pkg_comp = 'tgz';
- } else if ('.zip' == substr($pgk_path, -4)) {
- $this->pkg_basename = basename($pgk_path, '.zip');
+ } else if ('.zip' == substr($pkg_path, -4)) {
+ $this->pkg_basename = basename($pkg_path, '.zip');
$this->pkg_comp = 'zip';
} else {
throw new \Exception("Unsupported compression format,
please pass tgz, tar.gz or zip");
}
- $this->pgk_path = $pgk_path;
+ $this->pkg_path = $pkg_path;
$this->build = $build;
+ }
+
+ public function init($force_name = NULL, $force_version = NULL)
+ {
$this->unpack();
$this->check();
-
$this->name = $force_name;
$this->version = $force_version;
@@ -100,7 +103,6 @@ class PeclExt
$this->name = strtolower($this->name);
$this->version = strtolower($this->version);
-
}
public function getPackageName()
@@ -122,8 +124,8 @@ class PeclExt
throw new \Exception("Couldn't create temporary dir");
}
- $tmp_name = $tmp_path . DIRECTORY_SEPARATOR .
basename($this->pgk_path);
- if (!copy($this->pgk_path, $tmp_name)) {
+ $tmp_name = $tmp_path . DIRECTORY_SEPARATOR .
basename($this->pkg_path);
+ if (!copy($this->pkg_path, $tmp_name)) {
throw new \Exception("Couldn't copy the tarball to
'$tmp_name'");
}
@@ -135,7 +137,7 @@ class PeclExt
chdir($tmp_path);
- $gzip_cmd = $this->gzip_cmd . ' -df ' .
escapeshellarg(basename($this->pgk_path));
+ $gzip_cmd = $this->gzip_cmd . ' -df ' .
escapeshellarg(basename($this->pkg_path));
system($gzip_cmd, $ret);
if ($ret) {
throw new \Exception("Failed to guzip the tarball");
@@ -161,7 +163,7 @@ class PeclExt
throw new \Exception("Couldn't create temporary dir");
}
- $unzip_cmd = $this->unzip_cmd . ' ' .
escapeshellarg($this->pgk_path) . ' -d ' . $tmp_path;
+ $unzip_cmd = $this->unzip_cmd . ' ' .
escapeshellarg($this->pkg_path) . ' -d ' . $tmp_path;
system($unzip_cmd, $ret);
if ($ret) {
throw new \Exception("Failed to unzip the package");
@@ -213,7 +215,7 @@ class PeclExt
$this->package_xml = new
\SimpleXMLElement($package_xml_path, 0, true);
}
- $this->pgk_path = NULL;
+ $this->pkg_path = NULL;
return $this->tmp_extract_path;
}
@@ -540,23 +542,43 @@ class PeclExt
return $zip_file;
}
- public function mailMaintainers($success, array $logs)
+ public function getToEmail()
{
- $url = 'http://windows.php.net/downloads/pecl/' . $this->name .
'/' . $this->version;
+ $to = NULL;
+ $leads = $this->getPackageXmlProperty("lead");
+ foreach ($leads as $lead) {
+ if ((string)$lead->active == 'yes') {
+ $to = (string)$lead->email;
+ }
+ }
+
+ return $to;
+ }
+
+ public function mailMaintainers($success, $is_snap, array $logs,
$force_email = NULL)
+ {
+ $seg = $is_snap ? 'snaps' : 'releases';
+ $url = 'http://windows.php.net/downloads/pecl/' . $seg . '/' .
$this->name . '/' . $this->version;
+
if ($success) {
- $msg = "PECL Windows build succeeded\n\n";
- $msg .= "The package was uploaded to $url/" .
$this->getPackageName() . ".zip\n";
+ $msg = "PECL Windows build for " .
$this->getPackageName() . " succeeded\n\n";
+ $msg .= "The package was uploaded to $url/" .
$this->getPackageName() . ".zip\n\n";
} else {
- $msg = "PECL Windows build failed\n\n";
+ $msg = "PECL Windows build for " .
$this->getPackageName() . " failed\n\n";
+ }
+ $msg .= "The logs was uploaded to $url/logs/" .
$this->getPackageName() . "-logs.zip\n\n";
+ if (!$success) {
+ $msg .= "Please look into the logs for what's to be
fixed. ";
+ $msg .= "You can ask for help on [email protected]
or [email protected]. \n";
}
- $msg .= "For logs see $url/logs/" . $this->getPackageName() .
"-logs.zip\n";
+ $msg .= "Have a nice day :)\n";
- $msg . "\nHave a nice day\n";
+ $to = $force_email ? $force_email : $this->getToEmail();
- rm\xmail(
- 'pecl@windows',
- '[email protected]', /* XXX try to get dev mails from the
package.xml */
- '[PECL-DEV] Windows build: ' . $this->name . '-' .
$this->version,
+ return xmail(
+ MAIL_FROM,
+ $to,
+ '[PECL-DEV] Windows build: ' . $this->getPackageName(),
$msg,
$logs
);
diff --git a/client/script/pecl.php b/client/script/pecl.php
index 1f9a4c1..f55a505 100644
--- a/client/script/pecl.php
+++ b/client/script/pecl.php
@@ -8,7 +8,7 @@ use rmtools as rm;
$shortopts = NULL; //"c:p:mu";
-$longopts = array("config:", "package:", "mail", "upload", "is-snap",
"force-name:", "force-version:");
+$longopts = array("config:", "package:", "mail", "upload", "is-snap",
"force-name:", "force-version:", "force-email:");
$options = getopt($shortopts, $longopts);
@@ -19,6 +19,7 @@ $upload = isset($options['upload']);
$is_snap = isset($options['is-snap']);
$force_name = isset($options['force-name']) ? $options['force-name'] : NULL;
$force_version = isset($options['force-version']) ? $options['force-version']
: NULL;
+$force_email = isset($options['force-email']) ? $options['force-email'] : NULL;
if (NULL == $branch_name || NULL == $pkg_path) {
echo "Usage: pecl.php [OPTION] ..." . PHP_EOL;
@@ -29,20 +30,24 @@ if (NULL == $branch_name || NULL == $pkg_path) {
echo " --is-snap We upload to releases by default, but this one
goes to snaps, optional." . PHP_EOL;
echo " --force-name Force this name instead of reading the package
data, optional." . PHP_EOL;
echo " --force-version Force this name instead of reading the package
data, optional." . PHP_EOL;
+ echo " --force-email Send the results to this email instead of any
from package.xml, optional." . PHP_EOL;
echo PHP_EOL;
echo "Example: pecl --config=php55_x64
--package=c:\pecl_in_pkg\some-1.0.0.tgz" . PHP_EOL;
echo PHP_EOL;
exit(0);
}
+define('MAIL_FROM', '[email protected]');
+define('MAIL_TO_FALLBACK', '[email protected]');
+
$config_path = __DIR__ . '/../data/config/pecl/' . $branch_name . '.ini';
$branch = new rm\PeclBranch($config_path);
$branch_name = $branch->config->getName();
-echo "Running <$config_path>" . PHP_EOL;
-echo "\t$branch_name" . PHP_EOL;
+echo "Run started for <$config_path>" . PHP_EOL;
+echo "Branch <$branch_name>" . PHP_EOL;
$build_dir_parent = $branch->config->getBuildLocation();
@@ -56,7 +61,7 @@ $builds = $branch->getBuildList('windows');
/* be optimistic */
$was_errors = false;
-echo "Using <$pkg_path>" . PHP_EOL;
+echo "Using <$pkg_path>" . PHP_EOL . PHP_EOL;
/* Each windows configuration from the ini for the given PHP version will be
built */
foreach ($builds as $build_name) {
@@ -72,24 +77,63 @@ foreach ($builds as $build_name) {
$build->setSourceDir($build_src_path);
try {
- $ext = new rm\PeclExt($pkg_path, $build, $force_name,
$force_version);
+ $ext = new rm\PeclExt($pkg_path, $build);
+ } catch (Exception $e) {
+ echo 'Error: ' . $e->getMessage() . PHP_EOL;
+
+ if ($mail_maintainers) {
+ rm\xmail(
+ MAIL_FROM,
+ /* no chance to have the maintainers mailto at
this stage */
+ $force_email ? $force_email: MAIL_TO_FALLBACK,
+ '[PECL-DEV] Windows build: ' .
basename($pkg_path),
+ "PECL build failed before it could start for
the reasons below:\n\n" . $e->getMessage()
+ );
+ }
+
+ $build->clean();
+ $was_errors = true;
+
+ unset($ext);
+ unset($build);
+
+ /* no sense to continue as something in ext setup went wrong */
+ continue;
+ }
+
+ try {
+ $ext->init($force_name, $force_version);
$ext->setupNonCoreExtDeps();
+ $ext->putSourcesIntoBranch();
} catch (Exception $e) {
- echo $e->getMessage() . PHP_EOL;
+ echo 'Error: ' . $e->getMessage() . PHP_EOL;
+ $was_errors = true;
- rm\xmail(
- 'pecl@windows',
- '[email protected]', /* XXX try to get dev mails from the
package.xml */
- '[PECL-DEV] Windows build: ' . basename($pkg_path),
- "PECL build failed before it could start for the
reasons below:\n\n" . $e->getMessage()
- );
+ if ($mail_maintainers) {
+ $maintainer_mailto = $force_email;
+ if (!$maintainer_mailto) {
+ $maintainer_mailto = $ext->getToEmail();
+ if (!$maintainer_mailto) {
+ $maintainer_mailto = MAIL_TO_FALLBACK;
+ }
+ }
+
+ rm\xmail(
+ MAIL_FROM,
+ $maintainer_mailto,
+ '[PECL-DEV] Windows build: ' .
basename($pkg_path),
+ "PECL build failed before it could start for
the reasons below:\n\n" . $e->getMessage()
+ );
+ }
$build->clean();
+ $ext->clean();
$was_errors = true;
- /* XXX mail the ext dev what the error was, if it's something
in the check
- phase like missing config.w32, it's interesting for
sure.
- and no sense to continue as something in ext setup went
wrong */
+ unset($ext);
+ unset($build);
+
+ /* no sense to continue as something in ext setup went wrong */
continue;
}
@@ -105,11 +149,9 @@ foreach ($builds as $build_name) {
mkdir($toupload_dir . '/logs', 0655, true);
}
- echo "Configured for '$ext_build_name'" . PHP_EOL;
+ echo "Configured for <$ext_build_name>" . PHP_EOL;
echo "Running build in <$build_src_path>" . PHP_EOL;
try {
- $ext->putSourcesIntoBranch();
-
$build->buildconf();
$ext_conf_line = $ext->getConfigureLine();
@@ -129,7 +171,7 @@ foreach ($builds as $build_name) {
$build->make();
//$html_make_log = $build->getMakeLogParsed();
} catch (Exception $e) {
- echo $e->getMessage() . PHP_EOL;
+ echo 'Error: ' . $e->getMessage() . PHP_EOL;
$build_error++;
}
@@ -156,7 +198,7 @@ foreach ($builds as $build_name) {
echo "Packaging the binaries" . PHP_EOL;
$pkg_file = $ext->preparePackage();
} catch (Exception $e) {
- echo $e->getMessage() . PHP_EOL;
+ echo 'Error: ' . $e->getMessage() . PHP_EOL;
$build_error++;
}
@@ -171,7 +213,7 @@ foreach ($builds as $build_name) {
)
);
} catch (Exception $e) {
- echo $e->getMessage() . PHP_EOL;
+ echo 'Error: ' . $e->getMessage() . PHP_EOL;
$build_error++;
}
@@ -199,17 +241,28 @@ foreach ($builds as $build_name) {
echo "Upload failed" . PHP_EOL;
}
} catch (Exception $e) {
- echo $e->getMessage();
+ echo 'Error . ' . $e->getMessage() . PHP_EOL;
$upload_success = false;
}
}
- if (0 && $mail_maintainers) {
- echo "Mailing logs";
+ if ($mail_maintainers) {
+ echo "Mailing logs" . PHP_EOL;
try {
- $ext->mailMaintainers(0 == $build_error,
array($logs_zip));
+ $maintainer_mailto = $force_email;
+ if (!$maintainer_mailto) {
+ $maintainer_mailto = $ext->getToEmail();
+ if (!$maintainer_mailto) {
+ $maintainer_mailto = MAIL_TO_FALLBACK;
+ }
+ }
+
+ $res = $ext->mailMaintainers(0 == $build_error,
$is_snap, array($logs_zip), $maintainer_mailto);
+ if (!$res) {
+ throw new \Exception("Mail operation failed");
+ }
} catch (Exception $e) {
- echo $e->getMessage() . PHP_EOL;
+ echo 'Error: ' . $e->getMessage() . PHP_EOL;
}
}
@@ -220,12 +273,12 @@ foreach ($builds as $build_name) {
unset($ext);
unset($build);
- echo PHP_EOL;
+ echo "Done." . PHP_EOL . PHP_EOL;
$was_errors = $was_errors || $build_error > 0;
}
-echo "Done." . PHP_EOL;
+echo "Run finished." . PHP_EOL . PHP_EOL;
exit((int)$was_errors);--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php