Commit f85e6c01 authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Passage de paramètres possibles pour toutes les étapes d'install ou de MAJ

parent 5fe184f1
......@@ -9,8 +9,10 @@
* les formules des établissements concernés ont été modifiées pour tenir compte de cette nouveauté.
* les heures de décharge ne sont plus gérées en tant que telles, mais impactent le paramètre "Dépassement de service dû sans HC"
* il est maintenant possible de personnaliser les structures gérées dans l'interface de test.
* Possibilité de saisir le taux de charges patronales directement dans l'IHM d'administration des statuts des intervenants
* Lorsqu'on utilise la commande ./bin/ose creer-utilisateur et que l'on demande à créer un intervenant, la feuille de route s'initialisera dans la foulée
* Possibilité de saisir le taux de charges patronales directement dans l'IHM d'administration des statuts des intervenants.
* Lorsqu'on utilise la commande ./bin/ose creer-utilisateur et que l'on demande à créer un intervenant, la feuille de route s'initialisera dans la foulée.
* Possibilité de définir des paramètres (version, etc.) avant les mises à jour de l'application afin de pouvoir automatiser à 100% les processue d'installation et de mise à jour.
* Possibilité de mettre à jour OSE vers une branche et plus uniquement vers un TAG de version (utile pour les développeurs ou en test)
## Correction de bugs
......
<?php
$actions = [
"update" => "Mise à jour de l'application",
"update" => "Mise à jour de l'application"
. "\n\t--maintenance=no : pas de prompt pour être averti du mode maintenance"
. "\n\t--version=<version cible> : Met à jour directement vers la version indiquée"
,
"notifier-indicateurs" => "Envoi des mails relatifs aux indicateurs",
"synchronisation" => "<job> : Effectue la synchronisation des données pour le <job> transmis",
"chargens-calcul-effectifs" => "Calcul des effectifs du module Charges",
......@@ -12,6 +15,9 @@ $actions = [
"maj-public-links" => "Mise à jour des liens vers les répertoires publics des dépendances",
"clear-cache" => "Vidage du cache de l'application",
"test-bdd" => "Test d'accès à la base de données",
"install-bdd" => "Installe la base de données"
. "\n\t--oseappli-pwd=<votre mdp> : mot de passe de l'utilisateur oseappli"
,
"update-bdd" => "Mise à jour de la base de données de l'application (sans les fichiers)",
];
$actionsDev = [
......
......@@ -4,14 +4,13 @@
$c->println("\nInstallation de la base de données", $c::COLOR_LIGHT_CYAN);
if (!$oa->bddIsOk($msg)) {
$c->printDie("Impossible d'accéder à la base de données : $msg!"
."\nVeuillez contrôler les paramètres de configurations entrés dans le fichier confg.local.php s'il vous plaît, avant de refaire une tentative d'installation de la base de données.");
. "\nVeuillez contrôler les paramètres de configurations entrés dans le fichier confg.local.php s'il vous plaît, avant de refaire une tentative d'installation de la base de données.");
}
$bdd = $oa->getBdd();
$schema = new \BddAdmin\Schema($bdd);
/* Mise en place du schéma de la BDD */
$c->println("\n" . 'Création des définitions de la base de données', $c::COLOR_LIGHT_PURPLE);
......@@ -23,7 +22,6 @@ $schema->setLogger($scl);
$schema->create($ref, true);
/* Insertion des données */
$c->println("\n" . 'Insertion des données', $c::COLOR_LIGHT_PURPLE);
$dataGen = new DataGen($oa);
......@@ -33,20 +31,23 @@ $c->println("\n" . 'Mise à jour du point d\'indice pour les HETD', $c::COLOR_LI
$bdd->exec('BEGIN OSE_FORMULE.UPDATE_ANNEE_TAUX_HETD; END;');
/* Définition d'un mdp pour oseappli */
$c->println("\n" . 'Choix d\'un mot de passe pour l\'utilisateur système oseappli', $c::COLOR_LIGHT_CYAN);
$c->println("Veuillez saisir un mot de passe :");
$pwd1 = $c->getSilentInput();
$c->println("Veuillez saisir à nouveau le même mot de passe :");
$pwd2 = $c->getSilentInput();
if ($pwd1 <> $pwd2) {
$c->printDie('Les mots de passe saisis ne correspondent pas!');
if ($c->hasOption('oseappli-pwd')) {
$pwd1 = $c->getOption('oseappli-pwd');
} else {
$c->println("\n" . 'Choix d\'un mot de passe pour l\'utilisateur système oseappli', $c::COLOR_LIGHT_CYAN);
$c->println("Veuillez saisir un mot de passe :");
$pwd1 = $c->getSilentInput();
$c->println("Veuillez saisir à nouveau le même mot de passe :");
$pwd2 = $c->getSilentInput();
if ($pwd1 <> $pwd2) {
$c->printDie('Les mots de passe saisis ne correspondent pas!');
}
}
$c->println('Application du changement de mot de pase ...');
$c->println('Application du de mot de pase de oseappli...');
$oa->exec("changement-mot-de-passe --utilisateur=oseappli --mot-de-passe=$pwd1");
$c->println('Mot de passe changé', $c::COLOR_LIGHT_GREEN);
......@@ -54,6 +55,5 @@ $c->println('Mot de passe changé', $c::COLOR_LIGHT_GREEN);
$c->println('Vous pourrez vous connecteur à OSE avec le login "oseappli" et votre nouveau mot de passe.');
/* Terminé!! */
$c->println('L\'installation de la base de données est maintenant terminée!', $c::COLOR_LIGHT_GREEN);
\ No newline at end of file
......@@ -14,24 +14,23 @@ if (!$fromMaster) {
foreach ($tags as $tag) {
$c->println($tag);
}
$ok = false;
while (!$ok) {
$c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput('version');
if ($oa->tagIsValid($version)) {
$ok = true;
} else {
$c->println("$version n'est pas dans la liste des versions disponibles.");
}
$c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput();
if (!($oa->tagIsValid($version) || $oa->brancheIsValid($version))) {
$c->printDie("$version n'est pas dans la liste des versions disponibles.");
}
// Récupération des sources
$c->println("\nDéploiement à partir des sources GIT", $c::COLOR_LIGHT_CYAN);
$tbr = $oa->tagIsValid($version) ? 'tags/' : '';
$c->exec([
"cd $osedir",
"git checkout tags/$version",
"git checkout $tbr$version",
"mkdir cache",
"chmod 777 cache",
"mkdir log",
"chmod 777 log",
"chmod +7 bin/ose",
]);
$oa->writeVersion($version);
......@@ -40,6 +39,8 @@ if (!$fromMaster) {
"cd $osedir",
"mkdir cache",
"chmod 777 cache",
"mkdir log",
"chmod 777 log",
"chmod +7 bin/ose",
]);
}
......
<?php
$bdd = new \BddAdmin\Bdd(Config::get('bdds', 'dev-local'));
$schema = new \BddAdmin\Schema($bdd);
//$bdd = new \BddAdmin\Bdd(Config::get('bdds', 'dev-local'));
//$schema = new \BddAdmin\Schema($bdd);
$oa->migration(AbstractMigration::CONTEXTE_POST, 'DepartementsInitCodes');
\ No newline at end of file
......@@ -2,8 +2,10 @@
// Choix de la version
$c->println("Mise à jour de OSE");
$c->println("Assurez-vous bien d'avoir mis OSE en mode maintenance avant de démarrer\n(pressez Entrée pour continuer)...");
$c->getInput();
if ($c->getOption('maintenance') != 'no') {
$c->println("Assurez-vous bien d'avoir mis OSE en mode maintenance avant de démarrer\n(pressez Entrée pour continuer)...");
$c->getInput();
}
if (!$oa->bddIsOk($msg)) {
$c->printDie('La mise à jour ne peut pas se poursuivre : la base de données est inaccessible : ' . "\n" . $msg);
......@@ -16,28 +18,30 @@ $c->exec([
"git fetch --all --tags --prune",
], false);
$c->println("Sélection de la version à déployer", $c::COLOR_LIGHT_CYAN);
$c->println("La version actuellement installée est la " . $oa->oldVersion);
$c->println("Voici la liste des versions de OSE disponibles:");
$tags = $oa->getTags();
foreach ($tags as $tag) {
$c->println($tag);
}
if (!$c->hasOption('version')) {
$c->println("Sélection de la version à déployer", $c::COLOR_LIGHT_CYAN);
$c->println("La version actuellement installée est la " . $oa->oldVersion);
$c->println("Voici la liste des versions de OSE disponibles:");
$tags = $oa->getTags();
foreach ($tags as $tag) {
$c->println($tag);
}
// Choix de la version
$c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput();
if (!$oa->tagIsValid($version)) {
// Choix de la version
$c->print("Veuillez choisir une version à déployer: ");
}
$version = $c->getInput('version');
if (!($oa->tagIsValid($version) || $oa->brancheIsValid($version))) {
$c->printDie("$version n'est pas dans la liste des versions disponibles.");
}
// Récupération des sources
$c->println("\nMise à jour des fichiers à partir de GIT", $c::COLOR_LIGHT_CYAN);
$tbr = $oa->tagIsValid($version) ? 'tags/' : '';
$c->passthru([
"cd $osedir",
"git checkout tags/$version",
"git checkout $tbr$version",
]);
......@@ -59,5 +63,8 @@ $c->println("\nMise à jour des fichiers OK : la version installée est désorma
// Mise à jour de la base de données à partir d'un nouveau processus
$oa->run('update-bdd', true);
$c->println("\nFin de la mise à jour. N'oubliez pas de sortir du mode maintenance!");
$c->println("\nFin de la mise à jour.");
if ($c->getOption('maintenance') != 'no') {
$c->println("N'oubliez pas de sortir du mode maintenance!");
}
$c->println('');
\ No newline at end of file
......@@ -7,7 +7,7 @@
class OseAdmin
{
const OSE_ORIGIN = 'https://git.unicaen.fr/open-source/OSE';
const MIN_VERSION = 8; // version minimum installable
const MIN_VERSION = 10; // version minimum installable
/**
* @var Console
......@@ -24,6 +24,11 @@ class OseAdmin
*/
private $tags = false;
/**
* @var array
*/
private $branches = false;
/**
* @var int
*/
......@@ -77,9 +82,7 @@ class OseAdmin
public function gitlabIsReachable(): bool
{
$gitCheck = $this->console->exec("git ls-remote --heads " . self::OSE_ORIGIN, false);
return (false !== strpos(implode(' ', $gitCheck), 'heads/master'));
return $this->brancheIsValid('master');
}
......@@ -93,14 +96,42 @@ class OseAdmin
foreach ($ts as $tag) {
$this->tags[] = substr($tag, strpos($tag, 'refs/tags/') + 10);
}
usort($this->tags, function ($a, $b) {
$va = (int)substr($a, 0, strpos($a, '.'));
$vb = (int)substr($b, 0, strpos($b, '.'));
if ($va == $vb) return $a > $b;
return $va > $vb;
});
}
foreach ($this->tags as $i => $tag) {
$tags = $this->tags;
foreach ($tags as $i => $tag) {
$version = (int)substr($tag, 0, strpos($tag, '.'));
if ($version < $minVersion) unset($this->tags[$i]);
if ($version < $minVersion) unset($tags[$i]);
}
return $tags;
}
public function getBranches(): array
{
if (false === $this->branches) {
$this->branches = [];
$bs = $this->console->exec("git ls-remote --heads --refs " . self::OSE_ORIGIN, false);
foreach ($bs as $branche) {
$this->branches[] = substr($branche, strpos($branche, 'refs/heads/') + 11);
}
sort($this->branches);
}
return $this->tags;
return $this->branches;
}
......@@ -117,6 +148,18 @@ class OseAdmin
/**
* @param string $tag
*
* @return bool
*/
public function brancheIsValid(string $branche): bool
{
return in_array($branche, $this->getBranches());
}
public function currentVersion(): string
{
$vf = $this->getOseDir() . 'VERSION';
......@@ -229,7 +272,7 @@ class OseAdmin
public function getOseAppliId(): int
{
if (!$this->oseAppliId) {
$u = $this->getBdd()->select("SELECT id FROM UTILISATEUR WHERE USERNAME='oseappli'");
$u = $this->getBdd()->select("SELECT ID FROM UTILISATEUR WHERE USERNAME='oseappli'");
if (isset($u[0]['ID'])) {
$this->oseAppliId = (int)$u[0]['ID'];
} else {
......@@ -245,7 +288,7 @@ class OseAdmin
public function getSourceOseId(): int
{
if (!$this->sourceOseId) {
$src = $this->getBdd()->select("SELECT id FROM SOURCE WHERE CODE='OSE'");
$src = $this->getBdd()->select("SELECT ID FROM SOURCE WHERE CODE='OSE'");
if (isset($src[0]['ID'])) {
$this->sourceOseId = (int)$src[0]['ID'];
} else {
......
......@@ -24,7 +24,7 @@ if (!$od->checkPhpModules([
'json' => 'Json',
'ldap' => 'Ldap',
'mbstring' => 'MbString',
// 'mcrypt' => 'MCrypt',
// 'mcrypt' => 'MCrypt',
'Zend OPcache' => 'Zend OPcache',
'xml' => 'XML',
'zip' => 'ZIP',
......@@ -69,23 +69,19 @@ $tags = $od->getTags();
foreach ($tags as $tag) {
$c->println($tag);
}
$ok = false;
while (!$ok) {
$c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput('version');
if ($od->tagIsValid($version)) {
$ok = true;
} else {
$c->println("$version n'est pas dans la liste des versions disponibles.");
}
$c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput();
if (!($od->tagIsValid($version) || $od->brancheIsValid($version))) {
$c->printDie("$version n'est pas dans la liste des versions disponibles.");
}
// Récupération des sources
$c->println("\nDéploiement à partir des sources GIT", $c::COLOR_LIGHT_CYAN);
$tbr = $od->tagIsValid($version) ? 'tags/' : '';
$c->exec([
"cd $osedir",
"git checkout tags/$version",
"git checkout $tbr$version",
"mkdir cache",
"mkdir cache/Doctrine",
"chmod 777 cache/Doctrine",
......@@ -145,21 +141,13 @@ $c->exec([
// Conclusion
$c->println("\nFin du script d'installation des fichiers", $c::COLOR_LIGHT_GREEN);
$c->println("Il reste encore plusieurs étapes à réaliser pour que OSE soit pleinement fonctionnel :");
$c->println(" 1 - Configurez votre serveur Apache");
$c->println(" 2 - Initialisez la base de données de OSE à l'aide du script prévu à cet effet");
$c->println(" 3 - Mettez en place la configuration locale de l'application, si ce n'est déjà le cas");
$c->println(" 4 - Une fois bien connecté, configurez vos connecteurs en vous appuyant\n le cas échéant sur ceux qui vous sont fournis");
$c->println(" 5 - Mettez en place les tâches CRON nécessaires (envoi de mails pour les indicateurs, Synchronisation automatique, etc.");
$c->println(" 6 - Paramétrez l'application pour l'adapter à vos besoins");
$c->println(" 1 - Configurez votre serveur Apache si ce n'est déjà fait");
$c->println(" 2 - Veuillez personnaliser le fichier de configuration de OSE config.local.php, si ce n'est déjà le cas");
$c->println(" 3 - La base de données devra au besoin être initialisée à l'aide de la commande ./bin/ose install-bdd. Si votre base était déjà initialisée, alors la commande ./bin/ose update-bdd sera privilégiée");
$c->println(" 4 - Mettez en place les tâches CRON nécessaires (envoi de mails pour les indicateurs, Synchronisation automatique, etc.");
$c->println('');
$c->println("Pour la suite, merci de vous reporter au guide de l'administrateur pour vous aider à configurer l'application");
$c->println('');
/*
$c->println(" 1 - Configurez le cas échéant votre serveur Apache");
$c->println(" 2 - Veuillez personnaliser le fichier de configuration de OSE config.local.php, si ce n'est déjà le cas");
$c->println(" 3 - La base de données devra au besoin être initialisée à l'aide de la commande ./bin/ose install-bdd");
$c->println(" 4 - Mettez en place les tâches CRON nécessaires (envoi de mails pour les indicateurs, Synchronisation automatique, etc.");
*/
/************************************************************
......@@ -168,6 +156,7 @@ $c->println(" 4 - Mettez en place les tâches CRON nécessaires (envoi de mails
class OseDeploy
{
const OSE_ORIGIN = 'https://git.unicaen.fr/open-source/OSE';
const MIN_VERSION = 10; // version minimum installable
/**
* @var Console
......@@ -179,6 +168,11 @@ class OseDeploy
*/
private $tags = false;
/**
* @var array
*/
private $branches = false;
/**
......@@ -267,14 +261,12 @@ class OseDeploy
public function gitlabIsReachable(): bool
{
exec("git ls-remote --heads " . self::OSE_ORIGIN, $gitCheck );
return (false !== strpos(implode(' ', $gitCheck), 'heads/master'));
return $this->brancheIsValid('master');
}
public function getTags(): array
public function getTags($minVersion = self::MIN_VERSION): array
{
if (false === $this->tags) {
$this->tags = [];
......@@ -283,15 +275,42 @@ class OseDeploy
foreach ($ts as $tag) {
$this->tags[] = substr($tag, strpos($tag, 'refs/tags/') + 10);
}
usort($this->tags, function ($a, $b) {
$va = (int)substr($a, 0, strpos($a, '.'));
$vb = (int)substr($b, 0, strpos($b, '.'));
if ($va == $vb) return $a > $b;
return $va > $vb;
});
}
$minVersion = 8;
foreach ($this->tags as $i => $tag) {
$tags = $this->tags;
foreach ($tags as $i => $tag) {
$version = (int)substr($tag, 0, strpos($tag, '.'));
if ($version < $minVersion) unset($this->tags[$i]);
if ($version < $minVersion) unset($tags[$i]);
}
return $this->tags;
return $tags;
}
public function getBranches(): array
{
if (false === $this->branches) {
$this->branches = [];
$bs = $this->console->exec("git ls-remote --heads --refs " . self::OSE_ORIGIN, false);
foreach ($bs as $branche) {
$this->branches[] = substr($branche, strpos($branche, 'refs/heads/') + 11);
}
sort($this->branches);
}
return $this->branches;
}
......@@ -308,6 +327,18 @@ class OseDeploy
/**
* @param string $tag
*
* @return bool
*/
public function brancheIsValid(string $branche): bool
{
return in_array($branche, $this->getBranches());
}
public function currentVersion(string $osedir): string
{
$vf = $this->getVersionFile($osedir);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment