Skip to content

Commit d2a1650

Browse files
authored
Merge pull request #498 from geotribu/feature/create-rdp-workflow
Fonctionnalité : automatiser la création d'une revue de presse en donnant juste la date
2 parents ce9ba44 + 8a1e223 commit d2a1650

File tree

5 files changed

+248
-10
lines changed

5 files changed

+248
-10
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Modèle de news ici : https://github.com/geotribu/website/blob/master/content/rd
3636

3737
Exemple de [tweet](https://twitter.com/geotribu/status/1364625815099613185) :
3838

39-
![tweet geordp](https://cdn.geotribu.fr/img/internal/contribution/geotribu_rdp_tweet_incitation.png "exemple de tweet geordp")
39+
![tweet geordp](https://cdn.geotribu.fr/img/internal/contribution/geotribu_rdp_tweet_incitation.png)
4040

4141
----
4242

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: "🗞 New GeoRDP"
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
date:
7+
type: string
8+
description: Date de la prochaine RDP au format YYYY-MM-DD
9+
required: true
10+
notify-slack:
11+
type: boolean
12+
default: true
13+
description: Notifier l'équipe sur Slack
14+
15+
env:
16+
LANG: "fr_FR.UTF-8"
17+
LC_ALL: "fr_FR.UTF-8"
18+
LC_TIME: "fr_FR.UTF-8"
19+
20+
jobs:
21+
create_rdp:
22+
runs-on: ubuntu-latest
23+
24+
steps:
25+
- name: Install French locale
26+
id: locale-fr
27+
shell: bash
28+
run: |
29+
sudo locale-gen fr_FR.UTF-8
30+
sudo update-locale LANG=fr_FR.UTF-8
31+
echo "::set-output name=date-fr-long::$(date -d ${{ github.event.inputs.date }} '+%-d %B %Y')"
32+
33+
- name: Get source code
34+
uses: actions/checkout@v2
35+
36+
- name: Create a new GeoRDP
37+
shell: bash
38+
run: bash ./scripts/new_rdp.sh ${{ github.event.inputs.date }}
39+
40+
- name: New branch
41+
run: |
42+
git config user.name ${{ github.actor }}
43+
git config user.email '${{ github.actor }}@users.noreply.github.com'
44+
git checkout -b rdp/${{ github.event.inputs.date }}
45+
git status
46+
47+
- name: Commit new GeoRDP
48+
run: |
49+
git add content/rdp/
50+
git commit -am "Crée la GeoRDP ${{ github.event.inputs.date }}"
51+
52+
- name: Push to remote
53+
run: git push origin rdp/${{ github.event.inputs.date }}
54+
55+
- name: Create Pull Request
56+
id: cpr
57+
uses: repo-sync/pull-request@v2
58+
with:
59+
github_token: ${{ secrets.GITHUB_TOKEN }}
60+
source_branch: rdp/${{ github.event.inputs.date }}
61+
destination_branch: "master"
62+
pr_allow_empty: false
63+
pr_title: "🗞 GeoRDP du ${{ steps.locale-fr.outputs.date-fr-long }}"
64+
pr_template: .github/PULL_REQUEST_TEMPLATE.md
65+
66+
- name: Notification Slack
67+
id: slack
68+
uses: slackapi/[email protected]
69+
if: "${{ github.event.inputs.notify-slack == 'true' }}"
70+
with:
71+
payload: '{"blocks":[{"type":"section","text":{"type":"mrkdwn","text":":newspaper: La GeoRDP du ${{ steps.locale-fr.outputs.date-fr-long }} a été créée et attend vos contributions :writing_hand: !"}},{"type":"section","fields":[{"type":"mrkdwn","text":"Créée par *${{ github.actor }}* via GitHub Action."}]},{"type":"actions","elements":[{"type":"button","text":{"type":"plain_text","emoji":true,"text":":squid: Voir la PR (GitHub)"},"url":"${{ steps.cpr.outputs.pr_url }}"},{"type":"button","text":{"type":"plain_text","emoji":true,"text":":eye: Voir la preview (Netlify)"},"style":"primary","url":"https://preview-pullrequest-${{steps.cpr.outputs.pr_number}}--geotribu-preprod.netlify.app/"}]}]}'
72+
env:
73+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
74+
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK

content/contribuer/rdp/create_rdp.md

Lines changed: 87 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
title: "Créer une revue de presse"
33
authors:
44
- Geotribu
5+
- Julien MOURA
56
categories:
67
- contribution
78
date: "2021-09-30 10:20"
@@ -10,6 +11,9 @@ image: "https://cdn.geotribu.fr/img/articles-blog-rdp/collaboration_world.png"
1011
license: default
1112
tags:
1213
- contribuer
14+
- GitHub
15+
- GitHub Actions
16+
- GitHub Workflow
1317
- guide
1418
- GeoRDP
1519
- workflow
@@ -19,15 +23,90 @@ tags:
1923

2024
![icône news générique](https://cdn.geotribu.fr/img/internal/icons-rdp-news/news.png "icône news générique"){: .img-rdp-news-thumb }
2125

22-
La création d'une revue de presse passe par la création d'une branche dédiée dans le dépôt du site et du fichier Markdown qui contiendra les news dans une structure type. Il est possible de créer en utilisant Git en ligne de commande ou via l'interface web de GitHub.
26+
Concrètement, une revue de presse est un fichier markdown, nommé d'une certaine façon, stocké dans le dossier `content/rdp/` et organisé en sections dans lesquelles les contributeur/ices viennent ensuite insérer leurs "news". L processus de contribution est bâti autour de la logique de Git.
2327

24-
TL;DR : voici une vidéo retraçant les étapes de création d'une revue de presse via l'interface web de GitHub :
28+
Avant d'ouvrir la revue de presse aux contributions, il est donc nécessaire de créer :
29+
30+
1. une branche dédiée dans le dépôt du site
31+
2. le fichier Markdown avec la structure type
32+
3. la Pull Request permettant de visualiser les différentes contributions puis de publier (fusionner) la revue de presse une fois finalisée
33+
34+
Il est possible de créer en utilisant Git en ligne de commande ou via l'interface web de GitHub.
35+
36+
!!! info "Zone réservée"
37+
La création d'une nouvelle revue de presse nécessite de disposer des droits d'écriture sur le dépôt GitHub : [{{ config.repo_name }}]({{ config.repo_url }}).
38+
39+
## Automatiquement via GitHub Workflow
40+
41+
![icône GitHub Actions](https://cdn.geotribu.fr/img/logos-icones/divers/github_actions.png "GitHub Actions"){: .img-rdp-news-thumb }
42+
43+
L'outillage et la logique de publication de Geotribu sont largement basés sur Git et la plateforme GitHub. Nous utilisons notamment les principes de l'intégration et du déploiement continus ([CI/CD pour les intimes](https://fr.wikipedia.org/wiki/CI/CD)).
44+
45+
La méthode la plus simple pour créer une nouvelle revue de presse est donc d'utiliser le *workflow* ":newspaper2: New GeoRDP" disponible sur GitHub :
46+
47+
1. Se rendre sur l'onglet `Actions` et sélectionner le *workflow* ":newspaper2: New GeoRDP" ou [cliquer ici]({{ config.repo_url }}actions/workflows/manual_new_rdp.yml)
48+
2. Cliquer sur `Run workflow`
49+
3. Entrer les infos demandées :
50+
- branche : `master`
51+
- date de la revue de presse : doit être au format `YYYY-MM-DD` et pointer sur un vendredi
52+
- choisir d'envoyer automatiquement une notification sur Slack
53+
4. Cliquer sur le bouton vert `Run workflow`.
54+
55+
Après une trentaine de secondes, on obtient :
56+
57+
- une branche dédiée pour la revue de presse
58+
- un fichier Markdown avec la structure type et la date de publication
59+
- une Pull Request basée sur le modèle
60+
- une notification Slack pour informer l'équipe
61+
62+
<!-- markdownlint-disable MD046 -->
63+
!!! abstract "Prérequis"
64+
La bonne exécution du workflow dépend de ces éléments :
65+
66+
- la revue de presse ou sa branche n'ont pas déjà été créées par ailleurs
67+
- le modèle de revue de presse est à jour et bien présent : `content/rdp/templates/template_rdp.md`
68+
- le modèle de Pull Request est bien présent : `.github/PULL_REQUEST_TEMPLATE.md`
69+
- l'URL du webhook de Slack (`SLACK_WEBHOOK_URL`) est bien configurée dans [les secrets du dépôt]({{ config.repo_url }}settings/secrets/actions) (cliquer [ici pour administrer le webhook Slack](https://api.slack.com/apps/A020C9Q93BK/incoming-webhooks/))
70+
<!-- markdownlint-enable MD046 -->
71+
72+
### Utiliser localement le script intégré localement
73+
74+
Si vous disposez d'un terminal Bash et disposez du dépôt cloné, il est possible d'utiliser le script intégré :
75+
76+
```bash
77+
# stocker la date de la RDP au format YYYY-MM-DD
78+
DATE_RDP=2022-01-07
79+
80+
# exécuter le script
81+
scripts/new_rdp.sh $DATE_RDP
82+
83+
# pousser vers le dépôt distant
84+
git pull
85+
git checkout -b rdp/$DATE_RDP
86+
git add content/rdp/
87+
git commit -am "Crée la GeoRDP $DATE_RDP"
88+
git push origin rdp/$DATE_RDP
89+
```
90+
91+
Ne pas oublier ensuite de :
92+
93+
1. se rendre sur [GitHub pour créer la Pull Request]({{ config.repo_url }}pulls)
94+
2. sur [le canal dédié aux revues de presse sur Slack](https://geotribu.slack.com/archives/C010DD7FMEX) pour notifier l'équipe
95+
96+
## Manuellement via l'interface web de GitHub
97+
98+
Il est également possible d'utiliser l'ancienne procédure manuelle.
99+
Voici une vidéo retraçant les étapes de création d'une revue de presse via l'interface web de GitHub :
25100

26101
<iframe width="100%" height="400" src="https://www.youtube.com/embed/dVpOdGYAtIk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
27102

28103
----
29104

30-
## Créer la branche de la revue de presse
105+
## Processus détaillé
106+
107+
Cette partie explique chaque étape du processus de création d'une revue de presse pour comprendre ce que font les automatisations présentées au-dessus (script, GitHub Actions...).
108+
109+
### 1. Créer la branche de la revue de presse
31110

32111
![logo Git](https://cdn.geotribu.fr/img/logos-icones/divers/git.png "logo Git"){: .img-rdp-news-thumb }
33112

@@ -41,7 +120,7 @@ Il est important de respecter la convention de nommage `rdp/YYYY-MM-DD` où :
41120

42121
Exemple si la GeoRDP devait être publiée le 17 septembre 2021 : `rdp/2021-09-17`.
43122

44-
### :fontawesome-brands-github: GitHub
123+
#### :fontawesome-brands-github: GitHub
45124

46125
Sur l'interface web du dépôt :
47126

@@ -51,7 +130,7 @@ Sur l'interface web du dépôt :
51130

52131
![Github - New branch](https://cdn.geotribu.fr/img/internal/contribution/github_branch_rdp_new.png "GitHub - Création d'une branche"){: .img-center loading=lazy }
53132

54-
### :fontawesome-solid-terminal: Ligne de commande
133+
#### :fontawesome-solid-terminal: Ligne de commande
55134

56135
Si vous disposez du dépôt localement et que vous préférez utiliser la ligne de commande de [Git], voici les étapes à suivre :
57136

@@ -89,7 +168,7 @@ Si vous disposez du dépôt localement et que vous préférez utiliser la ligne
89168

90169
----
91170

92-
## Créer le fichier de la revue de presse
171+
### 2. Créer le fichier de la revue de presse
93172

94173
![icône globe tricot](https://cdn.geotribu.fr/img/internal/icons-rdp-news/matiere.png "icône globe tricot"){: .img-rdp-news-thumb }
95174

@@ -101,7 +180,7 @@ Afin d'accueillir les news, il s'agit de créer un fichier en respectant l'organ
101180

102181
Exemple si la GeoRDP devait être publiée le 17 septembre 2021 : `content/rdp/2021/rdp_2021-09-17.md`.
103182

104-
### Structure type et modèle
183+
#### Structure type et modèle
105184

106185
Les revues de presse sont structurées de la même façon d'une édition à l'autre, facilitant leur consultation et les traitements automatiques. Le plus simple est donc de copier/coller la structure type à partir du modèle maintenu à jour :
107186

@@ -143,7 +222,7 @@ tags:
143222
{: align=middle }
144223
```
145224
146-
### Pousser le fichier sur GitHub
225+
### 3. Pousser le fichier sur GitHub
147226
148227
Enfin, il faut pousser le fichier sur la branche créée sur GitHub.
149228

content/contribuer/rdp/workflow.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ tags:
2222
3. Les contributions sont ouvertes :
2323
- soit via des commits directement sur la branche de la revue de presse
2424
- soit via des Pull Requests pointant sur la branche de la RDP
25-
4. La validation de la RDP se fait par une équipe de validation
25+
4. La validation de la RDP se fait par l'équipe de Geotribu
2626
5. Une fois validée et relue, la branche est fusionnée et la RDP publiée puis diffusée.
2727

2828
<!-- Hyperlinks reference -->

scripts/new_rdp.sh

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
if [ "$#" -ne 1 ]; then
6+
echo "Usage: $0 <date>"
7+
echo "Example: $0 2022-01-07" >&2
8+
exit 1
9+
fi
10+
11+
# FUNCTIONS ----------------------------
12+
fn_datecheck() {
13+
local format="$1" d="$2"
14+
[[ "$(date "+$format" -d "$d" 2>/dev/null)" == "$d" ]]
15+
}
16+
17+
# GLOBALS ------------------------------
18+
RDP_DATE=$1
19+
RDP_FOLDER_PATH="content/rdp"
20+
RDP_TEMPLATE_PATH="content/rdp/templates/template_rdp.md"
21+
22+
# MAIN ---------------------------------
23+
24+
# check if passed date is valid
25+
if [[ "$RDP_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
26+
echo -e "\e[32mFormat de date valide - check 1/2."
27+
else
28+
echo -e "\e[31mLa date doit être du type : 'AAAA-MM-JJ' (exemple : 2022-01-07)"
29+
exit 1
30+
fi
31+
32+
if fn_datecheck "%F" "$RDP_DATE"; then
33+
echo -e "\e[32mFormat de date valide - check 2/2."
34+
else
35+
echo -e "\e[31mDate ou format de date invalide. La date doit être du type : 'AAAA-MM-JJ' (exemple : 2022-01-07)"
36+
exit 1
37+
fi
38+
39+
date_formatted=$(date -d "${RDP_DATE}" '+%F')
40+
41+
# check if date is in the future
42+
if [[ "$date_formatted" > "$(date '+%F')" ]]; then
43+
echo -e "\e[32mLa date est bien dans le futur."
44+
else
45+
echo -e "\e[31mLa date de la prochaine revue de presse doit être dans le futur."
46+
exit 1
47+
fi
48+
49+
# check if date is a friday
50+
if [[ "$(date -d "${date_formatted}" '+%u')" == "5" ]]; then
51+
echo -e "\e[32mLa date est bien un vendredi."
52+
else
53+
echo -e "\e[31mLa date doit être un vendredi."
54+
exit 1
55+
fi
56+
57+
echo "Date de la prochaine revue de presse : $date_formatted"
58+
59+
# check if RDP branch already exists on remote
60+
existed_in_remote=$(git ls-remote --heads origin rdp/"$date_formatted")
61+
62+
if [[ -z ${existed_in_remote} ]]; then
63+
echo -e "\e[32mLa branche de la prochaine RDP n'existe pas encore et sera créée."
64+
else
65+
echo -e "\e[31mLa branche existe déjà sur le dépôt principal (GitHub).\e[33m\nPour ne pas risquer d'écraser, on bascule sur la branche distante existante et on s'arrête là."
66+
git checkout --progress --track origin/rdp/"$date_formatted"
67+
exit 1
68+
fi
69+
70+
# determine final path
71+
RDP_PATH="$RDP_FOLDER_PATH/$(date -d "${date_formatted}" '+%Y')/rdp_$date_formatted.md"
72+
echo -e "\e[34mLe fichier de la prochaine revue de presse sera $RDP_PATH"
73+
74+
# make sure parent folder exists
75+
[ -d "$RDP_PATH" ] || mkdir -p -v "$(dirname "$RDP_PATH")"
76+
77+
# copy template
78+
cp -v $RDP_TEMPLATE_PATH "$RDP_PATH"
79+
80+
# replace default values
81+
sed -i "s|^title:.*|title: Revue de presse du $(date -d "${date_formatted}" '+%-d %B %Y')|" "$RDP_PATH"
82+
sed -i "s|^date:.*|date: $(date -d "${date_formatted}" '+%Y-%m-%d') 14:20|" "$RDP_PATH"
83+
sed -i "s|^description:.*|description: \"\"|" "$RDP_PATH"
84+
sed -i "s|^# Revue de presse du.*|# Revue de presse du $(date -d "${date_formatted}" '+%-d %B %Y')|" "$RDP_PATH"
85+
echo -e "\e[32mValeurs par défaut remplacées."

0 commit comments

Comments
 (0)