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 @@ ...@@ -9,8 +9,10 @@
* les formules des établissements concernés ont été modifiées pour tenir compte de cette nouveauté. * 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" * 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. * 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 * 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 * 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 ## Correction de bugs
......
<?php <?php
$actions = [ $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", "notifier-indicateurs" => "Envoi des mails relatifs aux indicateurs",
"synchronisation" => "<job> : Effectue la synchronisation des données pour le <job> transmis", "synchronisation" => "<job> : Effectue la synchronisation des données pour le <job> transmis",
"chargens-calcul-effectifs" => "Calcul des effectifs du module Charges", "chargens-calcul-effectifs" => "Calcul des effectifs du module Charges",
...@@ -12,6 +15,9 @@ $actions = [ ...@@ -12,6 +15,9 @@ $actions = [
"maj-public-links" => "Mise à jour des liens vers les répertoires publics des dépendances", "maj-public-links" => "Mise à jour des liens vers les répertoires publics des dépendances",
"clear-cache" => "Vidage du cache de l'application", "clear-cache" => "Vidage du cache de l'application",
"test-bdd" => "Test d'accès à la base de données", "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)", "update-bdd" => "Mise à jour de la base de données de l'application (sans les fichiers)",
]; ];
$actionsDev = [ $actionsDev = [
......
...@@ -4,14 +4,13 @@ ...@@ -4,14 +4,13 @@
$c->println("\nInstallation de la base de données", $c::COLOR_LIGHT_CYAN); $c->println("\nInstallation de la base de données", $c::COLOR_LIGHT_CYAN);
if (!$oa->bddIsOk($msg)) { if (!$oa->bddIsOk($msg)) {
$c->printDie("Impossible d'accéder à la base de données : $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(); $bdd = $oa->getBdd();
$schema = new \BddAdmin\Schema($bdd); $schema = new \BddAdmin\Schema($bdd);
/* Mise en place du schéma de la 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); $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); ...@@ -23,7 +22,6 @@ $schema->setLogger($scl);
$schema->create($ref, true); $schema->create($ref, true);
/* Insertion des données */ /* Insertion des données */
$c->println("\n" . 'Insertion des données', $c::COLOR_LIGHT_PURPLE); $c->println("\n" . 'Insertion des données', $c::COLOR_LIGHT_PURPLE);
$dataGen = new DataGen($oa); $dataGen = new DataGen($oa);
...@@ -33,20 +31,23 @@ $c->println("\n" . 'Mise à jour du point d\'indice pour les HETD', $c::COLOR_LI ...@@ -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;'); $bdd->exec('BEGIN OSE_FORMULE.UPDATE_ANNEE_TAUX_HETD; END;');
/* Définition d'un mdp pour oseappli */ /* 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); if ($c->hasOption('oseappli-pwd')) {
$c->println("Veuillez saisir un mot de passe :"); $pwd1 = $c->getOption('oseappli-pwd');
$pwd1 = $c->getSilentInput(); } 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 :"); $c->println("Veuillez saisir à nouveau le même mot de passe :");
$pwd2 = $c->getSilentInput(); $pwd2 = $c->getSilentInput();
if ($pwd1 <> $pwd2) { if ($pwd1 <> $pwd2) {
$c->printDie('Les mots de passe saisis ne correspondent pas!'); $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"); $oa->exec("changement-mot-de-passe --utilisateur=oseappli --mot-de-passe=$pwd1");
$c->println('Mot de passe changé', $c::COLOR_LIGHT_GREEN); $c->println('Mot de passe changé', $c::COLOR_LIGHT_GREEN);
...@@ -54,6 +55,5 @@ $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.'); $c->println('Vous pourrez vous connecteur à OSE avec le login "oseappli" et votre nouveau mot de passe.');
/* Terminé!! */ /* Terminé!! */
$c->println('L\'installation de la base de données est maintenant terminée!', $c::COLOR_LIGHT_GREEN); $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) { ...@@ -14,24 +14,23 @@ if (!$fromMaster) {
foreach ($tags as $tag) { foreach ($tags as $tag) {
$c->println($tag); $c->println($tag);
} }
$ok = false;
while (!$ok) {
$c->print("Veuillez choisir une version à déployer: "); $c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput('version'); $version = $c->getInput();
if ($oa->tagIsValid($version)) { if (!($oa->tagIsValid($version) || $oa->brancheIsValid($version))) {
$ok = true; $c->printDie("$version n'est pas dans la liste des versions disponibles.");
} else {
$c->println("$version n'est pas dans la liste des versions disponibles.");
}
} }
// Récupération des sources // Récupération des sources
$c->println("\nDéploiement à partir des sources GIT", $c::COLOR_LIGHT_CYAN); $c->println("\nDéploiement à partir des sources GIT", $c::COLOR_LIGHT_CYAN);
$tbr = $oa->tagIsValid($version) ? 'tags/' : '';
$c->exec([ $c->exec([
"cd $osedir", "cd $osedir",
"git checkout tags/$version", "git checkout $tbr$version",
"mkdir cache", "mkdir cache",
"chmod 777 cache", "chmod 777 cache",
"mkdir log",
"chmod 777 log",
"chmod +7 bin/ose", "chmod +7 bin/ose",
]); ]);
$oa->writeVersion($version); $oa->writeVersion($version);
...@@ -40,6 +39,8 @@ if (!$fromMaster) { ...@@ -40,6 +39,8 @@ if (!$fromMaster) {
"cd $osedir", "cd $osedir",
"mkdir cache", "mkdir cache",
"chmod 777 cache", "chmod 777 cache",
"mkdir log",
"chmod 777 log",
"chmod +7 bin/ose", "chmod +7 bin/ose",
]); ]);
} }
......
<?php <?php
$bdd = new \BddAdmin\Bdd(Config::get('bdds', 'dev-local')); //$bdd = new \BddAdmin\Bdd(Config::get('bdds', 'dev-local'));
$schema = new \BddAdmin\Schema($bdd); //$schema = new \BddAdmin\Schema($bdd);
$oa->migration(AbstractMigration::CONTEXTE_POST, 'DepartementsInitCodes');
\ No newline at end of file
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
// Choix de la version // Choix de la version
$c->println("Mise à jour de OSE"); $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)..."); if ($c->getOption('maintenance') != 'no') {
$c->getInput(); $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)) { if (!$oa->bddIsOk($msg)) {
$c->printDie('La mise à jour ne peut pas se poursuivre : la base de données est inaccessible : ' . "\n" . $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([ ...@@ -16,28 +18,30 @@ $c->exec([
"git fetch --all --tags --prune", "git fetch --all --tags --prune",
], false); ], false);
$c->println("Sélection de la version à déployer", $c::COLOR_LIGHT_CYAN); if (!$c->hasOption('version')) {
$c->println("La version actuellement installée est la " . $oa->oldVersion); $c->println("Sélection de la version à déployer", $c::COLOR_LIGHT_CYAN);
$c->println("Voici la liste des versions de OSE disponibles:"); $c->println("La version actuellement installée est la " . $oa->oldVersion);
$tags = $oa->getTags(); $c->println("Voici la liste des versions de OSE disponibles:");
foreach ($tags as $tag) { $tags = $oa->getTags();
foreach ($tags as $tag) {
$c->println($tag); $c->println($tag);
} }
// Choix de la version // Choix de la version
$c->print("Veuillez choisir une version à déployer: "); $c->print("Veuillez choisir une version à déployer: ");
$version = $c->getInput(); }
if (!$oa->tagIsValid($version)) { $version = $c->getInput('version');
if (!($oa->tagIsValid($version) || $oa->brancheIsValid($version))) {
$c->printDie("$version n'est pas dans la liste des versions disponibles."); $c->printDie("$version n'est pas dans la liste des versions disponibles.");
} }
// Récupération des sources // Récupération des sources
$c->println("\nMise à jour des fichiers à partir de GIT", $c::COLOR_LIGHT_CYAN); $c->println("\nMise à jour des fichiers à partir de GIT", $c::COLOR_LIGHT_CYAN);
$tbr = $oa->tagIsValid($version) ? 'tags/' : '';
$c->passthru([ $c->passthru([
"cd $osedir", "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 ...@@ -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 // Mise à jour de la base de données à partir d'un nouveau processus
$oa->run('update-bdd', true); $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(''); $c->println('');
\ No newline at end of file
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
class OseAdmin class OseAdmin
{ {
const OSE_ORIGIN = 'https://git.unicaen.fr/open-source/OSE'; 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 * @var Console
...@@ -24,6 +24,11 @@ class OseAdmin ...@@ -24,6 +24,11 @@ class OseAdmin
*/ */
private $tags = false; private $tags = false;
/**
* @var array
*/
private $branches = false;
/** /**
* @var int * @var int
*/ */
...@@ -77,9 +82,7 @@ class OseAdmin ...@@ -77,9 +82,7 @@ class OseAdmin
public function gitlabIsReachable(): bool public function gitlabIsReachable(): bool
{ {
$gitCheck = $this->console->exec("git ls-remote --heads " . self::OSE_ORIGIN, false); return $this->brancheIsValid('master');
return (false !== strpos(implode(' ', $gitCheck), 'heads/master'));
} }
...@@ -93,14 +96,42 @@ class OseAdmin ...@@ -93,14 +96,42 @@ class OseAdmin
foreach ($ts as $tag) { foreach ($ts as $tag) {
$this->tags[] = substr($tag, strpos($tag, 'refs/tags/') + 10); $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, '.')); $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 ...@@ -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 public function currentVersion(): string
{ {
$vf = $this->getOseDir() . 'VERSION'; $vf = $this->getOseDir() . 'VERSION';
...@@ -229,7 +272,7 @@ class OseAdmin ...@@ -229,7 +272,7 @@ class OseAdmin
public function getOseAppliId(): int public function getOseAppliId(): int
{ {
if (!$this->oseAppliId) { 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'])) { if (isset($u[0]['ID'])) {
$this->oseAppliId = (int)$u[0]['ID']; $this->oseAppliId = (int)$u[0]['ID'];
} else { } else {
...@@ -245,7 +288,7 @@ class OseAdmin ...@@ -245,7 +288,7 @@ class OseAdmin
public function getSourceOseId(): int public function getSourceOseId(): int
{ {
if (!$this->sourceOseId) { 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'])) { if (isset($src[0]['ID'])) {
$this->sourceOseId = (int)$src[0]['ID']; $this->sourceOseId = (int)$src[0]['ID'];
} else { } else {
......
...@@ -69,23 +69,19 @@ $tags = $od->getTags(); ...@@ -69,23 +69,19 @@ $tags = $od->getTags();
foreach ($tags as $tag) { foreach ($tags as $tag) {
$c->println($tag); $c->println($tag);
} }
$ok = false; $c->print("Veuillez choisir une version à déployer: ");
while (!$ok) { $version = $c->getInput();
$c->print("Veuillez choisir une version à déployer: "); if (!($od->tagIsValid($version) || $od->brancheIsValid($version))) {
$version = $c->getInput('version'); $c->printDie("$version n'est pas dans la liste des versions disponibles.");
if ($od->tagIsValid($version)) {
$ok = true;
} else {
$c->println("$version n'est pas dans la liste des versions disponibles.");
}
} }
// Récupération des sources // Récupération des sources
$c->println("\nDéploiement à partir des sources GIT", $c::COLOR_LIGHT_CYAN); $c->println("\nDéploiement à partir des sources GIT", $c::COLOR_LIGHT_CYAN);
$tbr = $od->tagIsValid($version) ? 'tags/' : '';
$c->exec([ $c->exec([
"cd $osedir", "cd $osedir",
"git checkout tags/$version", "git checkout $tbr$version",
"mkdir cache", "mkdir cache",
"mkdir cache/Doctrine", "mkdir cache/Doctrine",
"chmod 777 cache/Doctrine", "chmod 777 cache/Doctrine",
...@@ -145,21 +141,13 @@ $c->exec([ ...@@ -145,21 +141,13 @@ $c->exec([
// Conclusion // Conclusion
$c->println("\nFin du script d'installation des fichiers", $c::COLOR_LIGHT_GREEN); $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("Il reste encore plusieurs étapes à réaliser pour que OSE soit pleinement fonctionnel :");
$c->println(" 1 - Configurez votre serveur Apache"); $c->println(" 1 - Configurez votre serveur Apache si ce n'est déjà fait");
$c->println(" 2 - Initialisez la base de données de OSE à l'aide du script prévu à cet effet"); $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 - Mettez en place la configuration locale de l'application, 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 - Une fois bien connecté, configurez vos connecteurs en vous appuyant\n le cas échéant sur ceux qui vous sont fournis"); $c->println(" 4 - Mettez en place les tâches CRON nécessaires (envoi de mails pour les indicateurs, Synchronisation automatique, etc.");
$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(''); $c->println('');
$c->println("Pour la suite, merci de vous reporter au guide de l'administrateur pour vous aider à configurer l'application"); $c->println("Pour la suite, merci de vous reporter au guide de l'administrateur pour vous aider à configurer l'application");
$c->println(''); $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 ...@@ -168,6 +156,7 @@ $c->println(" 4 - Mettez en place les tâches CRON nécessaires (envoi de mails
class OseDeploy class OseDeploy
{ {
const OSE_ORIGIN = 'https://git.unicaen.fr/open-source/OSE'; const OSE_ORIGIN = 'https://git.unicaen.fr/open-source/OSE';
const MIN_VERSION = 10; // version minimum installable
/** /**
* @var Console * @var Console
...@@ -179,6 +168,11 @@ class OseDeploy ...@@ -179,6 +168,11 @@ class OseDeploy
*/ */
private $tags = false; private $tags = false;
/**
* @var array
*/
private $branches = false;
/** /**
...@@ -267,14 +261,12 @@ class OseDeploy ...@@ -267,14 +261,12 @@ class OseDeploy
public function gitlabIsReachable(): bool public function gitlabIsReachable(): bool
{ {
exec("git ls-remote --heads " . self::OSE_ORIGIN, $gitCheck ); return $this->brancheIsValid('master');
return (false !== strpos(implode(' ', $gitCheck), 'heads/master'));
} }
public function getTags(): array public function getTags($minVersion = self::MIN_VERSION): array
{ {
if (false === $this->tags) { if (false === $this->tags) {
$this->tags = []; $this->tags = [];
...@@ -283,15 +275,42 @@ class OseDeploy ...@@ -283,15 +275,42 @@ class OseDeploy
foreach ($ts as $tag) { foreach ($ts as $tag) {
$this->tags[] = substr($tag, strpos($tag, 'refs/tags/') + 10); $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; $tags = $this->tags;
foreach ($this->tags as $i => $tag) { foreach ($tags as $i => $tag) {
$version = (int)substr($tag, 0, strpos($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);
} }
return $this->tags; sort($this->branches);
}
return $this->branches;
} }