Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FEAT_DOCUSAURUS_Mise_en_place : #68

Merged
merged 9 commits into from
Jun 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .docker/nginx-default.conf.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
server {
listen 80;
server_name localhost;

location / {
root /usr/share/nginx/html;

default_type "text/html";
try_files $uri $uri.html $uri/index.html index.html;
}


error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

}
45 changes: 45 additions & 0 deletions .github/workflows/build-test-pubtodockerhub.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: "build-test-pubtodockerhub"

# IMPORTANT : personnalisez cette variable pour que les images
# de votre application soient pousées sur dockerhub
# dans l'organisation/image docker ayant ce nom
env:
DOCKERHUB_IMAGE_PREFIX: abesesr/politique-developpement

on:
push:
paths-ignore:
- '.github/**'
workflow_dispatch:


jobs:
build-test-pubtodockerhub:
runs-on: ubuntu-latest
steps:


- name: "Build: checkout source code"
uses: actions/checkout@v2
- name: "Build: build docker image"
run: |
docker build . -t localimage:latest
- name: "Push: prepare version from git tags/branchs"
id: docker_tag_meta
uses: docker/metadata-action@v3
with:
images: ${{ env.DOCKERHUB_IMAGE_PREFIX }}
- name: "Push: login to DockerHub"
if: github.event_name != 'pull_request'
run: |
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
- name: "Push: push docker image"
if: github.event_name != 'pull_request'
run: |
DOCKER_TAGS="${{ steps.docker_tag_meta.outputs.tags }}"
for DOCKER_TAG in $DOCKER_TAGS
do
# publication de l'image du site politique-developpement
docker build . --target politique-developpement-image -t ${DOCKER_TAG}
docker push ${DOCKER_TAG}
done
56 changes: 56 additions & 0 deletions .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: 'Create release'

on:
workflow_dispatch:
inputs:
releaseVersion:
description: 'Version de la release (semver)'
required: true
default: 'x.x.x'

jobs:
create-release:
runs-on: ubuntu-latest

steps:
- name: 'Checkout source code'
uses: 'actions/checkout@v3'
with:
fetch-depth: '0' # to get all the tags locally
# https://stackoverflow.com/questions/67550727/push-event-doesnt-trigger-workflow-on-push-paths-github-actions
token: ${{ secrets.TOKEN_GITHUB_FOR_GITHUB_ACTION }}


- name: 'Verify release is created only on "main" or "master" git branch'
run: |
CURRENT_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo $CURRENT_GIT_BRANCH
[[ "$CURRENT_GIT_BRANCH" == "main" || "$CURRENT_GIT_BRANCH" == "master" ]] && exit 0 || exit 1
- name: 'Verify version is semver formatted (X.X.X)'
env:
NEW_TAG: ${{ github.event.inputs.releaseVersion }}
run: |
echo $NEW_TAG | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$'
- name: 'Verify version is not already used as a git tag'
env:
NEW_TAG: ${{ github.event.inputs.releaseVersion }}
run: |
[[ "$(git tag --list | grep $NEW_TAG)" == "" ]] && exit 0 || exit 1

- name: 'Generate the new version (patch few files + git tag)'
env:
NEW_TAG: ${{ github.event.inputs.releaseVersion }}
GITHUB_TOKEN: ${{ secrets.TOKEN_GITHUB_FOR_GITHUB_ACTION }}
run: |
# préparation de la release sur le dépôt git
git config --global user.email "github-action@noreply"
git config --global user.name "Github Action"
git tag $NEW_TAG
git push origin $NEW_TAG

- name: 'Create the github release'
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.inputs.releaseVersion }}
generate_release_notes: true
token: ${{ secrets.TOKEN_GITHUB_FOR_GITHUB_ACTION }}
21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Dependencies
/node_modules

# Production
/build

# Generated files
.docusaurus
.cache-loader

# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
/.idea/
28 changes: 0 additions & 28 deletions 04-Environnement de développement intégré.md

This file was deleted.

30 changes: 30 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
## Base ########################################################################
# Use a larger node image to do the build for native deps (e.g., gcc, python)
FROM node:18 as build-image

# Reduce npm log spam and colour during install within Docker
ENV NPM_CONFIG_LOGLEVEL=warn
ENV NPM_CONFIG_COLOR=false

# We'll run the app as the `node` user, so put it in their home directory
WORKDIR /app/

# Install dependencies
COPY ./package*.json /app/
RUN npm config set legacy-peer-deps true
RUN npm install

# Copy the source code over
COPY . /app/

# Build the Docusaurus app
RUN npm run build

## Deploy ######################################################################
# Use a stable nginx image
FROM nginx:1.25 as politique-developpement-image
# Copy what we've installed/built from production
COPY --from=build-image /app/build /usr/share/nginx/html/
COPY ./.docker/nginx-default.conf.template /etc/nginx/templates/default.conf.template
CMD ["nginx", "-g", "daemon off;"]
EXPOSE 80
154 changes: 154 additions & 0 deletions README-developpement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# Politique de développement de l'Abes

Le site est construit à l'aide de Docusaurus [Docusaurus](https://docusaurus.io/)

## Démarrage du site
Pour démarrer le site en local, saisissez la commande `docusaurus start` dans votre terminal.

>[!CAUTION]
>
> À chaque ajout/modification de page, il est important d'en vérifier la bonne syntaxe, notamment
>
> - des liens internes qui doivent être valides
> - de la mise entre accolades ouvrantes (`[AltGr] + [7]`) du code, en particulier les REGEX
> - de la bonne hiérarchisation des titres de niveau 1 `#` à 6 `######`
>
> Le non-respect de ces bonnes pratiques entrainera une erreur lors de la compilation du code et l'indisponibilité du site

## Fichiers Markdown
Les fichiers Markdown contenant la politique de développement se situent dans le répertoire `docs`.

## Indexations des fichiers Markdown
L'indexation des fichiers Markdown s'effectue dans le fichier `sidebars.js` :
```yaml
const sidebars = {
poldevSidebar: [
'readme',
'Gestion du code source',
'Intégration continue',
'Environnements de développement, test et production',
'Environnement de développement intégré',
'Architecture des projets',
'Tests unitaires et d\'intégration',
'Qualité de code',
'Documentation',
'Sécurité',
'FAQ',
'RGAA',
'Gestion des API',
],
```

Modifier l'ordre des fichiers markdown dans cette liste (`tutorialSidebar`) modifiera l'ordre d'affichage sur le site (liste des fichiers Markdown affichée à gauche).
>[!NOTE]
>
> Les labels attribués à chaque fichier md sont définis automatiquement lors de l'ajout d'un fichier md.

Le chargement du fichier `sidebars.js` s'effectue dans le fichier `docusaurus.config.js` :
```yaml
presets: [
[
'classic',
({
docs: {
sidebarPath: './sidebars.js',
editUrl:
'https://github.com/abes-esr/abes-politique-developpement',
},
}),
],
],
```

## Outil de recherche
La recherche au sein des fichiers Markdown est prise en charge par la dépendance `docusaurus-lunr-search` (_[docusaurus-lunr-search](https://www.npmjs.com/package/docusaurus-lunr-search)_)
L'affichage du champ de recherche se règle dans le fichier `docusaurus.config.js` :
```yaml
themeConfig:
({
navbar: {
items: [
{
type: 'search',
position: 'right',
},
]
}
})
```

## Apparence

### Thèmes
Les couleurs des thèmes clair et sombre peuvent être modifiées dans le fichier `src/css/custom.css`.

Le chargement du fichier `custom.css` s'effectue dans le fichier `docusaurus.config.js` :
```yaml
presets: [
[
'classic',
({
theme: {
customCss: './src/css/custom.css',
},
}),
],
],
```

L'affichage du bouton de sélection du thème se règle dans le fichier `docusaurus.config.js` :
```yaml
themeConfig:
({
colorMode: {
defaultMode: 'light',
disableSwitch: false,
respectPrefersColorScheme: false,
},
}),
```

### Table des matières
La table des matières (_affichée à droite_) s'effectue automatiquement.
Il est possible de régler le niveau d'affichage des titres Markdown au niveau global (du niveau 2 au niveau 6) dans le fichier `docusaurus.config.js` :
```yaml
themeConfig:
({
tableOfContents: {
minHeadingLevel: 2,
maxHeadingLevel: 2,
},
})
```

Il est possible de régler le niveau d'affichage des titres Markdown d'une page spécifique (du niveau 2 au niveau 6) directement dans le fichier Markdown concerné :
```yaml
---
toc_min_heading_level: 2
toc_max_heading_level: 5
---
```
>[!NOTE]
>
> Ce code doit être placé au début du fichier Markdown

Le formatage graphique de la table des matières est nativement géré par Docusaurus. Il est néanmoins possible de modifier son aspect graphique
en passant par le fichier `src/css/custom.css` :
```css
/* personalisation de la table des matières des pages Markdown (équivalent aux titres Markdown) */
ul.table-of-contents li:hover {
padding-right: 8px;
padding-left: 8px;
border-radius: 5px;
background: #f6f6f6;
color: #222f54;
}

ul.table-of-contents li a {
padding-right: 8px;
padding-left: 8px;
border-radius: 5px;
background: #f6f6f6;
color: #222f54;
}
```
29 changes: 7 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,12 @@
# Politique de développement
# Politique de développement de l'Abes

La politique de développement de l'Abes nous donne un cadre pour structurer nos développements informatiques. Cette politique est rédigée par les développeur(se)s de l'Abes avec la participation de collègues du service Infrastructures et Réseaux. Elle nous fournit des méthodes et des outils pour améliorer la qualité de nos projets et applications.
Vous êtes sur le README usager. Si vous souhaitez accéder au README développement, veuillez suivre ce lien : [README-developpement](README-developpement.md)

## Les objectifs visés
Projet Docusaurus permettant la publication de la politique de développement de l'Abes sur un site web.
Le site est déployé sur l'environnement de prod à l'aide de la configuration suivante :
https://github.com/abes-esr/politique-developpement-docker

* Avoir une maintenance facilitée des applications existantes (lisibilité, reprise de code, partage de modules)
* Faciliter l'intégration d'un nouveau développeur(se) dans une équipe
* Faciliter le transfert de responsabilité informatique d'une application
* Rester en phase avec l'état de l'art en termes de technologies et donc permettre de meilleures possibilités de collaboration
* Assurer le respect de règles en termes de sécurité
L'url d'accès du site en prod est : [https://politique-developpement.abes.fr/](https://politique-developpement.abes.fr/)

## Les moyens
Le site est construit à l'aide de Docusaurus [Docusaurus](https://docusaurus.io/)

Nous donnons des préconisations en termes d’architecture d'applications, de données, de choix de technologies, de langages de programmation, d'environnement de développement, de standards à respecter. Ceci permet de guider les développeur(se)s lors du démarrage sur de nouveaux projets mais aussi de garantir une meilleure compréhension du code par tous les développeurs.

Le code doit être rédigé en respectant des normes, il doit être systématiquement accompagné par des tests ainsi que par sa documentation qui est ensuite générée automatiquement et publiée sur un site, pertinente et à jour. Le code est maintenu dans une plateforme d'intégration continue qui garantit l'automatisation de l'exécution des tests lors des phases de construction, la vérification de la qualité du code, le stockage du code et les déploiements sur les différents environnements.

Cette politique de développement est bien évidemment perfectible et ouverte aux propositions d'amélioration. Nous l'adaptons au fil de nos expériences et de l'évolution des technologies. Nous nous en servons comme de lignes de conduite à suivre.

## Open source

Depuis 2019, nos nouveaux développements sont par défaut disponibles en open source sur la plateforme Github https://github.com/abes-esr/. Nous publions donc notre politique de développement en open source, à la fois pour montrer les règles que nous nous efforçons de suivre lors de nos développements et aussi pour la co-construction en facilitant les contributions extérieures.

## Contribuer à la politique de développement de l'Abes

Si vous souhaitez contribuer à la politique de développement de l'Abes, nous vous invitons à créer une pull request contenant votre contribution. L'équipe des développeurs de l'Abes se chargera alors de relire votre contribution, de la discuter le cas échéant, et enfin d'intégrer votre contribution. Les nouveaux développements réalisés par l'Abes suivront alors les éventuelles nouvelles préconisations renseignées dans cette politique.
3 changes: 3 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};
Loading
Loading