Skip to content
Snippets Groups Projects
Commit f85e6c01 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

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

parent 5fe184f1
No related branches found
No related tags found
No related merge requests found
...@@ -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 = [
......
...@@ -11,7 +11,6 @@ $bdd = $oa->getBdd(); ...@@ -11,7 +11,6 @@ $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,8 +31,10 @@ $c->println("\n" . 'Mise à jour du point d\'indice pour les HETD', $c::COLOR_LI ...@@ -33,8 +31,10 @@ $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 */
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("\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 :"); $c->println("Veuillez saisir un mot de passe :");
$pwd1 = $c->getSilentInput(); $pwd1 = $c->getSilentInput();
...@@ -45,8 +45,9 @@ $pwd2 = $c->getSilentInput(); ...@@ -45,8 +45,9 @@ $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");
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->println("Assurez-vous bien d'avoir mis OSE en mode maintenance avant de démarrer\n(pressez Entrée pour continuer)...");
$c->getInput(); $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,6 +18,7 @@ $c->exec([ ...@@ -16,6 +18,7 @@ $c->exec([
"git fetch --all --tags --prune", "git fetch --all --tags --prune",
], false); ], false);
if (!$c->hasOption('version')) {
$c->println("Sélection de la version à déployer", $c::COLOR_LIGHT_CYAN); $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("La version actuellement installée est la " . $oa->oldVersion);
$c->println("Voici la liste des versions de OSE disponibles:"); $c->println("Voici la liste des versions de OSE disponibles:");
...@@ -24,20 +27,21 @@ foreach ($tags as $tag) { ...@@ -24,20 +27,21 @@ 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;
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 ($od->tagIsValid($version)) { if (!($od->tagIsValid($version) || $od->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 = $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 $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 ...@@ -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 public function currentVersion(string $osedir): string
{ {
$vf = $this->getVersionFile($osedir); $vf = $this->getVersionFile($osedir);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment