Skip to content

Commit

Permalink
fix: validate markdown on CI (#1162)
Browse files Browse the repository at this point in the history
  • Loading branch information
fpasquet authored Oct 29, 2024
1 parent b09ddb5 commit 2a2e306
Show file tree
Hide file tree
Showing 17 changed files with 47 additions and 80 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/checks-and-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:

- name: Validate markdown authors and posts
id: validate_markdown
run: npm run validate-markdown --ci
run: CI=true npm run validate-markdown

- name: Add a comment to the PR after failed markdown validation
uses: marocchino/sticky-pull-request-comment@v2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ Let's take a look on what we just coded.

Here is the Swift code for the most excited ones

##### Swift
#### Swift

```Swift
protocol RequesterDelegateSwift {
Expand Down
1 change: 1 addition & 0 deletions _articles/fr/2024-01-10-typage-generique-en-php.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ slug: typage-generique-php
title: "Typage générique en PHP : définition, conseils et exemples"
excerpt: "Découvrez comment réaliser du typage générique en PHP : introduction et définition du concept, conseils et explications pas-à-pas de cas pratique."
cover:
alt: Typage générique en PHP
path: /imgs/articles/2024-01-10-typage-generique-en-php/cover.jpg
categories:
- php
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ title: 'Symfony ExpressionLanguage : Comment utiliser ce composant ?'
excerpt: >-
Le composant Symfony ExpressionLanguage : qu'est-ce que c'est ? Quand et comment l'utiliser ? Comment créer des expressions lors de cas plus complexes ?
cover:
alt: Symfony ExpressionLanguage
path: /imgs/articles/2024-01-17-expressionlanguage-comment-utiliser-ce-composant-symfony/cover.jpg
categories:
- php
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ slug: environnement-travail-linux
title: 'Quelques conseils pour optimiser votre environnement de travail sous Linux'
excerpt: >-
Travailler efficacement sous Linux va bien au-delà des simples commandes du terminal. Dans cet article, découvrez quelques conseils pour optimiser votre environnement de travail et améliorer votre expérience utilisateur.
categories: []
cover:
alt: Optimiser votre environnement de travail sous Linux
path: /imgs/articles/2024-02-19-quelques-conseils-pour-optimiser-votre-environnement-de-travail-sous-linux/cover.jpg
position: top
authors:
Expand Down
1 change: 1 addition & 0 deletions _articles/fr/2024-04-03-retour-sur-la-flowcon-2024.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ title: 'Retour sur la Flowcon 2024'
excerpt: >-
Trois astronautes reviennent sur la Flowcon, la conférence sur le développement de logiciel en flux, qui a eu lieu les 6 et 7 Mars 2024
cover:
alt: Flowcon 2024
path: /imgs/articles/2024-04-03-retour-sur-la-flowcon-2024/cover.jpg
categories:
- agile
Expand Down
54 changes: 26 additions & 28 deletions _articles/fr/2024-05-20-crossplane-kubernetes.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ seo:
description: >-
Découvrez ce qu'est crossplane et apprenez grâce à notre mode d'emploi à le configurer et à l'utiliser étapes par étapes dans votre projet.
cover:
alt: Crossplane Kubernetes
path: /imgs/articles/2024-05-20-crossplane-kubernetes/cover.jpg
categories:
- architecture
Expand All @@ -31,7 +32,7 @@ Si on schématise grossièrement, Crossplane reprend le but initial de Terraform
Ce projet open-source lancé par la société Upbound a rejoint la Cloud Native Computing Foundation (CNCF) en 2020 et est aujourd'hui au niveau de maturité _incubating_ depuis septembre 2021. J'ai découvert ce projet lors de la KubeCon de Paris 2024 et il m'a semblé intéressant d'en présenter les principaux concepts pour bien cerner l'étendu de ses capacités.

## Platform engineering kézako ? 🤔
> En quelques mots, c'est une approche visant à améliorer l'expérience développeur par la mise en place d'une plateforme de service permettant de demander de manière abstraite des ressources d'infrastructure. La complexité est alors gérée par les administrateurs de la plateforme et invisible pour les utilisateurs.
> En quelques mots, c'est une approche visant à améliorer l'expérience développeur par la mise en place d'une plateforme de service permettant de demander de manière abstraite des ressources d'infrastructure. La complexité est alors gérée par les administrateurs de la plateforme et invisible pour les utilisateurs.
Appliqué à notre cas, cette plateforme sera alors notre cluster Kubernetes sur lequel nous pourrons demander de l'infrastructure abstraite (e.g. "Un environnement de développement sur AWS") que Crossplane se chargera de mettre en place.

Expand Down Expand Up @@ -147,9 +148,9 @@ spec:
url:
type: Static
static: http://host.docker.internal:4566
# Indique pour quels services on remplace l'endpoint par l'URL ci-dessus.
# Indique pour quels services on remplace l'endpoint par l'URL ci-dessus.
# Attention, si la liste est vide, aucun service ne verra son URL changer.
services: [s3, rds]
services: [s3, rds]
skip_credentials_validation: true
skip_metadata_api_check: true
skip_requesting_account_id: true
Expand All @@ -167,7 +168,7 @@ metadata:
name: my-rds-instance
spec:
deletionPolicy: Delete
providerConfigRef:
providerConfigRef:
name: provider-family-aws
forProvider:
engine: postgres
Expand Down Expand Up @@ -222,7 +223,7 @@ LAST SEEN TYPE REASON OBJECT MESSAGE
type: LastAsyncOperation
❯ aws --endpoint-url=http://localhost:4566 s3api list-buckets
❯ aws --endpoint-url=http://localhost:4566 s3api list-buckets
{
"Buckets": [
{
Expand Down Expand Up @@ -280,7 +281,7 @@ versioning:
mfaDelete: false
```

Sur le cloud, certaines ressources externes ont des attributs immuables. Par exemple, AWS ne permet pas de modifier le nom d'un bucket S3. Terraform triche un peu avec ça en autorisant la modification des champs immuables mais en proposant alors de recréer ces ressources (i.e. supprimer le bucket et le recréer avec le nouveau nom.) Crossplane, ne dispose pas de ce type de mécanisme et on ne pourra pas modifier les champs immuables. Pour faire l'équivalent, on devra supprimer et recréer nous-même l'objet en question. Le nom de la ressource externe est alors le même que celui de la ressource managée par défaut.
Sur le cloud, certaines ressources externes ont des attributs immuables. Par exemple, AWS ne permet pas de modifier le nom d'un bucket S3. Terraform triche un peu avec ça en autorisant la modification des champs immuables mais en proposant alors de recréer ces ressources (i.e. supprimer le bucket et le recréer avec le nouveau nom.) Crossplane, ne dispose pas de ce type de mécanisme et on ne pourra pas modifier les champs immuables. Pour faire l'équivalent, on devra supprimer et recréer nous-même l'objet en question. Le nom de la ressource externe est alors le même que celui de la ressource managée par défaut.

### Policies

Expand All @@ -297,8 +298,6 @@ Crossplane permet de configurer comment le provider se comporte quand une ressou

Les `managementPolicies` permettent de limiter les droits de Crossplane sur les ressources externes. On les spécifie dans le tableau `spec.managementPolicies` de nos ressources managées. Voici les différentes valeurs (cumulables) possibles :

</br>

| Policy | Fonctionnement |
|---------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| * | (Defaut) Crossplane a tous les droits sur la ressource externe. |
Expand All @@ -308,9 +307,8 @@ Les `managementPolicies` permettent de limiter les droits de Crossplane sur les
| Observe | Crossplane est autorisé à observer les ressources externes. Utile pour importer des ressources externes déjà existante sous forme de ressources managées. |
| Update | Crossplane est autorisé à appliquer des changements sur les ressources externes quand des changements sont appliqués sur les ressources managées. |

</br>

On récapitule différentes combinaisons intéressantes :
On récapitule différentes combinaisons intéressantes :

| Create | Delete | LateInitialize | Observe | Update | Description |
|:------: |:------: |:--------------: |:-------: |:------: |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
Expand All @@ -336,7 +334,7 @@ Nous savons désormais créer des ressources unitaires et paramétrer des droits

### Créer une première abstraction

Attention, là, ça commence à se gâter. Certains termes sont assez proches et on a vite fait de les confondre.
Attention, là, ça commence à se gâter. Certains termes sont assez proches et on a vite fait de les confondre.
Pour mettre en place une abstraction, nous allons devoir combiner différents concepts qu'on synthétise dans le schéma ci-dessous. Détaillons chaque élément, en commençant par les compositions.

![Logo Crossplane]({BASE_URL}/imgs/articles/2024-05-20-crossplane-kubernetes/schema_crossplane_end_users.svg)
Expand Down Expand Up @@ -367,7 +365,7 @@ spec:
- name: SubnetGroup
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: SubnetGroup
kind: SubnetGroup
spec:
forProvider:
region: eu-west-3
Expand Down Expand Up @@ -398,7 +396,7 @@ spec:
- name: IamRole
base:
apiVersion: iam.aws.upbound.io/v1beta1
kind: Role
kind: Role
spec:
forProvider:
assumeRolePolicy: |
Expand Down Expand Up @@ -427,7 +425,7 @@ Pour cela, nous allons créer un objet `CompositeResourceDefinition` similaire
```yaml
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
metadata:
name: xrds.custom.api.exemple.org
spec:
group: custom.api.exemple.org
Expand Down Expand Up @@ -466,7 +464,7 @@ apiVersion: custom.api.exemple.org/v1alpha1
kind: XRDS
metadata:
name: my-composite-database
annotations:
annotations:
crossplane.io/external-name: my-custom-name
spec:
type: large
Expand All @@ -479,7 +477,7 @@ Par définition, les ressources composites (et les ressources managées associé
```yaml
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
metadata:
name: xrds.custom.api.exemple.org
spec:
group: custom.api.exemple.org
Expand Down Expand Up @@ -575,7 +573,7 @@ spec:
- name: SubnetGroup
base:
apiVersion: rds.aws.upbound.io/v1beta1
kind: SubnetGroup
kind: SubnetGroup
metadata:
name: my-subnet-group
spec:
Expand Down Expand Up @@ -623,13 +621,13 @@ La liste ci-dessous ne concerne que les patches de ressources individuelles (res
| CombineFromEnvironment | Plusieurs champs issus de l'environnement d'une EnvironmentConfig | Un champ d'une ressource managée patchée. |
| CombineToEnvironment | Plusieurs champs d'une ressource managée patchée. | Un champ dans l'environnement d'une EnvironmentConfig |

N.B. : Les sources et destinations de ce tableau ne s'appliquent pas forcément pour les patches de ressource composite via les EnvironmentConfigs (qui seront détaillés dans la section appropriée)
N.B. : Les sources et destinations de ce tableau ne s'appliquent pas forcément pour les patches de ressource composite via les EnvironmentConfigs (qui seront détaillés dans la section appropriée)
</br>

#### Nommage dynamique de ressources externes

Les ressources managées issues de Claim/ressources composites héritent d'un nommage en `<nom_du_claim>-<id_aleatoire>`. On peut changer ce comportement en rajoutant l'annotation `crossplane.io/external-name` aux ressources de notre composition. Avec l'aide des patches, on va pouvoir faire du nommage dynamique si on le souhaite.
Les ressources managées issues de Claim/ressources composites héritent d'un nommage en `<nom_du_claim>-<id_aleatoire>`. On peut changer ce comportement en rajoutant l'annotation `crossplane.io/external-name` aux ressources de notre composition. Avec l'aide des patches, on va pouvoir faire du nommage dynamique si on le souhaite.

Reprenons notre premier exemple de composition. On va récupérer le type d'instance déclaré dans notre Claim/ressource composite et le passer à la ressource managée correspondante dans la composition. Aussi, nous injecterons le type d'instance dans le nom de cette ressource :

```yaml
Expand Down Expand Up @@ -702,8 +700,8 @@ spec:
patches:
# On référence un PatchSet
- type: PatchSet
patchSetName: my-patchset
# On défini un pattern pour le nom de l'instance RDS qui contient un préfixe statique suivi du type de l'instance.
patchSetName: my-patchset
# On défini un pattern pour le nom de l'instance RDS qui contient un préfixe statique suivi du type de l'instance.
# Le type d'instance et récupéré depuis le champ spec.type de notre Claim
- type: FromCompositeFieldPath
fromFieldPath: spec.type
Expand Down Expand Up @@ -736,7 +734,7 @@ kind: EnvironmentConfig
metadata:
name: stagging
data:
env:
env:
name: stag
rds:
instanceType: large
Expand Down Expand Up @@ -784,7 +782,7 @@ spec:
# etc.
```

Une composition peut référencer plusieurs objets `EnvironmentConfig`. Au cours de la création/d'une mise à jour de ressource composite, les différentes `EnvironmentConfig` seront alors fusionnées pendant la création du magasin de donnée. On pourra ensuite lire ces données et les manipuler à travers les patches. On pourra par exemple récupérer une valeur du magasin pour rajouter un préfixe au nom de notre ressource composite et ainsi modifier le pattern de toutes les ressources managées sous-jacente.
Une composition peut référencer plusieurs objets `EnvironmentConfig`. Au cours de la création/d'une mise à jour de ressource composite, les différentes `EnvironmentConfig` seront alors fusionnées pendant la création du magasin de donnée. On pourra ensuite lire ces données et les manipuler à travers les patches. On pourra par exemple récupérer une valeur du magasin pour rajouter un préfixe au nom de notre ressource composite et ainsi modifier le pattern de toutes les ressources managées sous-jacente.

```yaml
apiVersion: apiextensions.crossplane.io/v1
Expand All @@ -800,7 +798,7 @@ spec:
- type: Reference
ref:
name: stagging
# On récupère le nom de l'environnement dans l'objet `EnvironmentConfig` et on l'injecte dans le nom de notre ressource composite
# On récupère le nom de l'environnement dans l'objet `EnvironmentConfig` et on l'injecte dans le nom de notre ressource composite
patches:
- type: ToCompositeFieldPath
fromFieldPath: env.name
Expand All @@ -821,7 +819,7 @@ spec:
# etc.
```

Pour les patches déclarés dans `spec.environment.patches`, `ToCompositeFieldPath` copiera la donnée depuis le magasin vers la ressource composite et
Pour les patches déclarés dans `spec.environment.patches`, `ToCompositeFieldPath` copiera la donnée depuis le magasin vers la ressource composite et
`FromCompositeFieldPath` copiera la donnée depuis la ressource composite vers le magasin.

### Functions
Expand All @@ -837,7 +835,7 @@ spec:
package: xpkg.upbound.io/crossplane-contrib/function-patch-and-transform:v0.5.0
```
Les fonctions s'utilisent dans des compositions séquentielles (`mode: Pipeline`) dans lesquelles on référencera les fonctions dans les différentes _steps_. Quand la composition contient plusieurs steps, elles sont exécutées dans leur ordre d'apparition dans la composition. La sortie d'une step est passée en entrée de la step suivante.
Les fonctions s'utilisent dans des compositions séquentielles (`mode: Pipeline`) dans lesquelles on référencera les fonctions dans les différentes _steps_. Quand la composition contient plusieurs steps, elles sont exécutées dans leur ordre d'apparition dans la composition. La sortie d'une step est passée en entrée de la step suivante.

Reprenons notre exemple initial en utilisant la **fonction** patch au lieu des patches du module core.

Expand All @@ -855,7 +853,7 @@ spec:
- step: patch-and-transform
# On référence notre fonction ici
functionRef:
name: function-patch-and-transform
name: function-patch-and-transform
input:
apiVersion: pt.fn.crossplane.io/v1beta1
kind: Resources
Expand Down
1 change: 0 additions & 1 deletion _articles/fr/2024-08-22-css-anchor-positioning-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ cover:
path: /imgs/articles/2024-08-22-css-anchor-positioning-api/cover.jpg
keywords:
- css
- javascript
---

## L'anchor positioning API, qu'est-ce que c'est&nbsp;?
Expand Down
3 changes: 1 addition & 2 deletions _articles/fr/2024-10-08-paris-web-2024.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@ title: >-
Paris Web 2024 : retour d'expérience sur l'événement autour du web accessible et de qualité
excerpt: >-
La 19ème édition de Paris Web a eu lieu du 26 au 28 septembre 2024 ! Qu'est-ce que c'est ? Un événement composé de deux jours de conférences et une journée d'ateliers sur les thématiques de l'accessibilité et de la qualité du web.
categories: []
authors:
- seinhorn
- afauquet
cover:
alt: Paris Web 2024
path: /imgs/articles/2024-10-08-paris-web-2024/cover.jpg
keywords: []
---

La 19ème édition de Paris Web a eu lieu du 26 au 28 septembre 2024&nbsp;! Qu'est-ce que c'est&nbsp;? Un événement composé de deux jours de conférences et une journée d'ateliers sur les thématiques de l'accessibilité et de la qualité du web. Il s'adresse aux développeurs et développeuses, mais aussi aux designers, experts et expertes accessibilité et performance, chef et cheffe de projet... c'est pour tous les métiers du web. On ne pouvait pas manquer ça&nbsp;!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ slug: applications-mobiles-quels-enjeux
title: Développement d'une application mobile, quels éléments analyser avant de se lancer ?
excerpt: >-
Que vous souhaitiez lancer un nouveau produit mobile ou que vous souhaitiez proposer la version mobile d'une application web existante, voici quelques éléments à prendre en compte dans votre réflexion pour décider de sa plu-value business.
categories: []
cover:
alt: Astronaute qui consulte son téléphone sur la lune
path: /imgs/articles/2024-10-22-applications-mobiles-quels-enjeux/cover.jpg
Expand Down
Loading

0 comments on commit 2a2e306

Please sign in to comment.