Supprime les reliquats du dossier tools
This commit is contained in:
63
AGENTS.md
63
AGENTS.md
@@ -132,8 +132,8 @@ Il s'agit d'un site statique généré avec Hugo, dont la version peut être vé
|
||||
##### Liens intéressants (`content/interets/liens-interessants`)
|
||||
|
||||
- Cette section a le même usage que l'application `Shaarli` : je m'en sers pour partager avec mes lecteurs mes trouvailles sur Internet
|
||||
- J'ajoute un lien avec la commande `node tools/add_link.js "<url>"`, qui produit le bundle correspondant, récupère le titre et la description du site distant, ainsi qu'une capture d'écran placée dans le dossier `images/` du bundle créé
|
||||
- Si une description est trouvée, elle est ajoutée dans le corps du fichier `index.md` généré par le script
|
||||
- Chaque lien intéressant est publié sous forme de bundle, avec au minimum un frontmatter renseignant l'attribut `links`
|
||||
- Si une description est trouvée, elle est ajoutée dans le corps du fichier `index.md`
|
||||
- Je peux éventuellement ajouter un commentaire personnel dans le corps du fichier `index.md`, mais ce n'est pas systématique
|
||||
|
||||
### Pièces jointes
|
||||
@@ -201,65 +201,6 @@ Il s'agit d'un site statique généré avec Hugo, dont la version peut être vé
|
||||
- Ne jamais ajouter d'émojis dans le corps de l'article
|
||||
- Ne jamais supprimer les émojis existant
|
||||
|
||||
## Outils
|
||||
|
||||
- Les outils sont placés dans le dossier `tools/`
|
||||
- Les librairies créées sur mesure devront être placée dans `tools/lib/`, éventuellement dans un sous-dossier pour architecturer correctement le code
|
||||
|
||||
### Ajout d'un LEGO à ma collection (`tools/add_lego.js`)
|
||||
|
||||
- Ce script exploite l'API du site Rebrickable pour me permettre de récupérer des images et informations à propos d'un set LEGO donné et ajoute ou modifie le bundle correspondant
|
||||
|
||||
### Ajout d'un lien intéressant (`tools/add_link.js`)
|
||||
|
||||
- Prend en entrée un URL et crée un nouveau bundle en peuplant l'attribut `links` du frontmatter et en fournissant une image d'en-tête
|
||||
|
||||
### Ajout de la météo (`tools/add_weather.js`)
|
||||
|
||||
- Ajoute les informations sur la météo à un bundle (ou tous les bundles)
|
||||
- Ces informations sont tirées de mon serveur InfluxDB2, ou d'au moins une source externe si ces données ne sont pas disponibles
|
||||
|
||||
### Vérification des liens
|
||||
|
||||
#### Externes (`tools/check_external_links.js`)
|
||||
|
||||
- Vérifie la disponibilité des sites liés partout dans `content/` (code HTTP 200 ou autre)
|
||||
- On cherche les liens dans les fichiers markdown (incluant le frontmatter) et les fichiers `*.yaml`
|
||||
- On ignore les URL placés dans des blocs de code mono ou multilignes
|
||||
- La vérification enrichie repose sur Playwright et le Chromium embarqué par la librairie `playwright`
|
||||
- La variable `externalLinks.usePlaywright` de `tools/config/config.json` doit être positionnée à `true` pour activer cette vérification
|
||||
- L'attribut `externalLinks.playwrightExecutablePath` doit rester vide ou à `null` afin de laisser Playwright utiliser son propre navigateur, compatible avec la configuration `nix-ld` déclarée dans `/etc/nixos/nix-ld-libraries.nix`
|
||||
- Si `externalLinks.playwrightExecutablePath` est renseigné, il doit impérativement pointer vers un binaire existant : dans le cas contraire, le script se termine en erreur et interrompt le déploiement
|
||||
|
||||
#### Internes (`tools/check_internal_links.js`)
|
||||
|
||||
- Vérifie les liens morts internes
|
||||
- Pas besoin de lancer Hugo : il suffit de chercher tous les liens sans `://` dans `content/`
|
||||
- On cherche les liens dans les fichiers markdown (excluant le frontmatter) et les fichiers `*.yaml`
|
||||
- On ignore les URL placés dans des blocs de code mono ou multilignes
|
||||
- L'URL est de la forme `/{section ou bundle}` : on cherche l'existence du dossier `content/{section ou bundle}`, et la présence d'un fichier `index.md` ou `_index.md` dans ce dossier, s'il existe. Si un tel fichier existe : le lien est valide.
|
||||
|
||||
### Diagrammes mermaid (`tools/generate_mermaid_diagrams.js`)
|
||||
|
||||
- Cherche des fichiers `*.mermaid` dans un dossier `diagrams` des bundles
|
||||
- Pour chaque fichier `*.mermaid` trouvé, on lance l'exécutable de `mermaid` sur ce fichier pour produire l'image correspondante dans le dossier `images/` du bundle
|
||||
- Les images produites doivent être au format `.png` ou `.jpeg`
|
||||
- Voir `content/interets/electronique/2025/10/21/pilotage-d-un-switch-usb-par-le-wifi`
|
||||
|
||||
### Génération de métadonnées (`tools/generate_metadata_files.js`)
|
||||
|
||||
- Génère automatiquement les fichiers de métadonnées pour toute pièce jointe du dernier bundle créé et les place dans le dossier `data/` du bundle
|
||||
|
||||
### Générateur de statistiques (`tools/generate_stats.js`)
|
||||
|
||||
- Génère diverses statistiques intéressantes
|
||||
- Les statistiques sont présentées dans le bundle `content/stats`
|
||||
|
||||
### Synchro Wikipédia (`tools/sync_wiki_metadata.js`)
|
||||
|
||||
- Ce script est utile aux critiques de médias
|
||||
- Il cherche sur la Wikipédia/Wikidata des informations relatives aux oeuvres critiquées
|
||||
|
||||
## Déploiement
|
||||
|
||||
- Tout le déploiement du site est confié au script `deploy.sh`.
|
||||
|
||||
58
layouts/partials/external-links-report.html
Normal file
58
layouts/partials/external-links-report.html
Normal file
@@ -0,0 +1,58 @@
|
||||
{{- $reportPath := "data/external_links.yaml" -}}
|
||||
{{- $report := dict -}}
|
||||
|
||||
{{- if reflect.IsMap . -}}
|
||||
{{- with index . "ReportPath" -}}
|
||||
{{- $reportPath = . -}}
|
||||
{{- end -}}
|
||||
{{- with index . "Report" -}}
|
||||
{{- $report = . -}}
|
||||
{{- end -}}
|
||||
{{- else if . -}}
|
||||
{{- $report = . -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if eq (len $report) 0 -}}
|
||||
{{- if eq $reportPath "data/external_links.yaml" -}}
|
||||
{{- with index site.Data "external_links" -}}
|
||||
{{- $report = . -}}
|
||||
{{- end -}}
|
||||
{{- else if fileExists $reportPath -}}
|
||||
{{- $report = transform.Unmarshal (readFile $reportPath) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $sourceLinks := slice -}}
|
||||
{{- with index $report "deadLinks" -}}
|
||||
{{- $sourceLinks = . -}}
|
||||
{{- end -}}
|
||||
{{- if and (eq (len $sourceLinks) 0) (isset $report "links") -}}
|
||||
{{- $sourceLinks = default (slice) (index $report "links") -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $links := slice -}}
|
||||
{{- range $sourceLinks -}}
|
||||
{{- $status := "" -}}
|
||||
{{- with index . "status" -}}
|
||||
{{- $status = printf "%v" . -}}
|
||||
{{- end -}}
|
||||
{{- if eq $status "" -}}
|
||||
{{- with index . "code" -}}
|
||||
{{- $status = printf "%v" . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $links = $links | append (dict
|
||||
"url" (default "" (index . "url"))
|
||||
"status" $status
|
||||
"locations" (default (slice) (index . "locations"))
|
||||
"errorType" (default "" (index . "errorType"))
|
||||
"checkedAt" (default "" (index . "checkedAt"))
|
||||
) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- return (dict
|
||||
"generatedAt" (default "" (index $report "generatedAt"))
|
||||
"entries" (default (dict) (index $report "entries"))
|
||||
"links" $links
|
||||
) -}}
|
||||
5419
package-lock.json
generated
5419
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
29
package.json
29
package.json
@@ -1,36 +1,7 @@
|
||||
{
|
||||
"scripts": {
|
||||
"icons:generate": "node tools/generate_apple_touch_icons.js",
|
||||
"links:manage-dead": "node tools/manage_dead_links.js",
|
||||
"links:refresh": "node tools/check_external_links.js",
|
||||
"stats:generate": "node tools/generate_stats.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@influxdata/influxdb-client": "^1.35.0",
|
||||
"@napi-rs/canvas": "^0.1.59",
|
||||
"chart.js": "^4.4.4",
|
||||
"chartjs-node-canvas": "^5.0.0",
|
||||
"lemmy-js-client": "^0.19.6",
|
||||
"luxon": "^3.7.2",
|
||||
"pg": "^8.16.3",
|
||||
"playwright": "^1.49.0",
|
||||
"postcss-import": "^16.1.0",
|
||||
"postcss-nested": "^7.0.2",
|
||||
"puppeteer": "^23.11.1",
|
||||
"puppeteer-extra": "^3.3.6",
|
||||
"puppeteer-extra-plugin-stealth": "^2.11.2",
|
||||
"sharp": "^0.33.5",
|
||||
"undici": "^7.16.0",
|
||||
"user-agents": "^1.1.480"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@mermaid-js/mermaid-cli": "^11.12.0",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"postcss": "^8.5.3",
|
||||
"postcss-cli": "^11.0.1"
|
||||
},
|
||||
"overrides": {
|
||||
"js-yaml": "^4.1.1",
|
||||
"tar-fs": "^3.1.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,4 @@
|
||||
{{- $defaultReportPath := "tools/cache/external_links.yaml" -}}
|
||||
{{- $reportPath := default $defaultReportPath .ReportPath -}}
|
||||
{{- $report := default (dict) .Report -}}
|
||||
{{- if or (eq (len $report) 0) (not (isset $report "links")) -}}
|
||||
{{- if fileExists $reportPath -}}
|
||||
{{- with readFile $reportPath -}}
|
||||
{{- $report = . | unmarshal -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{- warnf "Rapport des liens morts introuvable (%s)" $reportPath -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $report := partial "external-links-report.html" . -}}
|
||||
{{- $allPages := where site.Pages ".File" "!=" nil -}}
|
||||
{{- $links := default (slice) $report.links -}}
|
||||
{{- $linkCount := len $links -}}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
{{- $site := $page.Site -}}
|
||||
{{- $aff := index $site.Data.affiliates.sites $host -}}
|
||||
{{- $isAffiliated := false -}}
|
||||
{{- $report := default (dict) (transform.Unmarshal (readFile "tools/cache/external_links.yaml")) -}}
|
||||
{{- $report := partial "external-links-report.html" (dict) -}}
|
||||
{{- $deadList := default (slice) (index $report "links") -}}
|
||||
{{- $entriesMap := default (dict) (index $report "entries") -}}
|
||||
{{- $cacheEntry := index $entriesMap .Destination -}}
|
||||
|
||||
Reference in New Issue
Block a user