Documentation#

Head project : tuto_devops#

Inspiration : sphinx-blogging de Chris Chris Holdgraf#

Gitlab project#

Issues#

pipelines#

Site#

root directory#

$ ls -als
total 176
4 drwxr-xr-x 14   4096 nov.   7 14:54 .
4 drwxr-xr-x  3   4096 oct.  31 07:30 ..
4 drwxr-xr-x  4   4096 nov.   7 14:57 _build
4 drwxr-xr-x  9   4096 nov.   7 14:56 chantiers
4 -rwxrwxrwx  1   3900 nov.   7 14:54 conf.py
4 drwxr-xr-x  2   4096 nov.   1 09:08 ethique
4 -rw-r--r--  1     98 oct.  31 07:55 feed.xml
4 drwxr-xr-x  8   4096 nov.   7 15:03 .git
4 -rwxrwxrwx  1     49 mai   31 10:41 .gitignore
4 -rw-rw-rw-  1    214 août  19 17:43 .gitlab-ci.yml
4 drwxrwxrwx  2   4096 nov.   7 10:28 glossaire
4 drwxr-xr-x  2   4096 oct.  19 18:09 index
4 -rwxrwxrwx  1    800 nov.   7 14:51 index.rst
4 -rw-r--r--  1   1177 nov.   6 08:46 Makefile
4 drwxr-xr-x  2   4096 oct.  31 12:17 manifeste
4 drwxr-xr-x  4   4096 nov.   7 07:33 meta
84 -rw-r--r--  1  85325 nov.   6 19:59 poetry.lock
4 -rw-rw-rw-  1   1141 nov.   6 08:47 .pre-commit-config.yaml
4 -rw-rw-rw-  1    338 oct.  26 17:44 pyproject.toml
4 -rw-rw-rw-  1   2019 nov.   7 07:18 requirements.txt
4 drwxr-xr-x  8   4096 nov.   2 08:58 ressources
4 drwxr-xr-x  3   4096 nov.   7 15:02 reunions
4 drwxr-xr-x  2   4096 nov.   4 19:07 _static
4 drwxr-xr-x  3   4096 oct.  31 16:41 syndicats

pyproject.toml#

 1[tool.poetry]
 2name = "onestlatech"
 3version = "0.1.0"
 4description = "onestlatech"
 5authors = ["Patrick <patbakou@riseup.net>"]
 6license = "MIT"
 7
 8[tool.poetry.dependencies]
 9python = "^3.11"
10sphinx = "*"
11sphinx-panels = "*"
12ablog = "*"
13pydata-sphinx-theme = "*"
14myst-parser = "*"
15myst_nb = "*"
16
17
18[tool.poetry.dev-dependencies]

conf.py#

  1#
  2# onestla.tech
  3#
  4import sys, os
  5
  6import platform
  7from datetime import datetime
  8
  9# https://docs.python.org/3.9/library/zoneinfo.html
 10from zoneinfo import ZoneInfo
 11
 12source_suffix = ".rst"
 13master_doc = "index"
 14index_doc = "index"
 15now = datetime.now(tz=ZoneInfo("Europe/Paris"))
 16version = f"{now.year}-{now.month:02}-{now.day:02} {now.hour:02}H ({now.tzinfo})"
 17project = "onestla.tech"
 18copyright = f"2011-{now.year}, onestlatech, Creative Commons CC BY-NC-SA 3.0. Built with Python {platform.python_version()}"
 19release = version
 20exclude_patterns = [".venv", "build", ".git"]
 21extensions = ["sphinx.ext.intersphinx"]
 22html_theme = "bizstyle"
 23pygments_style = "colorful"
 24html_title = "Onestlatech"
 25html_short_title = html_title
 26intersphinx_mapping = {
 27    "http://france1.frama.io/juridique": None,
 28    "https://international.frama.io/cnt/": None,
 29}
 30extensions += ["sphinx.ext.todo"]
 31todo_include_todos = True
 32extensions += [
 33    # https://ablog.readthedocs.io/manual/markdown/
 34    "myst_nb",
 35]
 36# MyST config
 37myst_update_mathjax = False
 38myst_admonition_enable = True
 39myst_deflist_enable = True
 40extensions += [
 41    "ablog",
 42]
 43# https://ablog.readthedocs.io/manual/ablog-configuration-options/
 44#####################################################################
 45blog_path = "onestlatech"
 46# Base URL for the website, required for generating feeds.
 47blog_baseurl = "https://france1.frama.io/onestlatech/"
 48blog_title = "onestlatech"
 49# Post related
 50# Date display format (default is '%b %d, %Y') for published posts
 51post_date_format = "%Y-%m-%d"
 52# Number of seconds (default is 5) that a redirect page waits before
 53# refreshing the page to redirect to the post
 54post_redirect_refresh = 1
 55# Index of the image that will be displayed in the excerpt of the post.
 56# Default is 0, meaning no image.
 57# Setting this to 1 will include the first image, when available, to the excerpt.
 58# This option can be set on a per post basis using post directive option image
 59post_auto_image = 1
 60# Number of paragraphs (default is 1) that will be displayed as an excerpt from the post
 61post_auto_excerpt = 4
 62# Blog feeds
 63blog_feed_archives = True
 64blog_feed_fulltext = True
 65blog_feed_subtitle = False
 66blog_feed_titles = False
 67# Specify number of recent posts to include in feeds, default is None for all posts
 68blog_feed_length = None
 69# Font awesome
 70# ABlog templates will use of Font Awesome icons if one of the following is set: fontawesome_link_cdn
 71fontawesome_included = True
 72# https://ablog.readthedocs.io/manual/posting-and-listing/?highlight=blog_post_pattern#posting-with-page-front-matter
 73# Instead of adding blogpost: true to each page, you may also provide a
 74# pattern (or list of patterns) in your conf.py file using the blog_post_pattern option
 75blog_post_pattern = "news/*/*/*"
 76html_extra_path = ["feed.xml"]
 77liste_full = [
 78    "postcard.html",
 79    "recentposts.html",
 80    "sourcelink.html",
 81    "archives.html",
 82    "tagcloud.html",
 83    "categories.html",
 84    "searchbox.html",
 85]
 86html_sidebars = {
 87    "index": liste_full,
 88    "meta/**": liste_full,
 89    "chantiers/**": liste_full,
 90    "reunions/**": liste_full,
 91    "ethique/**": liste_full,
 92    "glossaire/**": liste_full,
 93    "manifeste/**": liste_full,
 94    "ressources/**": liste_full,
 95    "syndicats/**": liste_full,
 96}
 97extensions += [
 98    "sphinx_panels",
 99]
100# Panels config
101panels_add_bootstrap_css = False
102exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", ".venv"]
103pygments_style = "sphinx"
104html_theme = "pydata_sphinx_theme"
105html_theme_options = {
106    "search_bar_text": "Search this site...",
107}
108
109

gitlab-ci.yaml#

 1image: python:3.11.1-slim-bullseye
 2
 3pages:
 4  script:
 5  - pip install -r requirements.txt
 6  - sphinx-build -d _build/doctrees . _build/html
 7  - mv _build/html public
 8  artifacts:
 9    paths:
10    - public
11  only:
12  - main

.pre-commit-config.yaml#

 1---
 2
 3# .pre-commit-config.yaml
 4# ========================
 5#
 6# pre-commit clean
 7# pre-commit install
 8# pre-commit install-hooks
 9#
10# precommit hooks installation
11#
12# - pre-commit autoupdate
13#
14# - pre-commit run black
15#
16# continuous integration
17# ======================
18#
19# - pre-commit run --all-files
20#
21
22repos:
23  - repo: https://github.com/pre-commit/pre-commit-hooks
24    rev: v4.4.0
25    hooks:
26    - id: trailing-whitespace
27    - id: end-of-file-fixer
28    - id: check-yaml
29    - id: check-json
30    - id: fix-encoding-pragma
31      args: ['--remove']
32    - id: forbid-new-submodules
33    - id: mixed-line-ending
34      args: ['--fix=lf']
35      description: Forces to replace line ending by the UNIX 'lf' character.
36    # - id: pretty-format-json
37    #  args: ['--no-sort-keys']
38    - id: check-added-large-files
39      args: ['--maxkb=1000']
40    - id: no-commit-to-branch
41      args: [--branch, staging]
42
43  - repo: https://github.com/ambv/black
44    rev: 22.12.0
45    hooks:
46    - id: black
47      language_version: python3.9
48
49  - repo: https://github.com/asottile/reorder_python_imports
50    rev: v3.9.0
51    hooks:
52      - id: reorder-python-imports

Makefile#

 1# Minimal makefile for Sphinx documentation
 2#
 3
 4# You can set these variables from the command line.
 5SPHINXOPTS    =
 6SPHINXBUILD   = sphinx-build
 7SPHINXPROJ    = Tutopython
 8SOURCEDIR     = .
 9BUILDDIR      = _build
10
11THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
12
13# Put it first so that "make" without argument is like "make help".
14help:
15	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
16	@echo " "
17	@echo "Targets:"
18	@echo " "
19	@echo "- make check_all"
20	@echo "- make req"
21	@echo "- make updatetools"
22	@echo "- make update"
23	@echo "- make tree"
24	@echo " "
25
26
27check_all:
28	pre-commit run --all-files
29
30req:
31	poetry env info --path
32	poetry show --tree
33	poetry check
34	poetry export -f requirements.txt --without-hashes  > requirements.txt
35	cat requirements.txt
36
37tree:
38	rm -Rf _build
39	tree -L 7 > tree.txt
40
41update:
42	poetry update
43	@$(MAKE) -f $(THIS_MAKEFILE) req
44	
45	pre-commit autoupdate
46
47updatetools:
48	pre-commit autoupdate
49	gitmoji --update
50	git status
51
52.PHONY: help Makefile
53
54# Catch-all target: route all unknown targets to Sphinx using the new
55# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
56%: Makefile
57	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

Arborescence de la documentation#

make tree
  1.
  2├── chantiers
  3│   ├── chantier_1
  4│   │   ├── chantier_1.rst
  5│   │   └── ressources
  6│   │       ├── cest_quoi_un_syndicat
  7│   │       │   └── cest_quoi_un_syndicat.rst
  8│   │       ├── differences_structurelles
  9│   │       │   └── differences_struturelles.rst
 10│   │       └── ressources.rst
 11│   ├── chantier_2
 12│   │   ├── chantier_2.rst
 13│   │   └── outils
 14│   │       ├── decidim
 15│   │       │   └── decidim.rst
 16│   │       ├── loomio
 17│   │       │   └── loomio.rst
 18│   │       ├── outils.rst
 19│   │       └── padlet
 20│   │           └── padlet.rst
 21│   ├── chantier_3
 22│   │   └── chantier_3.rst
 23│   ├── chantier_4
 24│   │   └── chantier_4.rst
 25│   ├── chantier_5
 26│   │   └── chantier_5.rst
 27│   ├── chantier_6
 28│   │   ├── chantier_6.rst
 29│   │   └── posts
 30│   │       ├── 2020
 31│   │       │   ├── 11
 32│   │       │   │   ├── 07
 33│   │       │   │   │   └── 07.rst
 34│   │       │   │   └── 11.rst
 35│   │       │   └── 2020.rst
 36│   │       └── posts.rst
 37│   ├── chantier_7
 38│   │   └── chantier_7.rst
 39│   └── chantiers.rst
 40├── conf.py
 41├── ethique
 42│   └── ethique.rst
 43├── feed.xml
 44├── glossaire
 45│   └── glossaire.rst
 46├── index
 47│   └── index.rst
 48├── index.rst
 49├── Makefile
 50├── manifeste
 51│   └── manifeste.rst
 52├── meta
 53│   ├── documentation
 54│   │   └── documentation.rst
 55│   ├── meta.rst
 56│   └── onestlatech
 57│       └── onestlatech.rst
 58├── poetry.lock
 59├── pyproject.toml
 60├── requirements.txt
 61├── ressources
 62│   ├── climat
 63│   │   ├── bonpoteofficiel
 64│   │   │   └── bonpoteofficiel.rst
 65│   │   ├── cassouman40
 66│   │   │   └── cassouman40.rst
 67│   │   ├── climat.rst
 68│   │   ├── peter_kalmus
 69│   │   │   └── peter_kalmus.rst
 70│   │   └── valmasdel
 71│   │       └── valmasdel.rst
 72│   ├── economie
 73│   │   ├── economie.rst
 74│   │   ├── gael_giraud
 75│   │   │   └── gael_giraud.rst
 76│   │   ├── gilles_raveaud
 77│   │   │   └── gilles_raveaud.rst
 78│   │   └── maxim_combes
 79│   │       └── maxim_combes.rst
 80│   ├── energie
 81│   │   ├── centrale_energie
 82│   │   │   └── centrale_energie.rst
 83│   │   ├── energie.rst
 84│   │   └── theshiftproject
 85│   │       └── theshiftproject_energie.rst
 86│   ├── informatique
 87│   │   ├── adullact
 88│   │   │   └── adullact.rst
 89│   │   ├── april
 90│   │   │   └── april.rst
 91│   │   ├── chatons
 92│   │   │   └── chatons.rst
 93│   │   ├── codefor.fr
 94│   │   │   └── codefor.fr.rst
 95│   │   ├── cooptilleuls
 96│   │   │   └── cooptilleuls.rst
 97│   │   ├── designersethiques
 98│   │   │   └── designersethiques.rst
 99│   │   ├── ffdn
100│   │   │   └── ffdn.rst
101│   │   ├── framasoft
102│   │   │   └── framasoft.rst
103│   │   ├── informatique.rst
104│   │   ├── laquadrature
105│   │   │   └── laquadrature.rst
106│   │   ├── lescommuns.org
107│   │   │   └── lescommuns.org.rst
108│   │   ├── maisouvaleweb
109│   │   │   └── maisouvaleweb.rst
110│   │   ├── mouton_numerique
111│   │   │   ├── manifeste
112│   │   │   │   └── manifeste.rst
113│   │   │   └── mouton_numerique.rst
114│   │   ├── reset.fing
115│   │   │   ├── dispositif
116│   │   │   │   ├── dispositif.rst
117│   │   │   │   └── qualites-numériques.webp
118│   │   │   └── reset.fing.rst
119│   │   └── tisseurs
120│   │       └── tisseurs.rst
121│   ├── politique
122│   │   ├── partipirate
123│   │   │   ├── partipirate.rst
124│   │   │   └── statuts
125│   │   │       ├── declararation_generale
126│   │   │       │   └── declaration_generale.rst
127│   │   │       ├── partie_1
128│   │   │       │   └── partie_1.rst
129│   │   │       ├── partie_2
130│   │   │       │   ├── partie_2.rst
131│   │   │       │   └── titre_1
132│   │   │       │       └── titre_1.rst
133│   │   │       └── statuts.rst
134│   │   └── politique.rst
135│   ├── ressources.rst
136│   └── sobriete_numerique
137│       ├── negaoctet
138│       │   └── negaoctet.rst
139│       ├── numeriqueEcoResponsable
140│       │   └── numeriqueEcoResponsable.rst
141│       ├── sobriete_numerique.rst
142│       └── theshiftproject
143│           ├── ptef
144│           │   └── ptef.rst
145│           ├── rapports
146│           │   ├── 2018
147│           │   │   ├── 2018.rst
148│           │   │   └── Rapport-final-v8-WEB.pdf
149│           │   ├── 2019
150│           │   │   └── 2019.rst
151│           │   ├── 2020
152│           │   │   ├── 2020_10_15_Deployer_la_sobriete_numerique_PPT-PRESENTATION.pdf
153│           │   │   ├── 2020.rst
154│           │   │   ├── Deployer-la-sobriete-numerique_Rapport-complet_ShiftProject_2020.pdf
155│           │   │   └── Deployer-la-sobriete-numerique_Resume_ShiftProject_2020.pdf
156│           │   └── rapports.rst
157│           ├── sobriete_numerique
158│           │   ├── Deployer-la-sobriete-numerique_Resume_ShiftProject.pdf
159│           │   ├── ressources.png
160│           │   └── sobriete_numerique.rst
161│           └── theshiftproject.rst
162├── reunions
163│   ├── 2020
164│   │   ├── 10
165│   │   │   ├── 10.rst
166│   │   │   ├── 15
167│   │   │   │   ├── 15.rst
168│   │   │   │   └── smert.rst
169│   │   │   └── 30
170│   │   │       ├── 30.rst
171│   │   │       ├── framapad
172│   │   │       │   ├── campagnes
173│   │   │       │   │   └── campagnes.rst
174│   │   │       │   ├── fonctionnement
175│   │   │       │   │   └── fonctionnement.rst
176│   │   │       │   ├── forme_juridique
177│   │   │       │   │   └── forme_juridique.rst
178│   │   │       │   ├── framapad.rst
179│   │   │       │   ├── liens
180│   │   │       │   │   └── liens.rst
181│   │   │       │   ├── ordre_du_jour
182│   │   │       │   │   └── ordre_du_jour.rst
183│   │   │       │   └── retour_bilan
184│   │   │       │       └── retour_bilan.rst
185│   │   │       └── reunion_discord.rst
186│   │   ├── 11
187│   │   │   ├── 06
188│   │   │   │   ├── 06.rst
189│   │   │   │   └── reunion.rst
190│   │   │   └── 11.rst
191│   │   └── 2020.rst
192│   ├── prisedeparole.jpg
193│   └── reunions.rst
194├── _static
195│   ├── 1500x500.webp
196│   └── PoingLeve.webp
197├── syndicats
198│   ├── definitions
199│   │   ├── definition_1
200│   │   │   ├── cnt_nas.png
201│   │   │   └── definition_1.rst
202│   │   └── definitions.rst
203│   └── syndicats.rst
204└── tree.txt
205
20691 directories, 112 files