Skip to main content

Fetch collaborative documents from a Docs instance and generate static sites with Zensical

Project description

Docs2Static

Transforme des documents collaboratifs Docs en site statique avec Zensical. Homepage stylisee incluse.

Exemple : Document source -> Site genere

Installation

# Avec pip
pip install docs2static

# Avec uv
uv add docs2static

# Depuis les sources
git clone git@github.com:CoopCodeCommun/Docs2static.git
cd Docs2static
uv sync

Requiert Python 3.14+.

Configuration

cp env_example .env

Variables dans le .env :

Variable Description
DOCS_URL URL du document Docs racine
GITHUB_REPO Adresse SSH du depot GitHub (ex: git@github.com:User/Repo.git)
GITLAB_REPO Adresse SSH du depot GitLab (alternative)
BACKEND Moteur statique (par defaut : zensical)
TEMPLATE Template homepage (par defaut : phantom)

Exemple concret

Le .env suivant produit le site CoopCodeCommun.github.io/Docs2static :

DOCS_URL=https://notes.liiib.re/docs/fa5583b2-37fc-4016-998f-f5237fd41642/
GITHUB_REPO=https://github.com/CoopCodeCommun/Docs2static
BACKEND=zensical

Usage CLI

# Telecharger les documents et construire le site
docs2static

# Deployer sur GitHub/GitLab Pages (sans retelecharger)
docs2static --deploy

# Forcer le telechargement sans cache
docs2static --no-cache

# Specifier le format de sortie
docs2static -f html        # html, markdown ou both

Options

Option Description
-f, --format Format de sortie (html, markdown, both)
--no-cache Ignorer le cache SQLite (24h par defaut)
-b, --backend Moteur de site statique
-d, --deploy Deployer sans retelecharger

Metadonnees (frontmatter)

Ajoutez un bloc frontmatter au debut de vos documents Docs :

---
titre: Ma page
auteur·ice: Jonas
brouillon: non
resume: Description de la page
date: 2026-01-15
---
Cle (FR / EN) Usage
titre / title Titre de la page
auteur·ice / author Auteur du site (copyright)
resume / summary Description du site ou extrait
licence / license Licence affichee dans le copyright
brouillon / draft oui / true = page et enfants ignores
date Date du document (AAAA-MM-JJ)

Homepage et templates

Convention images

Dans le document racine Docs :

  • 1re image → logo du site (logo_file dans les metadonnees)
  • 2e image → image hero de fond (hero_image dans les metadonnees)

Frontmatter auto-enrichi

Docs2Static extrait automatiquement ces champs si absents du frontmatter :

Champ Source
image 1re image du contenu
hero_image 2e image du contenu
excerpt 1er paragraphe de texte (tronque a 160 caracteres)

Templates

Le template par defaut est phantom (inspire de HTML5UP Phantom). La homepage est generee dynamiquement depuis l'arbre de navigation : chaque section enfant devient une tuile coloree avec image, titre et extrait.

Pour changer de template :

# Dans le frontmatter du document racine
template: phantom

Ou via variable d'environnement :

TEMPLATE=phantom

Les templates sont stockes dans docs2static/assets/templates/{nom}/ avec les sous-dossiers overrides/ et stylesheets/.

Iframe embarque

Pour integrer un contenu externe (agenda, formulaire, etc.), ajoutez une cle iframe dans le frontmatter :

---
iframe: src="https://example.com/embed/" width="100%" height="1000px"
---

L'iframe sera affichee sous le contenu de la page.

Deploiement en production

GitHub Actions

Creez .github/workflows/docs2static.yml :

name: Build & Deploy Documentation

on:
  schedule:
    - cron: '0 6 * * *'   # Tous les jours a 6h
  workflow_dispatch:        # Lancement manuel

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v4

      - name: Setup Python
        run: uv python install 3.14

      - name: Install docs2static
        run: uv add docs2static

      - name: Build & Deploy
        env:
          DOCS_URL: ${{ secrets.DOCS_URL }}
          GITHUB_REPO: ${{ secrets.GITHUB_REPO }}
          BACKEND: zensical
        run: |
          uv run docs2static
          uv run docs2static --deploy

Ajoutez les secrets DOCS_URL et GITHUB_REPO dans les parametres du depot. Configurez une cle SSH de deploiement avec acces en ecriture au depot cible.

GitLab CI

Creez .gitlab-ci.yml :

pages:
  image: python:3.14
  stage: deploy
  script:
    - pip install uv
    - uv add docs2static
    - uv run docs2static
    - uv run docs2static --deploy
  variables:
    DOCS_URL: $DOCS_URL
    GITLAB_REPO: $GITLAB_REPO
    BACKEND: zensical
  only:
    - schedules
    - web

Ajoutez les variables DOCS_URL et GITLAB_REPO dans CI/CD > Variables.

Deploiement manuel (serveur)

# Installation
pip install docs2static

# Configuration
export DOCS_URL="https://notes.liiib.re/docs/votre-doc-id/"
export GITHUB_REPO="git@github.com:Org/Repo.git"
export BACKEND="zensical"

# Execution
docs2static              # Telecharge + build
docs2static --deploy     # Deploie sur Pages

# Cron (optionnel)
echo "0 6 * * * cd /opt/docs && docs2static && docs2static --deploy" | crontab -

Architecture

docs2static/
  main.py                # Orchestration : API, arbre, frontmatter, images
  zensical_backend.py    # Integration Zensical : navigation, toml, deploiement
  assets/templates/      # Templates homepage (phantom, etc.)
    phantom/
      overrides/         # Surcharge du theme Zensical (main.html)
      stylesheets/       # CSS homepage (home.css)

Pipeline : Docs API -> arbre -> frontmatter -> images -> Markdown -> Zensical build -> deploy

Pour plus de details, voir guideline.md.

Tests

uv run python -m pytest tests/

# Avec options
uv run python tests/test_main.py --no-cache     # Sans cache
uv run python tests/test_main.py --deploy        # Test deploiement reel
uv run python tests/test_main.py --test-zensical # Test rendu interactif

Licence

Apache 2.0 - Voir LICENSE.

Credits

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docs2static-0.6.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

docs2static-0.6-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

File details

Details for the file docs2static-0.6.tar.gz.

File metadata

  • Download URL: docs2static-0.6.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for docs2static-0.6.tar.gz
Algorithm Hash digest
SHA256 55db2d6b898b55132e191fc8cbeb6e0543b32509ac2302ab0e4533555888b745
MD5 c29b06bad365a33cf839201e99d44adf
BLAKE2b-256 d17fa5bc7b50ba296bc444198eb7e8d3c8e93a59a6f1bc87152a4f7737e3855d

See more details on using hashes here.

File details

Details for the file docs2static-0.6-py3-none-any.whl.

File metadata

  • Download URL: docs2static-0.6-py3-none-any.whl
  • Upload date:
  • Size: 30.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for docs2static-0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 9868b58f8ce280d4b753234d845579b294f84c35bef98c91979331d646aae759
MD5 c1dd40eb7fc64b98c9e5fd29b5086d44
BLAKE2b-256 f276700c49f0a1181e5513e024d6c1554d6542bb374ee6b548f6ae6facb34eaa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page