Migrate to relearn theme
This commit is contained in:
parent
883ac78d78
commit
c8dcfb5f89
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -1,3 +1,3 @@
|
|||||||
[submodule "themes/hugo-theme-learn"]
|
[submodule "themes/hugo-theme-relearn"]
|
||||||
path = themes/hugo-theme-learn
|
path = themes/hugo-theme-relearn
|
||||||
url = https://github.com/matcornic/hugo-theme-learn.git
|
url = https://github.com/McShelby/hugo-theme-relearn.git
|
||||||
|
@ -3,20 +3,22 @@ languageCode = "fr-fr"
|
|||||||
defaultContentLanguage = "fr"
|
defaultContentLanguage = "fr"
|
||||||
|
|
||||||
title = "Challenge FIC"
|
title = "Challenge FIC"
|
||||||
theme = "hugo-theme-learn"
|
theme = "hugo-theme-relearn"
|
||||||
metaDataFormat = "yaml"
|
metaDataFormat = "yaml"
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
editURL = "https://gitlab.cri.epita.fr/ing/majeures/srs/fic/help/-/blob/master/content/"
|
editURL = "https://gitlab.cri.epita.fr/ing/majeures/srs/fic/help/-/blob/master/content/"
|
||||||
description = "Préparation du challenge forensic EC2"
|
description = "Préparation du challenge forensic EC2"
|
||||||
themeVariant = "blue"
|
themeVariant = "blue"
|
||||||
author = "SRS 2024"
|
|
||||||
showVisitedLinks = true
|
showVisitedLinks = true
|
||||||
disableBreadcrumb = false
|
disableBreadcrumb = false
|
||||||
disableNextPrev = true
|
disableNextPrev = true
|
||||||
|
|
||||||
|
[params.author]
|
||||||
|
name = "SRS"
|
||||||
|
|
||||||
[outputs]
|
[outputs]
|
||||||
home = [ "HTML", "RSS", "JSON"]
|
home = ['html', 'rss', 'search']
|
||||||
|
|
||||||
[[menu.shortcuts]]
|
[[menu.shortcuts]]
|
||||||
name = "<i class='fas fa-envelope'></i> Contact"
|
name = "<i class='fas fa-envelope'></i> Contact"
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
---
|
---
|
||||||
date: 2019-04-04T15:59:52+02:00
|
archetype: home
|
||||||
title: Préparation du challenge forensic
|
title: Préparation du challenge forensic
|
||||||
chapter: true
|
date: 2019-04-04T15:59:52+02:00
|
||||||
---
|
---
|
||||||
|
|
||||||
# Préparation du challenge forensic
|
|
||||||
|
|
||||||
![Le challenge au FIC](home.jpg)
|
![Le challenge au FIC](home.jpg)
|
||||||
|
@ -71,19 +71,19 @@ id = 2
|
|||||||
|
|
||||||
## Les flags
|
## Les flags
|
||||||
|
|
||||||
Retrouvez les différents flags supportés dans [la section dédiée de la documentation]({{< relref "/responses" >}}).
|
Retrouvez les différents flags supportés dans [la section dédiée de la documentation]({{% relref "/responses" %}}).
|
||||||
|
|
||||||
Voici un aperçu des propriétés disponibles :
|
Voici un aperçu des propriétés disponibles :
|
||||||
|
|
||||||
- `[[flag]]` : chaîne de validation pour résoudre l'étape :
|
- `[[flag]]` : chaîne de validation pour résoudre l'étape :
|
||||||
* `type = "key"` : (facultatif, par défaut "key") type de flag :
|
* `type = "key"` : (facultatif, par défaut "key") type de flag :
|
||||||
+ `key` : [drapeau classique]({{< relref "/responses/simple.md" >}}),
|
+ `key` : [drapeau classique]({{% relref "/responses/simple.md" %}}),
|
||||||
+ `number` : [drapeau numérique]({{< relref "/responses/number.md" >}}),
|
+ `number` : [drapeau numérique]({{% relref "/responses/number.md" %}}),
|
||||||
+ `vector` : [liste de drapeaux]({{< relref "/responses/vector.md" >}}),
|
+ `vector` : [liste de drapeaux]({{% relref "/responses/vector.md" %}}),
|
||||||
+ `text` : [contenu sur plusieurs lignes]({{< relref "/responses/multiline.md" >}}),
|
+ `text` : [contenu sur plusieurs lignes]({{% relref "/responses/multiline.md" %}}),
|
||||||
+ `mcq` : [question à choix multiple]({{< relref "/responses/mcq.md" >}}) (cases à cocher) avec ou sans [justification]({{< relref "/responses/mcq_justified.md" >}}),
|
+ `mcq` : [question à choix multiple]({{% relref "/responses/mcq.md" %}}) (cases à cocher) avec ou sans [justification]({{% relref "/responses/mcq_justified.md" %}}),
|
||||||
+ `ucq` : [liste de choix]({{< relref "/responses/ucq.md" >}}),
|
+ `ucq` : [liste de choix]({{% relref "/responses/ucq.md" %}}),
|
||||||
+ `label` : [texte informatif]({{< relref "/responses/label.md" >}}) qui ne donne pas lieu à validation ;
|
+ `label` : [texte informatif]({{% relref "/responses/label.md" %}}) qui ne donne pas lieu à validation ;
|
||||||
* `id = 42` : (facultatif) identifiant du flag au sein de l'étape, pour définir des dépendances ;
|
* `id = 42` : (facultatif) identifiant du flag au sein de l'étape, pour définir des dépendances ;
|
||||||
* `label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
* `label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
||||||
* `raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments (à moins de définir l'attribut `showlines`) ;
|
* `raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments (à moins de définir l'attribut `showlines`) ;
|
||||||
@ -101,7 +101,7 @@ Voici un aperçu des propriétés disponibles :
|
|||||||
* `[[flag.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix (pour les `mcq` et `ucq`) :
|
* `[[flag.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix (pour les `mcq` et `ucq`) :
|
||||||
+ `label = "Intitulé de la réponse"` (facultatif, par défaut `raw`),
|
+ `label = "Intitulé de la réponse"` (facultatif, par défaut `raw`),
|
||||||
+ `value = true` (facultatif, par défaut `false`, sauf si `raw` est précisé) : valeur attendue pour ce choix,
|
+ `value = true` (facultatif, par défaut `false`, sauf si `raw` est précisé) : valeur attendue pour ce choix,
|
||||||
+ `raw = "Justification"` (nécessaire pour un [QCM justifié]({{< relref "/responses/mcq_justified.md" >}})) : utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et non justifiées),
|
+ `raw = "Justification"` (nécessaire pour un [QCM justifié]({{% relref "/responses/mcq_justified.md" %}})) : utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et non justifiées),
|
||||||
+ `help = "Flag correspondant"` : (facultatif) indication affichée dans le champ de texte des QCM justifiés,
|
+ `help = "Flag correspondant"` : (facultatif) indication affichée dans le champ de texte des QCM justifiés,
|
||||||
+ ... toutes les autres propriétés applicables à un flag simple peuvent être utilisées : `ordered`, `capture_regexp`, `casesensitive`, ... ;
|
+ ... toutes les autres propriétés applicables à un flag simple peuvent être utilisées : `ordered`, `capture_regexp`, `casesensitive`, ... ;
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ Les étapes peuvent avoir des indices, sous forme de fichier à télécharger (a
|
|||||||
|
|
||||||
## Les fichiers
|
## Les fichiers
|
||||||
|
|
||||||
Tous les fichiers sont importés par défaut, voir [la page concernée]({{< relref "/files/files.md" >}}).
|
Tous les fichiers sont importés par défaut, voir [la page concernée]({{% relref "/files/files.md" %}}).
|
||||||
Cependant il peut être nécessaire de préciser certains attributs. Cela se fait alors avec :
|
Cependant il peut être nécessaire de préciser certains attributs. Cela se fait alors avec :
|
||||||
|
|
||||||
- `[[file]]` : paramètres pour un indice :
|
- `[[file]]` : paramètres pour un indice :
|
||||||
|
@ -114,7 +114,7 @@ Il est possible de faire en sorte qu'un fichier ne soit débloqué qu'après la
|
|||||||
|
|
||||||
Si votre défi dépend de ressources en ligne, qui peuvent ne pas être accessibles le jour du challenge, ou qui ne seront plus accessibles une fois la compétition passée, vous devez inclure une archive avec ces ressources. Il peut s'agir de captures d'écran, d'une version aspirée du site, ...
|
Si votre défi dépend de ressources en ligne, qui peuvent ne pas être accessibles le jour du challenge, ou qui ne seront plus accessibles une fois la compétition passée, vous devez inclure une archive avec ces ressources. Il peut s'agir de captures d'écran, d'une version aspirée du site, ...
|
||||||
|
|
||||||
Il faudra alors faire figurer dans [le `challenge.txt`]({{< relref "challenge.md" >}}#les-fichiers) une référence au fichier, avec un attribut `hidden` :
|
Il faudra alors faire figurer dans [le `challenge.txt`]({{% relref "challenge.md" %}}#les-fichiers) une référence au fichier, avec un attribut `hidden` :
|
||||||
|
|
||||||
``` toml
|
``` toml
|
||||||
[[file]]
|
[[file]]
|
||||||
@ -146,7 +146,7 @@ Il est également nécessaire d'ajouter une entrée dans le fichier `DIGESTS.txt
|
|||||||
|
|
||||||
## D'autres attributs ?
|
## D'autres attributs ?
|
||||||
|
|
||||||
Les fichiers peuvent posséder des attributs spécifiques dans [le `challenge.txt`]({{< relref "challenge.md" >}}#les-fichiers).
|
Les fichiers peuvent posséder des attributs spécifiques dans [le `challenge.txt`]({{% relref "challenge.md" %}}#les-fichiers).
|
||||||
|
|
||||||
## Rendu
|
## Rendu
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ weight: 25
|
|||||||
Ce fichier doit contenir la vidéo permettant la résolution du défi,
|
Ce fichier doit contenir la vidéo permettant la résolution du défi,
|
||||||
étape par étape, chaque partie devant être accompagnée d’explications.
|
étape par étape, chaque partie devant être accompagnée d’explications.
|
||||||
Si vous pensez qu'un article est plus approprié, vous pouvez remplacer
|
Si vous pensez qu'un article est plus approprié, vous pouvez remplacer
|
||||||
ce fichier par [`resolution.md`]({{<relref "write-up">}})
|
ce fichier par [`resolution.md`]({{% relref "write-up" %}})
|
||||||
|
|
||||||
Ce fichier doit contenir la vidéo de résolution, montée selon ces caractéristiques :
|
Ce fichier doit contenir la vidéo de résolution, montée selon ces caractéristiques :
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ weight: 24
|
|||||||
|
|
||||||
Ce fichier doit contenir les explications détaillées permettant la résolution
|
Ce fichier doit contenir les explications détaillées permettant la résolution
|
||||||
de l'étape. Si vous pensez qu'une vidéo est plus appropriée, vous pouvez remplacer
|
de l'étape. Si vous pensez qu'une vidéo est plus appropriée, vous pouvez remplacer
|
||||||
ce fichier par [`resolution.mp4`]({{<relref "resolution">}})
|
ce fichier par [`resolution.mp4`]({{% relref "resolution" %}})
|
||||||
|
|
||||||
Votre article doit respecter les caractéristiques suivantes :
|
Votre article doit respecter les caractéristiques suivantes :
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ L'équipe serveur se compose généralement de 3 à 4 étudiants volontaires.
|
|||||||
le mettre à jour ;
|
le mettre à jour ;
|
||||||
- maintenir et contribuer au projet
|
- maintenir et contribuer au projet
|
||||||
[`fic-server`](https://gitlab.cri.epita.fr/ing/majeures/srs/fic/server/) ;
|
[`fic-server`](https://gitlab.cri.epita.fr/ing/majeures/srs/fic/server/) ;
|
||||||
- s'entraîner sur l'infrastructure durant les [FIC Blancs]({{< relref "deroulement.md" >}}).
|
- s'entraîner sur l'infrastructure durant les [FIC Blancs]({{% relref "deroulement.md" %}}).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ Enfin, des *FIC Blancs* sont organisés aussi régulièrement que possible pour
|
|||||||
|
|
||||||
À cette occasion, chaque groupe de 6 passera devant un jury aléatoire de 2 encadrants qui seront là uniquement pour juger votre dernière réalisation et valider le lancement de la suivante.
|
À cette occasion, chaque groupe de 6 passera devant un jury aléatoire de 2 encadrants qui seront là uniquement pour juger votre dernière réalisation et valider le lancement de la suivante.
|
||||||
|
|
||||||
Il est attendu que vous présentiez à l'aide d'un vidéoprojecteur, rapidement et succinctement, le contexte de votre exercice sur la plateforme, puis sa résolution (en montrant [le write-up]({{< relref "../files/write-up.md" >}}) ou la [vidéo de résolution]({{< relref "../files/resolution.md" >}})).
|
Il est attendu que vous présentiez à l'aide d'un vidéoprojecteur, rapidement et succinctement, le contexte de votre exercice sur la plateforme, puis sa résolution (en montrant [le write-up]({{% relref "../files/write-up.md" %}}) ou la [vidéo de résolution]({{% relref "../files/resolution.md" %}})).
|
||||||
|
|
||||||
Les encadrants testerons sur la plateforme les flags, vérifierons la cohérence du contexte et sa présentabilité (fautes d'ortographes, qualité, ...)
|
Les encadrants testerons sur la plateforme les flags, vérifierons la cohérence du contexte et sa présentabilité (fautes d'ortographes, qualité, ...)
|
||||||
|
|
||||||
|
@ -60,10 +60,10 @@ label
|
|||||||
: intitulé du choix ;
|
: intitulé du choix ;
|
||||||
|
|
||||||
raw
|
raw
|
||||||
: [drapeau]({{< relref "/responses/simple.md" >}}) ou [tableau de drapeaux]({{< relref "/responses/vector.md" >}}) exact à trouver ;
|
: [drapeau]({{% relref "/responses/simple.md" %}}) ou [tableau de drapeaux]({{% relref "/responses/vector.md" %}}) exact à trouver ;
|
||||||
|
|
||||||
capture_regexp
|
capture_regexp
|
||||||
: (facultatif) [expression rationnelle]({{< relref "/responses/simple.md#flag-modulable" >}}) dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
|
: (facultatif) [expression rationnelle]({{% relref "/responses/simple.md#flag-modulable" %}}) dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
|
||||||
|
|
||||||
casesensitive
|
casesensitive
|
||||||
: (facultatif, par défaut : `false`) prend en compte la casse de ce drapeau lors de la validation ;
|
: (facultatif, par défaut : `false`) prend en compte la casse de ce drapeau lors de la validation ;
|
||||||
|
@ -24,8 +24,8 @@ DtkpjGHQzPF6vOe907y5NQLvVFGXUq/FIJZxB8kfJdHEm2M4=
|
|||||||
"""
|
"""
|
||||||
```
|
```
|
||||||
|
|
||||||
Les mêmes attributs que pour les [flags simples]({{< relref
|
Les mêmes attributs que pour les [flags simples]({{% relref
|
||||||
"/responses/simple.md#propriétés" >}}) sont disponibles.
|
"/responses/simple.md#propriétés" %}}) sont disponibles.
|
||||||
|
|
||||||
## Rendu
|
## Rendu
|
||||||
|
|
||||||
|
@ -23,8 +23,8 @@ max = 123456789
|
|||||||
|
|
||||||
## Propriétés
|
## Propriétés
|
||||||
|
|
||||||
Les mêmes propriétés que pour les [flags simples]({{< relref
|
Les mêmes propriétés que pour les [flags simples]({{% relref
|
||||||
"/responses/simple.md#propriétés" >}}) sont disponibles, et en plus :
|
"/responses/simple.md#propriétés" %}}) sont disponibles, et en plus :
|
||||||
|
|
||||||
max
|
max
|
||||||
: (facultatif) valeur maximale attendue dans le champ ;
|
: (facultatif) valeur maximale attendue dans le champ ;
|
||||||
|
@ -122,10 +122,10 @@ label
|
|||||||
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
||||||
|
|
||||||
raw
|
raw
|
||||||
: drapeau exact à trouver ; sous [forme de tableau]({{< relref "/responses/vector.md" >}}), le participant n'aura pas connaissaance du nombre d'éléments ;
|
: drapeau exact à trouver ; sous [forme de tableau]({{% relref "/responses/vector.md" %}}), le participant n'aura pas connaissaance du nombre d'éléments ;
|
||||||
|
|
||||||
capture_regexp
|
capture_regexp
|
||||||
: (facultatif) [expression rationnelle]({{< relref "/responses/simple.md#flag-modulable" >}}) dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
|
: (facultatif) [expression rationnelle]({{% relref "/responses/simple.md#flag-modulable" %}}) dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
|
||||||
|
|
||||||
sort\_capture\_regexp\_groups
|
sort\_capture\_regexp\_groups
|
||||||
: (facultatif, par défaut : `false`) trie les groupes capturant par ordre alphabétique avant concaténation ;
|
: (facultatif, par défaut : `false`) trie les groupes capturant par ordre alphabétique avant concaténation ;
|
||||||
@ -143,7 +143,7 @@ help
|
|||||||
: (facultatif, rarement utilisé) chaîne de caractères placée sous le champ du formulaire, idéale pour donner un détail supplémentaire. Cette propriété peut contenir du [Markdown](https://commonmark.org/).
|
: (facultatif, rarement utilisé) chaîne de caractères placée sous le champ du formulaire, idéale pour donner un détail supplémentaire. Cette propriété peut contenir du [Markdown](https://commonmark.org/).
|
||||||
|
|
||||||
bonus_gain
|
bonus_gain
|
||||||
: (facultatif) Voir [flag bonus]({{< relref "/responses/bonus.md" >}}).
|
: (facultatif) Voir [flag bonus]({{% relref "/responses/bonus.md" %}}).
|
||||||
|
|
||||||
|
|
||||||
## Rendu
|
## Rendu
|
||||||
|
@ -19,7 +19,7 @@ label
|
|||||||
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
: (facultatif, par défaut : `Flag`) intitulé du drapeau ;
|
||||||
|
|
||||||
raw
|
raw
|
||||||
: drapeau exact à trouver ; forme de [tableau]({{< relref "/responses/vector.md" >}}) possible, mais déconseillée ;
|
: drapeau exact à trouver ; forme de [tableau]({{% relref "/responses/vector.md" %}}) possible, mais déconseillée ;
|
||||||
|
|
||||||
choices_cost
|
choices_cost
|
||||||
: (facultatif, par défaut 0) coût pour afficher les choix : avant l'affichage, se comporte comme un `flag` classique (si `choices_cost` = 0, les choix sont affichés directement) ;
|
: (facultatif, par défaut 0) coût pour afficher les choix : avant l'affichage, se comporte comme un `flag` classique (si `choices_cost` = 0, les choix sont affichés directement) ;
|
||||||
|
@ -38,7 +38,7 @@ raw
|
|||||||
: tableau TOML de drapeaux exacts à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments ;
|
: tableau TOML de drapeaux exacts à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments ;
|
||||||
|
|
||||||
capture_regexp
|
capture_regexp
|
||||||
: (facultatif) [expression rationnelle]({{< relref "/responses/simple.md#flag-modulable" >}}) dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas). Attention, la regexp est appliquée seulement sur la représentation de la chaîne de caractères obtenue, pas sur chaque élément ;
|
: (facultatif) [expression rationnelle]({{% relref "/responses/simple.md#flag-modulable" %}}) dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas). Attention, la regexp est appliquée seulement sur la représentation de la chaîne de caractères obtenue, pas sur chaque élément ;
|
||||||
|
|
||||||
showlines
|
showlines
|
||||||
: (facultatif, restreint aux vecteurs de moins de 10 éléments, par défaut : `false`) affiche directement le bon nombre de champs de réponse dans l'interface, plutôt que de laisser la taille du tableau inconnue aux participants ;
|
: (facultatif, restreint aux vecteurs de moins de 10 éléments, par défaut : `false`) affiche directement le bon nombre de champs de réponse dans l'interface, plutôt que de laisser la taille du tableau inconnue aux participants ;
|
||||||
|
@ -34,7 +34,7 @@ Il convient dans un premier temps de bien identifier l'image à installer sur ch
|
|||||||
|
|
||||||
### Premier démarrage
|
### Premier démarrage
|
||||||
|
|
||||||
La manière la plus rapide d'installer les machines est de les démarrer en PXE (au moyen de l'image Docker [`fickit-deploy`]({{<relref "fickit-deploy">}})).
|
La manière la plus rapide d'installer les machines est de les démarrer en PXE (au moyen de l'image Docker [`fickit-deploy`]({%<relref "fickit-deploy"%}})).
|
||||||
|
|
||||||
1. Récupérer les dernières images produites pour le système d'intégration continue.
|
1. Récupérer les dernières images produites pour le système d'intégration continue.
|
||||||
1. (Demander aux roots les certificats pour le domaine fic.srs.epita.fr).
|
1. (Demander aux roots les certificats pour le domaine fic.srs.epita.fr).
|
||||||
@ -139,4 +139,4 @@ nsenter -t 1 -a
|
|||||||
|
|
||||||
## Connexion SSH et transfert de fichiers hors des machines
|
## Connexion SSH et transfert de fichiers hors des machines
|
||||||
|
|
||||||
Voir [l'article dédié]({{< relref "ssh.md" >}})
|
Voir [l'article dédié]({{% relref "ssh.md" %}})
|
||||||
|
@ -24,7 +24,7 @@ Pour administrer la machine, il faut donc utiliser l'iDRAC.
|
|||||||
|
|
||||||
Pour pouvoir se connecter au serveur, il est nécessaire d'avoir une clef SSH autorisée.
|
Pour pouvoir se connecter au serveur, il est nécessaire d'avoir une clef SSH autorisée.
|
||||||
|
|
||||||
Les clefs SSH font parties des [métadonnées]({{< relref "fickit-deploy.md" >}}).
|
Les clefs SSH font parties des [métadonnées]({{% relref "fickit-deploy.md" %}}).
|
||||||
|
|
||||||
|
|
||||||
## Interface d'administration
|
## Interface d'administration
|
||||||
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 3202533a746f91c67de1a8fa373c0328ec1b403d
|
|
1
themes/hugo-theme-relearn
Submodule
1
themes/hugo-theme-relearn
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 77ed3f431ae6fffa8f63c0ac59a407f06167cb19
|
Loading…
Reference in New Issue
Block a user