deploy/svn/export.php

122 lines
3.4 KiB
PHP
Raw Normal View History

2017-03-10 15:02:09 +01:00
#!/usr/bin/php
<?php
$shortopts = '';
$longopts = array(
'help',
'projet:',
'tree:',
'deploy',
);
// --- Paramètres
$options = getopt($shortopts, $longopts);
if (array_key_exists('help', $options) || $options === false || count($options) == 0) {
?>
Extraction d'un projet et création d'une archive
Utilisation : <?php echo $argv[0]; ?> {options}
projet : nom du projet
tree : trunk, branches/X, tags/X (par defaut : trunk)
deploy : Extraction pour déploiement sans compression
<?php
exit;
}
// --- Variables
$reposLocal = true;
$reposPath = "file:///mnt/data/subversion";
$reposUser = '';
$reposPass = '';
$exportPath = '/home/vhosts/deploy/export';
define('COMPOSER_HOME', '/home/vhosts/deploy/composer');
define('COMPRESS', 'xz');
// --- Execution
$projet = $options['projet'];
$version = null;
if (array_key_exists('tree', $options)) {
$version = trim($options['tree'], '/');
}
if (empty($version)){
$working_copy = 'trunk';
} else {
$working_copy = $version;
}
// --- Export SVN
echo date('Y-m-d H:i:s')." - Export SVN\n";
if (array_key_exists('deploy', $options)) {
$archiveProjet = $projet;
} else {
$exportPath.= "/archives";
$pathProjet = explode('/', $working_copy);
switch($pathProjet[0]){
case 'trunk':
$archiveProjet = $projet.'-trunk';
break;
case 'branches':
$archiveProjet = $projet.'-'.$pathProjet[1].'-'.date('YmdHis');
break;
case 'tags':
$archiveProjet = $projet.'-'.$pathProjet[count($pathProjet)-1];
if ( count($pathProjet) > 2 ) {
if ( in_array($pathProjet[1], array('staging', 'release')) ) {
$archiveProjet.= '-'.$pathProjet[1];
}
}
break;
}
}
if (!file_exists($exportPath)){
mkdir($exportPath, 0755, true);
}
if (file_exists($exportPath.'/'.$archiveProjet)) {
passthru('rm -rf '.$exportPath.'/'.$archiveProjet);
}
$reposPath.= '/'.$projet.'/'.$working_copy;
if ($reposLocal) {
passthru('svn export -q '.$reposPath.' '.$exportPath.'/'.$archiveProjet);
} else {
passthru('svn export --username '.$reposUser.' --password '.$reposPass.' --trust-server-cert -q '.
$reposPath.' '.$exportPath.'/'.$archiveProjet);
}
if (!file_exists($exportPath.'/'.$archiveProjet)){
echo date('Y-m-d H:i:s')." - Erreur\n";
exit(1);
}
// --- Composer
if (file_exists($exportPath.'/'.$archiveProjet.'/composer.lock')) {
putenv('COMPOSER_HOME='.COMPOSER_HOME);
passthru('composer install --no-dev --optimize-autoloader --no-interaction --working-dir '.$exportPath.'/'.$archiveProjet);
}
// --- Deploiement, pas de compression
if (array_key_exists('deploy', $options)) {
exit(0);
}
// --- Création de l'archive
echo date('Y-m-d H:i:s')." - Création de l'archive\n";
if (COMPRESS == 'gz'){
$options = 'cfz';
$ext = 'gz';
}elseif (COMPRESS == 'bz2'){
$options = 'cfj';
$ext = 'bz2';
} elseif (COMPRESS == 'xz') {
$options = 'cfJ';
$ext = 'xz';
}
$cmd = 'tar '.$options.' '. $exportPath.'/'.$archiveProjet.'.tar.'.$ext.' --directory='.$exportPath.' '.$archiveProjet;
exec($cmd);
if (!file_exists($exportPath.'/'.$archiveProjet.'.tar.'.$ext)){
echo date('Y-m-d H:i:s')." - Erreur\n";
exit(1);
}
// --- Suppression des fichiers
echo date('Y-m-d H:i:s')." - Suppression des fichiers\n";
exec('rm -rf '.$exportPath.'/'.$archiveProjet);
echo date('Y-m-d H:i:s')." - Fichier : ".$exportPath.'/'.$archiveProjet.'.tar.'.$ext."\n";