Commit 6ff33d3d authored by Christophe Benz's avatar Christophe Benz

Update CI: do not commit generated files, generate them for each pipeline

parent 70c3ff4e
Pipeline #1229 passed with stages
in 1 minute and 48 seconds
stages:
- build_docker_image
- generate
- commit
- build
- deploy
variables:
CI_DOCKER_IMAGE: $CI_REGISTRY_IMAGE:latest
CI_REPOSITORY_SSH_USER: git
CI_REPOSITORY_DOMAIN: git.opendatafrance.net
CI_REPOSITORY_SSH_URL: ${CI_REPOSITORY_SSH_USER}@${CI_REPOSITORY_DOMAIN}:${CI_PROJECT_PATH}.git
LC_ALL: fr_FR.UTF-8
PDF_FILE: Socle Commun des Données Locales.pdf
TZ: Europe/Paris
......@@ -21,9 +16,6 @@ Build Docker image:
- Dockerfile.ci
refs:
- master
except:
variables:
- $GENERATE_ASSETS
image: docker:stable
services:
- docker:dind
......@@ -33,61 +25,35 @@ Build Docker image:
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker build -t $CI_DOCKER_IMAGE -f Dockerfile.ci .
- docker push $CI_DOCKER_IMAGE
- docker build -t $CI_REGISTRY_IMAGE:latest -f Dockerfile.ci .
- docker push $CI_REGISTRY_IMAGE:latest
tags:
- docker-privileged
Generate assets:
Generate files:
stage: generate
only:
variables:
- $GENERATE_ASSETS
image: $CI_DOCKER_IMAGE
image: $CI_REGISTRY_IMAGE:latest
variables:
CATALOG_URL: https://git.opendatafrance.net/scdl/catalog/raw/master/catalog.json
CONTRIBUTING_MD_URL: https://git.opendatafrance.net/scdl/catalog/raw/master/CONTRIBUTING.md
before_script:
- pip3 install --requirement requirements.txt
script:
- wget "$CONTRIBUTING_MD_URL"
- mkdir schemas templates
- python3 ./scripts/generate_assets_from_schema_catalog.py "$CATALOG_URL" schemas templates
- python3 ./scripts/generate_files_from_schema_catalog.py "$CATALOG_URL" schemas templates
docs.template/SUMMARY.j2 SUMMARY.md
artifacts:
name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
paths:
- CONTRIBUTING.md
- SUMMARY.md
- schemas/
- templates/
Commit generated assets:
stage: commit
only:
variables:
- $GENERATE_ASSETS
image: $CI_DOCKER_IMAGE
before_script:
- eval $(ssh-agent -s)
- ssh-add <(echo "$COMMIT_SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- ssh-keyscan -t rsa $CI_REPOSITORY_DOMAIN >> ~/.ssh/known_hosts
- git config --global user.name "GitLab Continuous Integration"
- git config --global user.email "<>"
script:
- git clone --branch $CI_COMMIT_REF_NAME $CI_REPOSITORY_SSH_URL
- rm -rf $CI_PROJECT_NAME/docs/schemas $CI_PROJECT_NAME/docs/templates
- mv SUMMARY.md schemas templates $CI_PROJECT_NAME/docs/
- cp $CI_PROJECT_NAME/docs.template/schemas/README.md $CI_PROJECT_NAME/docs/schemas
- cd $CI_PROJECT_NAME
- git add -A
- git commit -m "Update generated assets" || true
- git push
Build Gitbook:
stage: build
except:
variables:
- $GENERATE_ASSETS
image: $CI_DOCKER_IMAGE
image: $CI_REGISTRY_IMAGE:latest
script:
- ./scripts/build_gitbook.sh
artifacts:
......@@ -98,19 +64,16 @@ Build Gitbook:
Deploy Gitbook:
stage: deploy
except:
variables:
- $GENERATE_ASSETS
only:
- master
image: $CI_DOCKER_IMAGE
image: $CI_REGISTRY_IMAGE:latest
variables:
SERVER_DIRECTORY: scdl-documentation-static
SERVER_HOST: scdl.opendatafrance.net
SERVER_USER: validata
before_script:
- eval $(ssh-agent -s)
- ssh-add <(echo "$DEPLOY_SSH_PRIVATE_KEY")
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- ssh-keyscan -t rsa $SERVER_HOST >> ~/.ssh/known_hosts
script:
......
......@@ -5,5 +5,6 @@
{%- for schema in schemas %}
- [{{ schema.title }}](schemas/{{ schema.name }}.md)
{%- endfor %}
- [Télécharger en PDF](télécharger.md)
- [Badge Validata](badge.md)
\ No newline at end of file
- [Contribuer au SCDL](CONTRIBUTING.md)
- [Badge Validata](badge.md)
- [Télécharger en PDF](télécharger.md)
\ No newline at end of file
# Comment contribuer au Socle commun des données locales (SCDL) ?
Tous les schémas du SCDL sont référencés dans le [Catalogue des schémas SCDL](https://git.opendatafrance.net/scdl/catalog/).
L'ajout d'un schéma au catalogue se fait en proposant d'amender le fichier [catalog.json](https://git.opendatafrance.net/scdl/catalog/blob/master/catalog.json) sous forme de _merge request_.
## Critères d'acceptation
[OpenDataFrance](http://opendatafrance.net/) se réserve le droit d'accepter ou de refuser l'ajout d'un schéma au sein du SCDL.
Pour candidater, un schéma doit :
- être écrit en JSON conformément aux spécifications [Table Schema](https://frictionlessdata.io/specs/table-schema/). Les métadonnées du schéma doivent employer [les propriétés qui ont été standardisées](https://github.com/frictionlessdata/specs/blob/master/specs/patterns.md#table-schema-metadata-properties), avec au minimum :
- `name` : identifiant, ou "slug" ;
- `title` : nom courant ;
- `description` ;
- `homepage` : page d'accueil ou dépôt Git ;
- `path` : URL de cette version du schéma ;
- `created` : date de création ;
- `lastModified` : date de publication de cette version ;
- `version` : le numéro de version au format [SemVer](https://semver.org/lang/fr/) ;
- être nommé `schema.json` ;
- être accompagné d'un fichier `README.md` complet, présentant notamment le contexte de sa création ;
- être mis à disposition en ligne sur une URL stable.
Optionnel :
- être mis à disposition dans un dépôt Git afin de bénéficier de la gestion des versions (voir ci-dessous) ;
- un fichier `CHANGELOG.md` peut être publié au même endroit que le fichier `schema.json` afin d'apporter des informations sur les différentes mises à jour du schéma ;
- des données tabulaires d'exemple sous forme de fichiers CSV, valides ou invalides, peuvent également être ajoutées dans un dossier séparé (et référencées dans le schéma grâce à la propriété `resources`).
## Cycle de vie d'un schéma SCDL
### Contribution
Concerne la création initiale ou la mise à jour d'un schéma.
Une contribution se fait toujours dans une branche, la branche `master` étant protégée. Plusieurs branches peuvent coexister lorsque différentes évolutions n'ont pas la même nature.
Lorsqu'un changement est cassant, penser à mettre à jour le fichier d'exemple valide pour qu'il reste valide.
Le contributeur ne doit pas nécessairement mettre à jour `CHANGELOG.md` ni le numéro de version dans `schema.json` (à faire lors de l'intégration et de la publication).
Lorsque le contributeur n'est pas membre de l'équipe, il travaillera dans un fork du dépôt du schéma.
Lorsqu'une branche est prête à être proposée, le contributeur ouvre une _merge request_.
### Intégration
Concerne la revue et l'acceptation des changements proposés par un contributeur.
L'intégrateur est celui qui a les droits d'écriture sur la branche `master`. Après vérification de la _merge request_, il peut fusionner la branche dans `master`. Ainsi `master` accumule un certain nombre de modifications par rapport à la dernière version publiée.
Conséquence : le fichier `catalog.json` ne doit pas référencer les schémas depuis `master` mais depuis des URLs contenant un _tag_ (cf ci-dessous).
L'intégrateur doit tenir à jour une section prévisionnelle dans le `CHANGELOG.md` de type "X.Y.Z -> next" où "X.Y.Z" est la dernière version publiée et "next" est un marqueur qui sera remplacé par le nouveau numéro de version lors de la publication. Cette section doit être placée tout en haut du fichier (le plus récent en premier).
### Publication d'une version ("release")
Cette dernière étape consiste à rendre visibles et utilisables, notamment sur Validata, les changements accumulés dans `master` depuis la dernière version publiée. Il s'agit de figer, à un instant _t_ et dans un ensemble cohérent, tous les fichiers du dépôt du schéma (schéma, documentation, fichiers exemples, etc.).
Les schémas SCDL suivent le principe du [_semantic versioning_](https://semver.org/lang/fr/).
L'objectif est d'attribuer un nouveau numéro de version au schéma. Pour cela :
- déterminer si l'ensemble des modifications depuis la version précédente est rétrocompatible ou non ("cassant")
- mettre à jour le numéro de version en conséquence (majeur, mineur ou patch) dans `schema.json`:
- `version`
- `lastModified` : date de mise à jour
- `path` et `resources` : mise à jour de l'URL avec le bon _tag_ de version
- ajouter ou modifier l'entrée dans le `CHANGELOG.md` (le plus récent en haut) qui décrit les changements rétrocompatibles et non-rétrocompatibles dans 2 listes séparées ([exemple](https://git.opendatafrance.net/scdl/adresses/blob/v1.1.2/CHANGELOG.md)
- faire un _commit_ de _release_ qui ne contienne que les 2 points précédents, dont le message est "Version X.Y.Z" (remplacer X.Y.Z)
- _tagger_ ce _commit_ avec `vX.Y.Z` (remplacer X.Y.Z)
- _pusher_ 2 fois : `git push origin master` et `git push --tags`
- [Socle Commun des Données Locales](README.md)
- [Recommandations relatives aux jeux de données](recommandations-relatives-aux-jeux-de-donnees.md)
- [Recommandations relatives aux schémas de validation](recommandations-relatives-aux-schemas-de-validation.md)
- [Schémas du SCDL](schemas/README.md)
- [Base adresse locale](schemas/adresses.md)
- [Catalogue simplifié](schemas/catalogue.md)
- [Délibérations](schemas/deliberations.md)
- [Équipements](schemas/equipements.md)
- [Infrastructures de recharge pour véhicules électriques](schemas/irve.md)
- [Marchés publics](schemas/marches-publics.md)
- [Subventions](schemas/subventions.md)
- [Télécharger en PDF](télécharger.md)
- [Badge Validata](badge.md)
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
# Infrastructures de recharge pour véhicules électriques
Spécification du fichier d'échange relatif aux données concernant la localisation géographique et les caractéristiques techniques des stations et des points de recharge pour véhicules électriques
## Contexte
Dans le but de constituer un répertoire national des Infrastructures de recharge pour véhicules électriques (IRVE), ouvert et accessible à tous, les collectivités locales porteuses d'un projet d'installation d'IRVE doivent, au fur et à mesure de la mise en service des stations, publier sur la plateforme data.gouv.fr les données statiques relatives à la localisation et aux caractéristiques techniques de ces installations selon les modalités définies dans [l'arrêté du 12 janvier 2017](https://www.legifrance.gouv.fr/jo_pdf.do?id=JORFTEXT000033860733).
De fait, ce schéma a été élaboré par Etalab à partir des documents suivants :
* **Documents de cadrage juridique**
* [Décret n° 2017-26 du 12 janvier 2017 relatif aux infrastructures de recharge pour véhicules électriques et portant diverses mesures de transposition de la directive 2014/94/UE du Parlement européen et du Conseil du 22 octobre 2014 sur le déploiement d’une infrastructure pour carburants alternatifs](https://www.legifrance.gouv.fr/jo_pdf.do?id=JORFTEXT000033860620)
* [Arrêté du 12 janvier 2017 relatif aux données concernant la localisation géographique et les caractéristiques techniques des stations et des points de recharge pour véhicules électriques](https://www.legifrance.gouv.fr/jo_pdf.do?id=JORFTEXT000033860733)
* [Arrêté du 12 janvier 2017 précisant les dispositions relatives aux identifiants des unités d’exploitation pour la recharge des véhicules électriques](https://www.legifrance.gouv.fr/jo_pdf.do?id=JORFTEXT000033860743)
* **Documents de cadrage technique**
* [Fichier de consolidation des stations de recharge de véhicules électriques sur data.gouv.fr](https://www.data.gouv.fr/fr/datasets/fichier-exemple-stations-de-recharge-de-vehicules-electriques/)
* [Définition et structure des identifiants attribués par l'Association Française pour l'Itinérance de la Recharge Electrique des Véhicules \(AFIREV\)](http://www.afirev.fr/fr/informations-generales/)
## Consolidation
Etalab réalise une consolidation des jeux de données IRVE déposés sur data.gouv.fr. Le code est [disponible ici](https://github.com/etalab/schema-irve/tree/master/aggregration). Le fichier en résultant est [publié ici sur data.gouv.fr](https://www.data.gouv.fr/fr/datasets/5448d3e0c751df01f85d0572).
## Voir aussi
* [Fichier gabarit à télécharger au format csv](https://www.data.gouv.fr/fr/datasets/fichier-exemple-stations-de-recharge-de-vehicules-electriques/) (proposé par Etalab)
* [Fichier gabarit à télécharger au format xlsx](https://scdl.opendatafrance.net/docs/templates/irve.xlsx) (généré automatiquement à partir du schéma)
Pour poser une question, commenter, faire un retour d’usage ou contribuer à l’amélioration du modèle de données, vous pouvez :
* adresser un message à [validation@data.gouv.fr](mailto:validation@data.gouv.fr?subject=IRVE)
* ouvrir un ticket sur le [dépôt Github du schéma](https://github.com/etalab/schema-irve/issues/new)
## Carte d'identité du schéma
- nom : irve
- page d'accueil : https://github.com/etalab/schema-irve
- URL du schéma : https://github.com/etalab/schema-irve/raw/v1.0.2/schema.json
- version : 1.0.2
- date de création : 29/06/2018
- date de dernière modification : 28/06/2019
- concerne le pays : FR
- valeurs manquantes représentées par : `[""]`
- contributeurs :
- Alexandre Bulté, Etalab (auteur) [validation@data.gouv.fr](validation@data.gouv.fr)
- Charles Nepote (contributeur) [charles.nepote@fing.org](charles.nepote@fing.org)
- Pierre Dittgen, Jailbreak (contributeur) [pierre.dittgen@jailbreak.paris](pierre.dittgen@jailbreak.paris)
- Johan Richer, Jailbreak (contributeur) [johan.richer@jailbreak.paris](johan.richer@jailbreak.paris)
- ressources :
- Exemple de fichier IRVE valide ([lien](https://github.com/etalab/schema-irve/raw/v1.0.2/exemple-valide.csv))
- sources :
- Décret n° 2017-26 du 12 janvier 2017 relatif aux infrastructures de recharge pour véhicules électriques et portant diverses mesures de transposition de la directive 2014/94/UE du Parlement européen et du Conseil du 22 octobre 2014 sur le déploiement d’une infrastructure pour carburants alternatifs ([lien](https://www.legifrance.gouv.fr/jo_pdf.do?id=JORFTEXT000033860620))
- Arrêté du 12 janvier 2017 relatif aux données concernant la localisation géographique et les caractéristiques techniques des stations et des points de recharge pour véhicules électriques ([lien](https://www.legifrance.gouv.fr/jo_pdf.do?id=JORFTEXT000033860733))
- Arrêté du 12 janvier 2017 précisant les dispositions relatives aux identifiants des unités d’exploitation pour la recharge des véhicules électriques ([lien](https://www.legifrance.gouv.fr/jo_pdf.do?id=JORFTEXT000033860743))
- Définition et structure des identifiants attribués par l&#x27;Association Française pour l&#x27;Itinérance de la Recharge Electrique des Véhicules (AFIREV) ([lien](http://www.afirev.fr/fr/informations-generales/))
## Modèle de données
Ce modèle de données repose sur les 17 champs suivants correspondant aux colonnes du fichier tabulaire.
### `n_amenageur`
- titre :
- description : Le nom de l'aménageur, c'est à dire de l'entité publique ou privée propriétaire des infrastructures
- type : chaîne de caractères
- exemple : `Société X, Entité Y`
- valeur obligatoire
### `n_operateur`
- titre :
- description : Le nom de l'opérateur qui opère le réseau d'infrastructure (l'aménageur ou un tiers auquel a été confié la responsabilité par délégation)
- type : chaîne de caractères
- exemple : `Société X, Entité Y`
- valeur obligatoire
### `n_enseigne`
- titre :
- description : Le nom commercial du réseau
- type : chaîne de caractères
- exemple : `Réseau de recharge ABC`
- valeur obligatoire
### `id_station`
- titre :
- description : L'identifiant de la station délivré selon les modalités définies à l'article 10 du décret n° 2017-26 du 12 janvier 2017
- type : chaîne de caractères
- exemple : `FR*A68*P68021*A`
- valeur obligatoire
### `n_station`
- titre :
- description : le nom de la station
- type : chaîne de caractères
- exemple : `Picpus, Belleville, Villiers`
- valeur obligatoire
### `ad_station`
- titre :
- description : L'adresse complète de la station : [numéro] [rue], [code postal] [ville]
- type : chaîne de caractères
- exemple : `1 avenue de la Paix, 75001 Paris`
- valeur obligatoire
### `code_insee`
- titre :
- description : Le code INSEE de la commune d'implantation
- type : chaîne de caractères
- exemple : `06088, 2B002 (pour une commune corse)`
- valeur obligatoire
- motif : `^([013-9]\d|2[AB1-9])\d{3}$`
### `Xlongitude`
- titre :
- description : La longitude en degrés décimaux (point comme séparateur décimal) de la localisation de la station exprimée dans le système de coordonnées WGS84
- type : nombre réel
- exemple : `7.48710500`
- valeur obligatoire
### `Ylatitude`
- titre :
- description : La latitude en degrés décimaux (point comme séparateur décimal) de la localisation de la station exprimée le système de coordonnées WGS84
- type : nombre réel
- exemple : `47.63495500`
- valeur obligatoire
### `nbre_pdc`
- titre :
- description : Le nombre de points de recharge sur la station
- type : nombre entier
- exemple : `1, 10`
- valeur obligatoire
### `id_pdc`
- titre :
- description : L'identifiant du point de recharge délivré selon les modalités définies à l'article 10 du décret n° 2017-26 du 12 janvier 2017
- type : chaîne de caractères
- exemple : `FR*A68*E68021*A*B1*D`
- valeur obligatoire
### `puiss_max`
- titre :
- description : La puissance maximale délivrée à chaque point de recharge, exprimée en kW, en fonction du contrat d'abonnement de puissance de la station et du type de connecteur
- type : nombre réel
- exemple : `22.00`
- valeur obligatoire
### `type_prise`
- titre :
- description : Les types de prises ou de connecteurs disponibles sur chaque point de charge
- type : chaîne de caractères
- exemple : `E/F, T2`
- valeur obligatoire
### `acces_recharge`
- titre :
- description : Modalités d'accès à la recharge
- type : chaîne de caractères
- exemple : `Payant, Gratuit, Sur abonnement`
- valeur obligatoire
### `accessibilité`
- titre :
- description : Amplitude d'ouverture de la station
- type : chaîne de caractères
- exemple : `24/24 7/7 jours`
- valeur obligatoire
### `observations`
- titre :
- description : Champ destiné à préciser les modalités d'accès à la recharge, l'accessibilité, le tarif, les horaires d'ouverture, …
- type : chaîne de caractères
- exemple : `Recharge uniquement disponible pendant les horaires d'ouverture du Centre Commercial XY`
- valeur obligatoire
### `date_maj`
- titre :
- description : Date de mise à jour des données
- type : date (%Y/%m/%d)
- exemple : `2018/08/08, 2015/12/30`
- valeur obligatoire
This diff is collapsed.
This diff is collapsed.
......@@ -2,7 +2,7 @@
"""
Generate assets from a catalog of schemas.
Generate files (schemas, XLSX templates and SUMMARY.md) from a catalog of schemas.
"""
......@@ -17,6 +17,7 @@ from urllib.parse import urljoin
import requests
from jinja2 import Template
from opendataschema import GitSchemaReference, SchemaCatalog, by_commit_date
log = logging.getLogger(__name__)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment