maj juin 2022

This commit is contained in:
root 2022-06-24 20:05:17 +02:00
parent e9483e9fd9
commit 916e684b30

322
README.md
View File

@ -1,189 +1,139 @@
# ScoDoc - Gestion de la scolarité - Version ScoDoc 9
# Reapplication des modifs locales suite à upgrade serveur
Voila les opérations que j ai faite en direct pour mettre a jour notre scodoc local apres un upgrade de scodoc
l'exemple ici fait suite à l upgrade 9.1.55 -> 9.1.56
le no de version (9.1.56) devrait être un parametre d'un éventuel script
Note preliminaire:
- j ai installé git sur iut-scodoc
- on travaille avec les réperoires:
- /opt/scodoc répértoire de production
- /opt/scodoc-local les fichiers différentes entre la version lillooise et la version officielle
- /opt/ScoDoc-git le working-dir de git
Tous ces répertoires doivent être la propriété de l'user `scodoc
Je pars d'un situation où le working dir est sur la branche `local`, que le depot distant git contient la dernière version et que /opt/scodoc a déjà été mis à jour
Mise en place
```bash
cd /opt/ScoDoc-git/
su scodoc
```
première vérification que l on est bien sur la branche `local` et à jour (sinon faire `git checkout local`)
```bash
git status
Sur la branche local
rien à valider, la copie de travail est propre
git log -1
commit 322090276326c36e8d5525372e3e0804569b70ac (HEAD -> local)
Merge: 574fede 514a09e
Author: jean-marie Place (as scodoc) <jean-marie.place@univ-lille.fr>
Date: Mon Feb 14 16:49:36 2022 +0100
Merge tag '9.1.55' into local
9.1 220213
```
Recpie en local de l'historique officiel (contient la nouvelle version (ici 9.1.56) en tant que tag)
```bash
git fetch
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 17 (delta 15), reused 0 (delta 0), pack-reused 0
Dépaquetage des objets: 100% (17/17), 2.64 Kio | 246.00 Kio/s, fait.
Depuis https://scodoc.org/git/ScoDoc/ScoDoc
0196d41..60a77b8 dev92 -> origin/dev92
* [nouvelle étiquette] 9.1.56 -> 9.1.56
```
Intégration des dernières midif officielles dans la branche locale
Il est possible que la fusion déclenche une erreur à ce niveai si la mise à jour officielle concerne un des fichiers modifiés localalement
Dans ce cas, pas d'autre solution que de verifier la fusion à la main
si procedure automatisée, prévoir un arrêt éventuel à ce niveau (basé sur la valeur de retour gu git merge ?)
```bash
git merge origin 9.1.56
Fusion automatique de app/views/notes.py
Fusion automatique de app/scodoc/sco_formsemestre_status.py
Merge made by the 'recursive' strategy.
app/but/bulletin_but.py | 2 +-
app/but/bulletin_but_xml_compat.py | 26 ++++++++++++++++----------
app/comp/res_common.py | 11 +++++++++++
app/models/moduleimpls.py | 2 +-
......
......
app/templates/pn/form_ues.html | 5 +++++
app/templates/pn/ue_infos.html | 2 +-
app/views/absences.py | 4 +++-
app/views/notes.py | 2 +-
sco_version.py | 2 +-
35 files changed, 149 insertions(+), 90 deletions(-)
```
Si tout s est bien passé, vérification
```bash
git status
Sur la branche local
rien à valider, la copie de travail est propre
```
Enumération des fichiers modifiés localement
```bash
git diff --name-only 9.1.56
app/scodoc/sco_excel.py
app/scodoc/sco_excel_add.py
app/scodoc/sco_formsemestre_status.py
app/scodoc/sco_prepajury_formats.py
app/scodoc/sco_prepajury_iuta.py
app/views/notes.py
app/views/scolar.py
```
et recopie des diffs dans `/opt/scodoc-local/`
(pour l instant 2 sous répertoires /app/scodoc et /app/views)
TODO adapter la commande pour créer d'autres sous-répertoires si besoin (actuellement -> erreur bash)
```bash
for f in $(git diff --name-only 9.1.56); do cp -p $f /opt/scodoc-local/$f ; done
```
Si tout s'est bien passé jusque là recopie des fichiers diffs en production
```bash
for f in $(git diff --name-only 9.1.56); do cp -p $f /opt/scodoc/$f ; done
```
Effacement du cache REDIS (préservé même en cas de redémarrage serveur)
Et relance du serveur
```bash
cd /opt/scodoc
source venv/bin/activate
flask clear-cache
exit
systemctl restart scodoc9
```
# Ajout d'autres adaptations locales
Ajouter les nouvelles modifs à la branche `local`du git
Et compléter ci-dessous.
## Adaptations actuelles
- Ajout mention adaptation local à l'écran principal
- api: formsemestre_partition_list
- Ajout dans le menu de `Générer feuille préparation Jury (DUT)`
- TODO: poursuite d'études
- TODO: Affichage des étiquettes étudiant
(c) Emmanuel Viennet 1999 - 2022 (voir LICENCE.txt)
Installation: voir instructions à jour sur <https://scodoc.org/GuideInstallDebian11>
Documentation utilisateur: <https://scodoc.org>
## Version ScoDoc 9
La version ScoDoc 9 est basée sur Flask (au lieu de Zope) et sur
**python 3.9+**.
La version 9.0 s'efforce de reproduire presque à l'identique le fonctionnement
de ScoDoc7, avec des composants logiciels différents (Debian 11, Python 3,
Flask, SQLAlchemy, au lien de Python2/Zope dans les versions précédentes).
### État actuel (26 jan 22)
- 9.1 (master) reproduit l'ensemble des fonctions de ScoDoc 7 (donc pas de BUT), sauf:
- ancien module "Entreprises" (obsolète) et ajoute la gestion du BUT.
- 9.2 (branche refactor_nt) est la version de développement.
### Lignes de commandes
Voir [https://scodoc.org/GuideConfig](le guide de configuration).
## Organisation des fichiers
L'installation comporte les fichiers de l'application, sous `/opt/scodoc/`, et
les fichiers locaux (archives, photos, configurations, logs) sous
`/opt/scodoc-data`. Par ailleurs, il y a évidemment les bases de données
postgresql et la configuration du système Linux.
### Fichiers locaux
Sous `/opt/scodoc-data`, fichiers et répertoires appartenant à l'utilisateur `scodoc`.
Ils ne doivent pas être modifiés à la main, sauf certains fichiers de configuration sous
`/opt/scodoc-data/config`.
Le répertoire `/opt/scodoc-data` doit être régulièrement sauvegardé.
Principaux contenus:
/opt/scodoc-data
/opt/scodoc-data/log # Fichiers de log ScoDoc
/opt/scodoc-data/config # Fichiers de configuration
.../config/logos # Logos de l'établissement
.../config/depts # un fichier par département
/opt/scodoc-data/photos # Photos des étudiants
/opt/scodoc-data/archives # Archives: PV de jury, maquettes Apogée, fichiers étudiants
## Pour les développeurs
### Installation du code
Installer ScoDoc 9 normalement ([voir la doc](https://scodoc.org/GuideInstallDebian11)).
Puis remplacer `/opt/scodoc` par un clone du git.
sudo su
mv /opt/scodoc /opt/off-scodoc # ou ce que vous voulez
apt-get install git # si besoin
cd /opt
git clone https://scodoc.org/git/viennet/ScoDoc.git
# (ou bien utiliser votre clone gitea si vous l'avez déjà créé !)
mv ScoDoc scodoc # important !
Il faut ensuite installer l'environnement et le fichier de configuration:
# Le plus simple est de piquer le virtualenv configuré par l'installeur:
mv /opt/off-scodoc/venv /opt/scodoc
Et la config:
ln -s /opt/scodoc-data/.env /opt/scodoc
Cette dernière commande utilise le `.env` crée lors de l'install, ce qui
n'est pas toujours le plus judicieux: vous pouvez modifier son contenu, par
exemple pour travailler en mode "développement" avec `FLASK_ENV=development`.
### Tests unitaires
Les tests unitaires utilisent normalement la base postgresql `SCODOC_TEST`.
Avant le premier lancement, créer cette base ainsi:
./tools/create_database.sh SCODOC_TEST
export FLASK_ENV=test
flask db upgrade
Cette commande n'est nécessaire que la première fois (le contenu de la base
est effacé au début de chaque test, mais son schéma reste) et aussi si des
migrations (changements de schéma) ont eu lieu dans le code.
Certains tests ont besoin d'un département déjà créé, qui n'est pas créé par les
scripts de tests:
Lancer au préalable:
flask delete-dept TEST00 && flask create-dept TEST00
Puis dérouler les tests unitaires:
pytest tests/unit
Ou avec couverture (`pip install pytest-cov`)
pytest --cov=app --cov-report=term-missing --cov-branch tests/unit/*
#### Utilisation des tests unitaires pour initialiser la base de dev
On peut aussi utiliser les tests unitaires pour mettre la base
de données de développement dans un état connu, par exemple pour éviter de
recréer à la main étudiants et semestres quand on développe.
Il suffit de positionner une variable d'environnement indiquant la BD
utilisée par les tests:
export SCODOC_TEST_DATABASE_URI=postgresql:///SCODOC_DEV
(si elle n'existe pas, voir plus loin pour la créer) puis de les lancer
normalement, par exemple:
pytest tests/unit/test_sco_basic.py
Il est en général nécessaire d'affecter ensuite un mot de passe à (au moins)
un utilisateur:
flask user-password admin
**Attention:** les tests unitaires **effacent** complètement le contenu de la
base de données (tous les départements, et les utilisateurs) avant de commencer !
#### Modification du schéma de la base
On utilise SQLAlchemy avec Alembic et Flask-Migrate.
flask db migrate -m "message explicatif....."
flask db upgrade
Ne pas oublier de d'ajouter le script de migration à git (`git add migrations/...`).
**Mémo**: séquence re-création d'une base (vérifiez votre `.env`
ou variables d'environnement pour interroger la bonne base !).
dropdb SCODOC_DEV
tools/create_database.sh SCODOC_DEV # créé base SQL
flask db upgrade # créé les tables à partir des migrations
flask sco-db-init # ajoute au besoin les constantes (fait en migration 0)
# puis imports:
flask import-scodoc7-users
flask import-scodoc7-dept STID SCOSTID
Si la base utilisée pour les dev n'est plus en phase avec les scripts de
migration, utiliser les commandes `flask db history`et `flask db stamp`pour se
positionner à la bonne étape.
### Profiling
Sur une machine de DEV, lancer
flask profile --host 0.0.0.0 --length 32 --profile-dir /opt/scodoc-data
le fichier `.prof` sera alors écrit dans `/opt/scodoc-data` (on peut aussi utiliser `/tmp`).
Pour la visualisation, [snakeviz](https://jiffyclub.github.io/snakeviz/) est bien:
pip install snakeviz
puis
snakeviz -s --hostname 0.0.0.0 -p 5555 /opt/scodoc-data/GET.ScoDoc......prof
# Paquet Debian 11
Les scripts associés au paquet Debian (.deb) sont dans `tools/debian`. Le plus
important est `postinst`qui se charge de configurer le système (install ou
upgrade de scodoc9).
La préparation d'une release se fait à l'aide du script
`tools/build_release.sh`.