Create external tools
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Fred Pauchet 2022-04-21 21:07:42 +02:00
parent 2fd26218da
commit 083069d812
3 changed files with 183 additions and 159 deletions

View File

@ -88,133 +88,18 @@
\end{Highlighting}
\end{Shaded}
←-\/- / partie obsolète -\/-→
Ceci vous affichera non seulement la couverture de code estimée, et
générera également vos fichiers sources avec les branches non couvertes.
\hypertarget{_configuration_globale}{%
\subsubsection{Configuration globale}\label{_configuration_globale}}
Décrire le fichier setup.cfg
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{$ }\FunctionTok{touch}\NormalTok{ setup.cfg}
\end{Highlighting}
\end{Shaded}
\hypertarget{_dockerfile}{%
\subsubsection{Dockerfile}\label{_dockerfile}}
\begin{verbatim}
# Dockerfile
# Pull base image
#FROM python:3.8
FROM python:3.8-slim-buster
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive
ENV ACCEPT_EULA=Y
# install Microsoft SQL Server requirements.
ENV ACCEPT_EULA=Y
RUN apt-get update -y && apt-get update \
&& apt-get install -y --no-install-recommends curl gcc g++ gnupg
# Add SQL Server ODBC Driver 17
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update \
&& apt-get install -y msodbcsql17 unixodbc-dev
# clean the install.
RUN apt-get -y clean
# Set work directory
WORKDIR /code
# Install dependencies
COPY ./requirements/base.txt /code/requirements/
RUN pip install --upgrade pip
RUN pip install -r ./requirements/base.txt
# Copy project
COPY . /code/
\end{verbatim}
\hypertarget{_makefile}{%
\subsubsection{Makefile}\label{_makefile}}
Pour gagner un peu de temps, n'hésitez pas à créer un fichier
\texttt{Makefile} que vous placerez à la racine du projet. L'exemple
ci-dessous permettra, grâce à la commande \texttt{make\ coverage},
d'arriver au même résultat que ci-dessus:
\begin{verbatim}
# Makefile for gwift
#
# User-friendly check for coverage
ifeq ($(shell which coverage >/dev/null 2>&1; echo $$?), 1)
$(error The 'coverage' command was not found. Make sure you have coverage installed)
endif
.PHONY: help coverage
help:
@echo " coverage to run coverage check of the source files."
coverage:
coverage run --source='.' manage.py test; coverage report; coverage html;
@echo "Testing of coverage in the sources finished."
\end{verbatim}
Pour la petite histoire, \texttt{make} peu sembler un peu désuet, mais
reste extrêmement efficace.
\hypertarget{_environnement_de_duxe9veloppement}{%
\subsection{Environnement de
développement}\label{_environnement_de_duxe9veloppement}}
Concrètement, nous pourrions tout à fait nous limiter à Notepad ou
Notepad++. Mais à moins d'aimer se fouetter avec un câble USB, nous
apprécions la complétion du code, la coloration syntaxique,
l'intégration des tests unitaires et d'un debugger, ainsi que deux-trois
sucreries qui feront plaisir à n'importe quel développeur.
Si vous manquez d'idées ou si vous ne savez pas par où commencer:
\begin{itemize}
\item
\href{https://vscodium.com/}{VSCodium}, avec les plugins
\href{https://marketplace.visualstudio.com/items?itemName=ms-python.python}{Python}et
\href{https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens}{GitLens}
\item
\href{https://www.jetbrains.com/pycharm/}{PyCharm}
\item
\href{https://www.vim.org/}{Vim} avec les plugins
\href{https://github.com/davidhalter/jedi-vim}{Jedi-Vim} et
\href{https://github.com/preservim/nerdtree}{nerdtree}
\end{itemize}
Si vous hésitez, et même si Codium n'est pas le plus léger (la faute à
\href{https://www.electronjs.org/}{Electron}\ldots\hspace{0pt}), il fera
correctement son travail (à savoir: faciliter le vôtre), en intégrant
suffisament de fonctionnalités qui gâteront les papilles émoustillées du
développeur impatient.
\begin{figure}
\centering
\includegraphics{images/environment/codium.png}
\caption{Codium en action}
\end{figure}
\hypertarget{_un_terminal}{%
\subsection{Un terminal}\label{_un_terminal}}

View File

@ -651,19 +651,11 @@ Pour nous en assurer (dès fois que quelqu'un en doute), il nous suffit de déma
\subsection{Couverture de code}
Avec \texttt{pytest}, il convient d'utiliser le paquet \href{https://pypi.org/project/pytest-cov/}{\texttt{pytest-cov}}, suivi de la commande \texttt{pytest\ -\/-cov=gwift\ tests/}.
Avec \texttt{pytest}, il convient d'utiliser le paquet
\href{https://pypi.org/project/pytest-cov/}{\texttt{pytest-cov}}, suivi
de la commande \texttt{pytest\ -\/-cov=gwift\ tests/}.
Si vous préférez rester avec le cadre de tests de Django, vous pouvez
passer par le paquet
\href{https://pypi.org/project/django-coverage-plugin/}{django-coverage-plugin}
Ajoutez-le dans le fichier \texttt{requirements/base.txt}, et lancez une
couverture de code grâce à la commande \texttt{coverage}. La
configuration peut se faire dans un fichier \texttt{.coveragerc} que
vous placerez à la racine de votre projet, et qui sera lu lors de
l'exécution.
Si vous préférez rester avec le cadre de tests de Django, vous pouvez passer par le paquet\href{https://pypi.org/project/django-coverage-plugin/}{django-coverage-plugin}.
Ajoutez-le dans le fichier \texttt{requirements/base.txt}, et lancez une couverture de code grâce à la commande \texttt{coverage}.
La configuration peut se faire dans un fichier \texttt{.coveragerc} que vous placerez à la racine de votre projet, et qui sera lu lors de l'exécution.
\section{Matrice de compatibilité}
@ -699,6 +691,170 @@ Ci-dessus, la commande retournera une erreur pour chaque version non trouvée, a
TODO: Intérêt des containers.
\section{Glue de configuration}
Décrire le fichier setup.cfg.
\section{Docker \& Dockerfile}
\begin{listing}
\begin{verbatim}
# Dockerfile
# Pull base image
FROM python:3.8-slim-buster
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive
ENV ACCEPT_EULA=Y
# install Microsoft SQL Server requirements.
ENV ACCEPT_EULA=Y
RUN apt-get update -y && apt-get update \
&& apt-get install -y --no-install-recommends curl gcc g++ gnupg
# Add SQL Server ODBC Driver 17
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update \
&& apt-get install -y msodbcsql17 unixodbc-dev
# clean the install.
RUN apt-get -y clean
# Set work directory
WORKDIR /code
# Install dependencies
COPY ./requirements/base.txt /code/requirements/
RUN pip install --upgrade pip
RUN pip install -r ./requirements/base.txt
# Copy project
COPY . /code/
\end{verbatim}
\caption{Un exemple de Dockerfile}
\end{listing}
\section{Makefile}
Pour gagner un peu de temps, n'hésitez pas à créer un fichier \texttt{Makefile} que vous placerez à la racine du projet.
L'exemple ci-dessous permettra, grâce à la commande \texttt{make\ coverage}, d'arriver au même résultat que ci-dessus:
\begin{listing}
\begin{verbatim}
# Makefile for gwift
#
# User-friendly check for coverage
ifeq ($(shell which coverage >/dev/null 2>&1; echo $$?), 1)
$(error The 'coverage' command was not found. Make sure you have coverage installed)
endif
.PHONY: help coverage
help:
@echo " coverage to run coverage check of the source files."
coverage:
coverage run --source='.' manage.py test; coverage report; coverage html;
@echo "Testing of coverage in the sources finished."
\end{verbatim}
\caption{Un exemple de fichier Makefile}
\end{listing}
Pour la petite histoire, \texttt{make} peu sembler un peu désuet, mais
reste extrêmement efficace.
\section{Outils de développement}
\subsection{Environnement de développement}
Concrètement, nous pourrions tout à fait nous limiter à Notepad ou Notepad++.
Mais à moins d'aimer se fouetter avec un câble USB, nous apprécions la complétion du code, la coloration syntaxique, l'intégration des tests unitaires et d'un debugger, ainsi que deux-trois sucreries qui feront plaisir à n'importe quel développeur.
Si vous manquez d'idées ou si vous ne savez pas par où commencer:
\begin{itemize}
\item
\href{https://vscodium.com/}{VSCodium}, avec les plugins
\href{https://marketplace.visualstudio.com/items?itemName=ms-python.python}{Python}et
\href{https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens}{GitLens}
\item
\href{https://www.jetbrains.com/pycharm/}{PyCharm}
\item
\href{https://www.vim.org/}{Vim} avec les plugins
\href{https://github.com/davidhalter/jedi-vim}{Jedi-Vim} et
\href{https://github.com/preservim/nerdtree}{nerdtree}
\end{itemize}
Si vous hésitez, et même si Codium n'est pas le plus léger (la faute à
\href{https://www.electronjs.org/}{Electron}\ldots\hspace{0pt}), il fera
correctement son travail (à savoir: faciliter le vôtre), en intégrant
suffisament de fonctionnalités qui gâteront les papilles émoustillées du
développeur impatient.
\begin{figure}
\centering
\includegraphics{images/environment/codium.png}
\caption{Codium en action}
\end{figure}
\subsection{Terminal}
\emph{A priori}, les IDE \footnote{Integrated Development Environment}
proposés ci-dessus fournissent par défaut ou \emph{via} des greffons un
terminal intégré. Ceci dit, disposer d'un terminal séparé facilite
parfois certaines tâches.
A nouveau, si vous manquez d'idées:
\begin{enumerate}
\item
Si vous êtes sous Windows, téléchargez une copie de
\href{https://cmder.net/}{Cmder}. Il n'est pas le plus rapide, mais
propose une intégration des outils Unix communs (\texttt{ls},
\texttt{pwd}, \texttt{grep}, \texttt{ssh}, \texttt{git},
\ldots\hspace{0pt}) sans trop se fouler.
\item
Pour tout autre système, vous devriez disposer en natif de ce qu'il
faut.
\end{enumerate}
\begin{figure}
\centering
\includegraphics{images/environment/terminal.png}
\caption{Mise en abîme}
\end{figure}
\subsection{Un gestionnaire de base de données}
Django gère plusieurs moteurs de base de données.
Certains sont gérés nativement par Django (PostgreSQL, MariaDB, SQLite); \emph{a priori}, ces trois-là sont disponibles pour tous les systèmes d'exploitation.
D'autres moteurs nécessitent des librairies tierces (Oracle, Microsoft SQL Server).
Il n'est pas obligatoire de disposer d'une application de gestion pour ces moteurs: pour les cas d'utilisation simples, le shell Django pourra largement suffire (nous y reviendrons).
Mais pour faciliter la gestion des bases de données elles-même, et si vous n'êtes pas à l'aise avec la
ligne de commande, choisissez l'une des applications d'administration
ci-dessous en fonction du moteur de base de données que vous souhaitez
utiliser.
\begin{itemize}
\item
Pour \textbf{PostgreSQL}, il existe
\href{https://www.pgadmin.org/}{pgAdmin}
\item
Pour \textbf{MariaDB} ou \textbf{MySQL}, partez sur
\href{https://www.phpmyadmin.net/}{PHPMyAdmin}
\item
Pour \textbf{SQLite}, il existe
\href{https://sqlitebrowser.org/}{SQLiteBrowser} PHPMyAdmin ou
PgAdmin.
\end{itemize}
\section{Conclusions (et intégration continue)}

View File

@ -6,46 +6,29 @@ Make it work, make it right, make it fast
--- Kent Beck
\end{quote}
En fonction de vos connaissances et compétences, la création d'une
nouvelle application est uneé tape relativement facile à mettre en
place. Le code qui permet de faire tourner cette application peut ne pas
être élégant, voire buggé jusqu'à la moëlle, il pourra fonctionner et
faire "preuve de concept".
En fonction de vos connaissances et compétences, la création d'une nouvelle application est une étape relativement facile à mettre en place.
Le code qui permet de faire tourner cette application peut ne pas être élégant, voire buggé jusqu'à la moëlle, il pourra fonctionner et faire "preuve de concept".
Les problèmes arriveront lorsqu'une nouvelle demande sera introduite,
lorsqu'un bug sera découvert et devra être corrigé ou lorsqu'une
dépendance cessera de fonctionner ou d'être disponible. Or, une
application qui n'évolue pas, meurt. Tout application est donc destinée,
soit à être modifiée, corrigée et suivie, soit à déperrir et à être
délaissée par ses utilisateurs. Et c'est juste cette maintenance qui est
difficile.
Les problèmes arriveront lorsqu'une nouvelle demande sera introduite, lorsqu'un bug sera découvert et devra être corrigé ou lorsqu'une dépendance cessera de fonctionner ou d'être disponible.
Or, une application qui n'évolue pas, meurt.
Toute application est donc destinée, soit à être modifiée, corrigée et suivie, soit à déperrir et à être
délaissée par ses utilisateurs.
Et c'est juste cette maintenance qui est difficile.
L'application des principes présentés et agrégés ci-dessous permet
surtout de préparer correctement tout ce qui pourra arriver, sans aller
jusqu'au « \textbf{You Ain't Gonna Need It} » (ou \textbf{YAGNI\index{YAGNI}}), qui
consiste à surcharger tout développement avec des fonctionnalités non
demandées, juste « au cas ou ». Pour paraphraser une partie de
l'introduction du livre \emph{Clean Architecture}
\cite{clean_architecture}:
L'application des principes présentés et agrégés ci-dessous permet surtout de préparer correctement tout ce qui pourra arriver, sans aller jusqu'au « \textbf{You Ain't Gonna Need It} » (ou \textbf{YAGNI\index{YAGNI}}), qui consiste à surcharger tout développement avec des fonctionnalités non demandées, juste « au cas ou ».
Pour paraphraser une partie de l'introduction du livre \emph{Clean Architecture} \cite{clean_architecture}:
\begin{quote}
Getting software right is hard: it takes knowledge and skills that most
young programmers don't take the time to develop. It requires a level of
discipline and dedication that most programmers never dreamed they'd
need. Mostly, it takes a passion for the craft and the desire to be a
professional.
Getting software right is hard: it takes knowledge and skills that most young programmers don't take the time to develop.
It requires a level of discipline and dedication that most programmers never dreamed they'd need.
Mostly, it takes a passion for the craft and the desire to be a professional.
--- Robert C. Martin Clean Architecture
\end{quote}
Le développement d'un logiciel nécessite une rigueur d'exécution et des
connaissances précises dans des domaines extrêmement variés. Il
nécessite également des intentions, des (bonnes) décisions et énormément
d'attention. Indépendamment de l'architecture que vous aurez choisie,
des technologies que vous aurez patiemment évaluées et mises en place,
une architecture et une solution peuvent être cassées en un instant, en
même temps que tout ce que vous aurez construit, dès que vous en aurez
détourné le regard.
Le développement d'un logiciel nécessite une rigueur d'exécution et des connaissances précises dans des domaines extrêmement variés.
Il nécessite également des intentions, des (bonnes) décisions et énormément d'attention.
Indépendamment de l'architecture que vous aurez choisie, des technologies que vous aurez patiemment évaluées et mises en place, une architecture et une solution peuvent être cassées en un instant, en même temps que tout ce que vous aurez construit, dès que vous en aurez détourné le regard.
Un des objectifs ici est de placer les barrières et les gardes-fous (ou
plutôt, les "\textbf{garde-vous}"), afin de péréniser au maximum les