commit 8e09f7ae3bd435cbaeb39badcf83b69d2cb212ad Author: William Petit Date: Fri Jan 17 11:28:15 2025 +0100 feat: initial commit diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..8c10ed3 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,55 @@ +@Library("cadoles") _ + +pipeline { + agent { + dockerfile { + label 'docker' + filename 'Dockerfile' + dir 'misc/ci' + } + } + + triggers { + cron('0 9 * * 1') + } + + stages { + stage("Send newsletter") { + when { + anyOf { + triggeredBy cause: "UserIdCause", detail: "wpetit" + triggeredBy 'TimerTrigger' + } + } + steps { + script { + String newsletter = sh(script: "bash ./generate-newsletter.sh", returnStdout: true) + if (newsletter) { + rocketSend( + channel: '#TechWatch', + message: newsletter, + rawMessage: true + ) + } + } + } + } + stage("Send test newsletter to wpetit") { + when { + branch 'master' + } + steps { + script { + String newsletter = sh(script: "bash ./generate-newsletter.sh", returnStdout: true) + if (newsletter) { + rocketSend( + channel: '@wpetit', + message: newsletter, + rawMessage: true + ) + } + } + } + } + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2436a03 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Cazette + +An automated markdown newsletter. diff --git a/generate-newsletter.sh b/generate-newsletter.sh new file mode 100755 index 0000000..86b96cd --- /dev/null +++ b/generate-newsletter.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +set -eo pipefail + +NEWSLETTER="" + +function write { + local content=$@ + NEWSLETTER="${NEWSLETTER}${content}" +} + +function writeln { + write "$@\n" +} + +function include_illustration_of_the_week { + local illustration_of_the_week=$(date +"illustrations/%Y/small/%U.jpg") + + if [ ! -f "${illustration_of_the_week}" ]; then + return + fi + + writeln + writeln "![L'illustration de la semaine](https://forge.cadoles.com/wpetit/cazette/raw/branch/master/$illustration_of_the_week)" +} + +function include_subreddit_top_of_the_week { + local title=$1 + local subreddit=$2 + local total=$3 + local top_of_the_week=$(curl -sk --retry 5 "https://www.reddit.com/r/$subreddit/top/.rss?sort=top&t=week" | npx xml2json | jq --arg TOTAL "$total" '.feed.entry[0:($TOTAL|tonumber)]') + + if [ -z "$top_of_the_week" ]; then + return + fi + + writeln + writeln "#### ${title}" + + for index in $(seq 0 $(( $total - 1 ))); do + local entry=$(echo $top_of_the_week | jq --arg INDEX $index '.[$INDEX | tonumber]') + local entry_title=$(echo $entry | jq -r '.title') + local entry_url=$(echo $entry | jq -r '.link.href') + local entry_author=$(echo $entry | jq -r '.author? | .name?') + + write "- [${entry_title}]($entry_url)" + if [ ! -z "${entry_author}" ]; then + writeln " par _ ${entry_author} _" + else + writeln + fi + done +} + +function include_linuxfr_latest { + local total=5 + local linuxfr_latest=$(curl -sk --retry 5 https://linuxfr.org/news.atom | npx xml2json | jq --arg TOTAL "$total" '.feed.entry[0:($TOTAL|tonumber)]') + + if [ -z "$linuxfr_latest" ]; then + return + fi + + writeln + writeln "#### LinuxFr.org" + + for index in $(seq 0 $(( $total - 1 ))); do + local entry=$(echo $linuxfr_latest | jq --arg INDEX $index '.[$INDEX | tonumber]') + local entry_title=$(echo $entry | jq -r '.title') + local entry_url=$(echo $entry | jq -r '.link.href') + local entry_author=$(echo $entry | jq -r '[.author? | .[] | .name?] | join(", ")') + + write "- [${entry_title}]($entry_url)" + if [ ! -z "${entry_author}" ]; then + writeln " par _ ${entry_author} _" + else + writeln + fi + done +} + +function include_hackernews_top5 { + local hackernews_top5=$(curl -sk --retry 5 https://hacker-news.firebaseio.com/v0/topstories.json | jq -r '.[0:5] | .[]') + + if [ -z "$hackernews_top5" ]; then + return + fi + + writeln + writeln "#### Hackernews" + + for story_id in ${hackernews_top5}; do + local hackernews_story=$(curl -sk --retry 5 https://hacker-news.firebaseio.com/v0/item/$story_id.json?print=pretty) + local story_title=$(echo $hackernews_story | jq -r '.title') + local story_url=$(echo $hackernews_story | jq -r '.url') + local story_author=$(echo $hackernews_story | jq -r '.by') + + write "- [${story_title}](${story_url})" + if [ ! -z "${story_author}" ]; then + writeln " par _ ${story_author} _" + else + writeln + fi + done +} + +function main() { + include_subreddit_top_of_the_week "Généralités" "programmation" 5 + include_subreddit_top_of_the_week "Go" "golang" 5 + include_subreddit_top_of_the_week "Kubernetes" "kubernetes" 5 + include_subreddit_top_of_the_week "Python" "python" 5 + include_subreddit_top_of_the_week "PHP" "php" 5 + include_linuxfr_latest + include_hackernews_top5 + include_illustration_of_the_week + + if [ ! -z "$NEWSLETTER" ]; then + echo "### La Cazette N°$(date +%Y-%U)" + echo "_Chaque semaine, une sélection de nouvelles et d'articles de la communauté du développement logiciel._" + echo -e $NEWSLETTER + echo "**Bonne semaine à tous ! :robot:**" + echo + echo "_Generated by [cazette](https://forge.cadoles.com/wpetit/cazette)_" + fi +} + +main \ No newline at end of file diff --git a/illustrations/2025/03.jpg b/illustrations/2025/03.jpg new file mode 100644 index 0000000..abd9d18 Binary files /dev/null and b/illustrations/2025/03.jpg differ diff --git a/illustrations/2025/04.jpg b/illustrations/2025/04.jpg new file mode 100644 index 0000000..7e4f04f Binary files /dev/null and b/illustrations/2025/04.jpg differ diff --git a/illustrations/2025/05.jpg b/illustrations/2025/05.jpg new file mode 100644 index 0000000..9c97492 Binary files /dev/null and b/illustrations/2025/05.jpg differ diff --git a/illustrations/2025/06.jpg b/illustrations/2025/06.jpg new file mode 100644 index 0000000..ab9acac Binary files /dev/null and b/illustrations/2025/06.jpg differ diff --git a/illustrations/2025/07.jpg b/illustrations/2025/07.jpg new file mode 100644 index 0000000..176c4f5 Binary files /dev/null and b/illustrations/2025/07.jpg differ diff --git a/illustrations/2025/08.jpg b/illustrations/2025/08.jpg new file mode 100644 index 0000000..2f1b883 Binary files /dev/null and b/illustrations/2025/08.jpg differ diff --git a/illustrations/2025/09.jpg b/illustrations/2025/09.jpg new file mode 100644 index 0000000..28ae9b4 Binary files /dev/null and b/illustrations/2025/09.jpg differ diff --git a/illustrations/2025/10.jpg b/illustrations/2025/10.jpg new file mode 100644 index 0000000..653fd85 Binary files /dev/null and b/illustrations/2025/10.jpg differ diff --git a/illustrations/2025/11.jpg b/illustrations/2025/11.jpg new file mode 100644 index 0000000..d5e6896 Binary files /dev/null and b/illustrations/2025/11.jpg differ diff --git a/illustrations/2025/12.jpg b/illustrations/2025/12.jpg new file mode 100644 index 0000000..baf1dd5 Binary files /dev/null and b/illustrations/2025/12.jpg differ diff --git a/illustrations/2025/13.jpg b/illustrations/2025/13.jpg new file mode 100644 index 0000000..7d34668 Binary files /dev/null and b/illustrations/2025/13.jpg differ diff --git a/illustrations/2025/14.jpg b/illustrations/2025/14.jpg new file mode 100644 index 0000000..6f10f6b Binary files /dev/null and b/illustrations/2025/14.jpg differ diff --git a/illustrations/2025/15.jpg b/illustrations/2025/15.jpg new file mode 100644 index 0000000..bc5b1a4 Binary files /dev/null and b/illustrations/2025/15.jpg differ diff --git a/illustrations/2025/16.jpg b/illustrations/2025/16.jpg new file mode 100644 index 0000000..0f20249 Binary files /dev/null and b/illustrations/2025/16.jpg differ diff --git a/illustrations/2025/17.jpg b/illustrations/2025/17.jpg new file mode 100644 index 0000000..9d22de7 Binary files /dev/null and b/illustrations/2025/17.jpg differ diff --git a/illustrations/2025/18.jpg b/illustrations/2025/18.jpg new file mode 100644 index 0000000..f966b1c Binary files /dev/null and b/illustrations/2025/18.jpg differ diff --git a/illustrations/2025/19.jpg b/illustrations/2025/19.jpg new file mode 100644 index 0000000..6527caf Binary files /dev/null and b/illustrations/2025/19.jpg differ diff --git a/illustrations/2025/20.jpg b/illustrations/2025/20.jpg new file mode 100644 index 0000000..037d0d1 Binary files /dev/null and b/illustrations/2025/20.jpg differ diff --git a/illustrations/2025/21.jpg b/illustrations/2025/21.jpg new file mode 100644 index 0000000..83c4455 Binary files /dev/null and b/illustrations/2025/21.jpg differ diff --git a/illustrations/2025/22.jpg b/illustrations/2025/22.jpg new file mode 100644 index 0000000..f396ed8 Binary files /dev/null and b/illustrations/2025/22.jpg differ diff --git a/illustrations/2025/23.jpg b/illustrations/2025/23.jpg new file mode 100644 index 0000000..c4350ac Binary files /dev/null and b/illustrations/2025/23.jpg differ diff --git a/illustrations/2025/24.jpg b/illustrations/2025/24.jpg new file mode 100644 index 0000000..309692e Binary files /dev/null and b/illustrations/2025/24.jpg differ diff --git a/illustrations/2025/25.jpg b/illustrations/2025/25.jpg new file mode 100644 index 0000000..909f951 Binary files /dev/null and b/illustrations/2025/25.jpg differ diff --git a/illustrations/2025/26.jpg b/illustrations/2025/26.jpg new file mode 100644 index 0000000..debbd80 Binary files /dev/null and b/illustrations/2025/26.jpg differ diff --git a/illustrations/2025/27.jpg b/illustrations/2025/27.jpg new file mode 100644 index 0000000..497dac1 Binary files /dev/null and b/illustrations/2025/27.jpg differ diff --git a/illustrations/2025/28.jpg b/illustrations/2025/28.jpg new file mode 100644 index 0000000..a6bd8c6 Binary files /dev/null and b/illustrations/2025/28.jpg differ diff --git a/illustrations/2025/29.jpg b/illustrations/2025/29.jpg new file mode 100644 index 0000000..31a16ed Binary files /dev/null and b/illustrations/2025/29.jpg differ diff --git a/illustrations/2025/30.jpg b/illustrations/2025/30.jpg new file mode 100644 index 0000000..f7029a8 Binary files /dev/null and b/illustrations/2025/30.jpg differ diff --git a/illustrations/2025/31.jpg b/illustrations/2025/31.jpg new file mode 100644 index 0000000..3f86332 Binary files /dev/null and b/illustrations/2025/31.jpg differ diff --git a/illustrations/2025/32.jpg b/illustrations/2025/32.jpg new file mode 100644 index 0000000..47d90ce Binary files /dev/null and b/illustrations/2025/32.jpg differ diff --git a/illustrations/2025/33.jpg b/illustrations/2025/33.jpg new file mode 100644 index 0000000..b6206af Binary files /dev/null and b/illustrations/2025/33.jpg differ diff --git a/illustrations/2025/34.jpg b/illustrations/2025/34.jpg new file mode 100644 index 0000000..78441bf Binary files /dev/null and b/illustrations/2025/34.jpg differ diff --git a/illustrations/2025/35.jpg b/illustrations/2025/35.jpg new file mode 100644 index 0000000..1f8e11a Binary files /dev/null and b/illustrations/2025/35.jpg differ diff --git a/illustrations/2025/36.jpg b/illustrations/2025/36.jpg new file mode 100644 index 0000000..d589828 Binary files /dev/null and b/illustrations/2025/36.jpg differ diff --git a/illustrations/2025/37.jpg b/illustrations/2025/37.jpg new file mode 100644 index 0000000..a1268be Binary files /dev/null and b/illustrations/2025/37.jpg differ diff --git a/illustrations/2025/38.jpg b/illustrations/2025/38.jpg new file mode 100644 index 0000000..662bca4 Binary files /dev/null and b/illustrations/2025/38.jpg differ diff --git a/illustrations/2025/39.jpg b/illustrations/2025/39.jpg new file mode 100644 index 0000000..8240f31 Binary files /dev/null and b/illustrations/2025/39.jpg differ diff --git a/illustrations/2025/40.jpg b/illustrations/2025/40.jpg new file mode 100644 index 0000000..ac1043b Binary files /dev/null and b/illustrations/2025/40.jpg differ diff --git a/illustrations/2025/41.jpg b/illustrations/2025/41.jpg new file mode 100644 index 0000000..2a60db3 Binary files /dev/null and b/illustrations/2025/41.jpg differ diff --git a/illustrations/2025/42.jpg b/illustrations/2025/42.jpg new file mode 100644 index 0000000..b9788b4 Binary files /dev/null and b/illustrations/2025/42.jpg differ diff --git a/illustrations/2025/43.jpg b/illustrations/2025/43.jpg new file mode 100644 index 0000000..04d0abb Binary files /dev/null and b/illustrations/2025/43.jpg differ diff --git a/illustrations/2025/44.jpg b/illustrations/2025/44.jpg new file mode 100644 index 0000000..2f3a329 Binary files /dev/null and b/illustrations/2025/44.jpg differ diff --git a/illustrations/2025/45.jpg b/illustrations/2025/45.jpg new file mode 100644 index 0000000..47877d0 Binary files /dev/null and b/illustrations/2025/45.jpg differ diff --git a/illustrations/2025/46.jpg b/illustrations/2025/46.jpg new file mode 100644 index 0000000..1cadeb2 Binary files /dev/null and b/illustrations/2025/46.jpg differ diff --git a/illustrations/2025/47.jpg b/illustrations/2025/47.jpg new file mode 100644 index 0000000..0c65e30 Binary files /dev/null and b/illustrations/2025/47.jpg differ diff --git a/illustrations/2025/48.jpg b/illustrations/2025/48.jpg new file mode 100644 index 0000000..b302fe3 Binary files /dev/null and b/illustrations/2025/48.jpg differ diff --git a/illustrations/2025/49.jpg b/illustrations/2025/49.jpg new file mode 100644 index 0000000..e50289b Binary files /dev/null and b/illustrations/2025/49.jpg differ diff --git a/illustrations/2025/50.jpg b/illustrations/2025/50.jpg new file mode 100644 index 0000000..19f2529 Binary files /dev/null and b/illustrations/2025/50.jpg differ diff --git a/illustrations/2025/51.jpg b/illustrations/2025/51.jpg new file mode 100644 index 0000000..8f6906d Binary files /dev/null and b/illustrations/2025/51.jpg differ diff --git a/illustrations/2025/52.jpg b/illustrations/2025/52.jpg new file mode 100644 index 0000000..4dd125c Binary files /dev/null and b/illustrations/2025/52.jpg differ diff --git a/illustrations/2025/small/03.jpg b/illustrations/2025/small/03.jpg new file mode 100644 index 0000000..1efd8f0 Binary files /dev/null and b/illustrations/2025/small/03.jpg differ diff --git a/illustrations/2025/small/04.jpg b/illustrations/2025/small/04.jpg new file mode 100644 index 0000000..06dec66 Binary files /dev/null and b/illustrations/2025/small/04.jpg differ diff --git a/illustrations/2025/small/05.jpg b/illustrations/2025/small/05.jpg new file mode 100644 index 0000000..7ef874e Binary files /dev/null and b/illustrations/2025/small/05.jpg differ diff --git a/illustrations/2025/small/06.jpg b/illustrations/2025/small/06.jpg new file mode 100644 index 0000000..715ed43 Binary files /dev/null and b/illustrations/2025/small/06.jpg differ diff --git a/illustrations/2025/small/07.jpg b/illustrations/2025/small/07.jpg new file mode 100644 index 0000000..a3aec35 Binary files /dev/null and b/illustrations/2025/small/07.jpg differ diff --git a/illustrations/2025/small/08.jpg b/illustrations/2025/small/08.jpg new file mode 100644 index 0000000..f0e79c4 Binary files /dev/null and b/illustrations/2025/small/08.jpg differ diff --git a/illustrations/2025/small/09.jpg b/illustrations/2025/small/09.jpg new file mode 100644 index 0000000..3938fdc Binary files /dev/null and b/illustrations/2025/small/09.jpg differ diff --git a/illustrations/2025/small/10.jpg b/illustrations/2025/small/10.jpg new file mode 100644 index 0000000..1c8bcd3 Binary files /dev/null and b/illustrations/2025/small/10.jpg differ diff --git a/illustrations/2025/small/11.jpg b/illustrations/2025/small/11.jpg new file mode 100644 index 0000000..9f4faf7 Binary files /dev/null and b/illustrations/2025/small/11.jpg differ diff --git a/illustrations/2025/small/12.jpg b/illustrations/2025/small/12.jpg new file mode 100644 index 0000000..cc7dd41 Binary files /dev/null and b/illustrations/2025/small/12.jpg differ diff --git a/illustrations/2025/small/13.jpg b/illustrations/2025/small/13.jpg new file mode 100644 index 0000000..2e882cd Binary files /dev/null and b/illustrations/2025/small/13.jpg differ diff --git a/illustrations/2025/small/14.jpg b/illustrations/2025/small/14.jpg new file mode 100644 index 0000000..e5bd6fb Binary files /dev/null and b/illustrations/2025/small/14.jpg differ diff --git a/illustrations/2025/small/15.jpg b/illustrations/2025/small/15.jpg new file mode 100644 index 0000000..570f11b Binary files /dev/null and b/illustrations/2025/small/15.jpg differ diff --git a/illustrations/2025/small/16.jpg b/illustrations/2025/small/16.jpg new file mode 100644 index 0000000..54ead24 Binary files /dev/null and b/illustrations/2025/small/16.jpg differ diff --git a/illustrations/2025/small/17.jpg b/illustrations/2025/small/17.jpg new file mode 100644 index 0000000..5dac0d5 Binary files /dev/null and b/illustrations/2025/small/17.jpg differ diff --git a/illustrations/2025/small/18.jpg b/illustrations/2025/small/18.jpg new file mode 100644 index 0000000..70803cd Binary files /dev/null and b/illustrations/2025/small/18.jpg differ diff --git a/illustrations/2025/small/19.jpg b/illustrations/2025/small/19.jpg new file mode 100644 index 0000000..f1a09e5 Binary files /dev/null and b/illustrations/2025/small/19.jpg differ diff --git a/illustrations/2025/small/20.jpg b/illustrations/2025/small/20.jpg new file mode 100644 index 0000000..8807910 Binary files /dev/null and b/illustrations/2025/small/20.jpg differ diff --git a/illustrations/2025/small/21.jpg b/illustrations/2025/small/21.jpg new file mode 100644 index 0000000..05c5381 Binary files /dev/null and b/illustrations/2025/small/21.jpg differ diff --git a/illustrations/2025/small/22.jpg b/illustrations/2025/small/22.jpg new file mode 100644 index 0000000..57ae83c Binary files /dev/null and b/illustrations/2025/small/22.jpg differ diff --git a/illustrations/2025/small/23.jpg b/illustrations/2025/small/23.jpg new file mode 100644 index 0000000..20a6c04 Binary files /dev/null and b/illustrations/2025/small/23.jpg differ diff --git a/illustrations/2025/small/24.jpg b/illustrations/2025/small/24.jpg new file mode 100644 index 0000000..4714529 Binary files /dev/null and b/illustrations/2025/small/24.jpg differ diff --git a/illustrations/2025/small/25.jpg b/illustrations/2025/small/25.jpg new file mode 100644 index 0000000..49f8d06 Binary files /dev/null and b/illustrations/2025/small/25.jpg differ diff --git a/illustrations/2025/small/26.jpg b/illustrations/2025/small/26.jpg new file mode 100644 index 0000000..2c98eb0 Binary files /dev/null and b/illustrations/2025/small/26.jpg differ diff --git a/illustrations/2025/small/27.jpg b/illustrations/2025/small/27.jpg new file mode 100644 index 0000000..1cd5f9d Binary files /dev/null and b/illustrations/2025/small/27.jpg differ diff --git a/illustrations/2025/small/28.jpg b/illustrations/2025/small/28.jpg new file mode 100644 index 0000000..f93c0b7 Binary files /dev/null and b/illustrations/2025/small/28.jpg differ diff --git a/illustrations/2025/small/29.jpg b/illustrations/2025/small/29.jpg new file mode 100644 index 0000000..a9826fd Binary files /dev/null and b/illustrations/2025/small/29.jpg differ diff --git a/illustrations/2025/small/30.jpg b/illustrations/2025/small/30.jpg new file mode 100644 index 0000000..b490f49 Binary files /dev/null and b/illustrations/2025/small/30.jpg differ diff --git a/illustrations/2025/small/31.jpg b/illustrations/2025/small/31.jpg new file mode 100644 index 0000000..1c8c67b Binary files /dev/null and b/illustrations/2025/small/31.jpg differ diff --git a/illustrations/2025/small/32.jpg b/illustrations/2025/small/32.jpg new file mode 100644 index 0000000..41479a1 Binary files /dev/null and b/illustrations/2025/small/32.jpg differ diff --git a/illustrations/2025/small/33.jpg b/illustrations/2025/small/33.jpg new file mode 100644 index 0000000..9be71b8 Binary files /dev/null and b/illustrations/2025/small/33.jpg differ diff --git a/illustrations/2025/small/34.jpg b/illustrations/2025/small/34.jpg new file mode 100644 index 0000000..ce96811 Binary files /dev/null and b/illustrations/2025/small/34.jpg differ diff --git a/illustrations/2025/small/35.jpg b/illustrations/2025/small/35.jpg new file mode 100644 index 0000000..e7fb1c1 Binary files /dev/null and b/illustrations/2025/small/35.jpg differ diff --git a/illustrations/2025/small/36.jpg b/illustrations/2025/small/36.jpg new file mode 100644 index 0000000..c31dcaa Binary files /dev/null and b/illustrations/2025/small/36.jpg differ diff --git a/illustrations/2025/small/37.jpg b/illustrations/2025/small/37.jpg new file mode 100644 index 0000000..9282c8e Binary files /dev/null and b/illustrations/2025/small/37.jpg differ diff --git a/illustrations/2025/small/38.jpg b/illustrations/2025/small/38.jpg new file mode 100644 index 0000000..6e47af6 Binary files /dev/null and b/illustrations/2025/small/38.jpg differ diff --git a/illustrations/2025/small/39.jpg b/illustrations/2025/small/39.jpg new file mode 100644 index 0000000..f697090 Binary files /dev/null and b/illustrations/2025/small/39.jpg differ diff --git a/illustrations/2025/small/40.jpg b/illustrations/2025/small/40.jpg new file mode 100644 index 0000000..5c86560 Binary files /dev/null and b/illustrations/2025/small/40.jpg differ diff --git a/illustrations/2025/small/41.jpg b/illustrations/2025/small/41.jpg new file mode 100644 index 0000000..55453d7 Binary files /dev/null and b/illustrations/2025/small/41.jpg differ diff --git a/illustrations/2025/small/42.jpg b/illustrations/2025/small/42.jpg new file mode 100644 index 0000000..0c8e801 Binary files /dev/null and b/illustrations/2025/small/42.jpg differ diff --git a/illustrations/2025/small/43.jpg b/illustrations/2025/small/43.jpg new file mode 100644 index 0000000..6cabcfc Binary files /dev/null and b/illustrations/2025/small/43.jpg differ diff --git a/illustrations/2025/small/44.jpg b/illustrations/2025/small/44.jpg new file mode 100644 index 0000000..a99149f Binary files /dev/null and b/illustrations/2025/small/44.jpg differ diff --git a/illustrations/2025/small/45.jpg b/illustrations/2025/small/45.jpg new file mode 100644 index 0000000..5245f59 Binary files /dev/null and b/illustrations/2025/small/45.jpg differ diff --git a/illustrations/2025/small/46.jpg b/illustrations/2025/small/46.jpg new file mode 100644 index 0000000..f904768 Binary files /dev/null and b/illustrations/2025/small/46.jpg differ diff --git a/illustrations/2025/small/47.jpg b/illustrations/2025/small/47.jpg new file mode 100644 index 0000000..d9312c7 Binary files /dev/null and b/illustrations/2025/small/47.jpg differ diff --git a/illustrations/2025/small/48.jpg b/illustrations/2025/small/48.jpg new file mode 100644 index 0000000..d0a9592 Binary files /dev/null and b/illustrations/2025/small/48.jpg differ diff --git a/illustrations/2025/small/49.jpg b/illustrations/2025/small/49.jpg new file mode 100644 index 0000000..71b021e Binary files /dev/null and b/illustrations/2025/small/49.jpg differ diff --git a/illustrations/2025/small/50.jpg b/illustrations/2025/small/50.jpg new file mode 100644 index 0000000..61f8b9a Binary files /dev/null and b/illustrations/2025/small/50.jpg differ diff --git a/illustrations/2025/small/51.jpg b/illustrations/2025/small/51.jpg new file mode 100644 index 0000000..4bc7995 Binary files /dev/null and b/illustrations/2025/small/51.jpg differ diff --git a/illustrations/2025/small/52.jpg b/illustrations/2025/small/52.jpg new file mode 100644 index 0000000..1e0ed17 Binary files /dev/null and b/illustrations/2025/small/52.jpg differ diff --git a/illustrations/2026/01.jpg b/illustrations/2026/01.jpg new file mode 100644 index 0000000..fb99571 Binary files /dev/null and b/illustrations/2026/01.jpg differ diff --git a/illustrations/2026/02.jpg b/illustrations/2026/02.jpg new file mode 100644 index 0000000..ba4d220 Binary files /dev/null and b/illustrations/2026/02.jpg differ diff --git a/illustrations/2026/03.jpg b/illustrations/2026/03.jpg new file mode 100644 index 0000000..d095779 Binary files /dev/null and b/illustrations/2026/03.jpg differ diff --git a/illustrations/2026/04.jpg b/illustrations/2026/04.jpg new file mode 100644 index 0000000..acf7480 Binary files /dev/null and b/illustrations/2026/04.jpg differ diff --git a/illustrations/2026/05.jpg b/illustrations/2026/05.jpg new file mode 100644 index 0000000..08aef59 Binary files /dev/null and b/illustrations/2026/05.jpg differ diff --git a/illustrations/2026/06.jpg b/illustrations/2026/06.jpg new file mode 100644 index 0000000..3fbc65c Binary files /dev/null and b/illustrations/2026/06.jpg differ diff --git a/illustrations/2026/07.jpg b/illustrations/2026/07.jpg new file mode 100644 index 0000000..fb0b3b8 Binary files /dev/null and b/illustrations/2026/07.jpg differ diff --git a/illustrations/2026/08.jpg b/illustrations/2026/08.jpg new file mode 100644 index 0000000..33ad4f0 Binary files /dev/null and b/illustrations/2026/08.jpg differ diff --git a/illustrations/2026/09.jpg b/illustrations/2026/09.jpg new file mode 100644 index 0000000..e56dac1 Binary files /dev/null and b/illustrations/2026/09.jpg differ diff --git a/illustrations/2026/10.jpg b/illustrations/2026/10.jpg new file mode 100644 index 0000000..d7459f2 Binary files /dev/null and b/illustrations/2026/10.jpg differ diff --git a/illustrations/2026/11.jpg b/illustrations/2026/11.jpg new file mode 100644 index 0000000..7a72548 Binary files /dev/null and b/illustrations/2026/11.jpg differ diff --git a/illustrations/2026/12.jpg b/illustrations/2026/12.jpg new file mode 100644 index 0000000..67f7e0e Binary files /dev/null and b/illustrations/2026/12.jpg differ diff --git a/illustrations/2026/13.jpg b/illustrations/2026/13.jpg new file mode 100644 index 0000000..0abc661 Binary files /dev/null and b/illustrations/2026/13.jpg differ diff --git a/illustrations/2026/14.jpg b/illustrations/2026/14.jpg new file mode 100644 index 0000000..75e59f9 Binary files /dev/null and b/illustrations/2026/14.jpg differ diff --git a/illustrations/2026/15.jpg b/illustrations/2026/15.jpg new file mode 100644 index 0000000..b854fd5 Binary files /dev/null and b/illustrations/2026/15.jpg differ diff --git a/illustrations/2026/16.jpg b/illustrations/2026/16.jpg new file mode 100644 index 0000000..79210ad Binary files /dev/null and b/illustrations/2026/16.jpg differ diff --git a/illustrations/2026/17.jpg b/illustrations/2026/17.jpg new file mode 100644 index 0000000..445ef90 Binary files /dev/null and b/illustrations/2026/17.jpg differ diff --git a/illustrations/2026/18.jpg b/illustrations/2026/18.jpg new file mode 100644 index 0000000..76f3578 Binary files /dev/null and b/illustrations/2026/18.jpg differ diff --git a/illustrations/2026/19.jpg b/illustrations/2026/19.jpg new file mode 100644 index 0000000..c6d3976 Binary files /dev/null and b/illustrations/2026/19.jpg differ diff --git a/illustrations/2026/20.jpg b/illustrations/2026/20.jpg new file mode 100644 index 0000000..a247eb5 Binary files /dev/null and b/illustrations/2026/20.jpg differ diff --git a/illustrations/2026/21.jpg b/illustrations/2026/21.jpg new file mode 100644 index 0000000..a1e0814 Binary files /dev/null and b/illustrations/2026/21.jpg differ diff --git a/illustrations/2026/22.jpg b/illustrations/2026/22.jpg new file mode 100644 index 0000000..15d3d2d Binary files /dev/null and b/illustrations/2026/22.jpg differ diff --git a/illustrations/2026/23.jpg b/illustrations/2026/23.jpg new file mode 100644 index 0000000..b25bc9b Binary files /dev/null and b/illustrations/2026/23.jpg differ diff --git a/illustrations/2026/24.jpg b/illustrations/2026/24.jpg new file mode 100644 index 0000000..446a083 Binary files /dev/null and b/illustrations/2026/24.jpg differ diff --git a/illustrations/2026/25.jpg b/illustrations/2026/25.jpg new file mode 100644 index 0000000..7e251db Binary files /dev/null and b/illustrations/2026/25.jpg differ diff --git a/illustrations/2026/26.jpg b/illustrations/2026/26.jpg new file mode 100644 index 0000000..a184167 Binary files /dev/null and b/illustrations/2026/26.jpg differ diff --git a/illustrations/2026/27.jpg b/illustrations/2026/27.jpg new file mode 100644 index 0000000..7becc2c Binary files /dev/null and b/illustrations/2026/27.jpg differ diff --git a/illustrations/2026/28.jpg b/illustrations/2026/28.jpg new file mode 100644 index 0000000..f8c2c75 Binary files /dev/null and b/illustrations/2026/28.jpg differ diff --git a/illustrations/2026/29.jpg b/illustrations/2026/29.jpg new file mode 100644 index 0000000..ef56e65 Binary files /dev/null and b/illustrations/2026/29.jpg differ diff --git a/illustrations/2026/30.jpg b/illustrations/2026/30.jpg new file mode 100644 index 0000000..faebf65 Binary files /dev/null and b/illustrations/2026/30.jpg differ diff --git a/illustrations/2026/31.jpg b/illustrations/2026/31.jpg new file mode 100644 index 0000000..10b3ebd Binary files /dev/null and b/illustrations/2026/31.jpg differ diff --git a/illustrations/2026/32.jpg b/illustrations/2026/32.jpg new file mode 100644 index 0000000..c837c46 Binary files /dev/null and b/illustrations/2026/32.jpg differ diff --git a/illustrations/2026/33.jpg b/illustrations/2026/33.jpg new file mode 100644 index 0000000..e57ebb5 Binary files /dev/null and b/illustrations/2026/33.jpg differ diff --git a/illustrations/2026/34.jpg b/illustrations/2026/34.jpg new file mode 100644 index 0000000..e4af682 Binary files /dev/null and b/illustrations/2026/34.jpg differ diff --git a/illustrations/2026/35.jpg b/illustrations/2026/35.jpg new file mode 100644 index 0000000..002a819 Binary files /dev/null and b/illustrations/2026/35.jpg differ diff --git a/illustrations/2026/36.jpg b/illustrations/2026/36.jpg new file mode 100644 index 0000000..60a34c2 Binary files /dev/null and b/illustrations/2026/36.jpg differ diff --git a/illustrations/2026/37.jpg b/illustrations/2026/37.jpg new file mode 100644 index 0000000..f47d6c2 Binary files /dev/null and b/illustrations/2026/37.jpg differ diff --git a/illustrations/2026/38.jpg b/illustrations/2026/38.jpg new file mode 100644 index 0000000..ec02f24 Binary files /dev/null and b/illustrations/2026/38.jpg differ diff --git a/illustrations/2026/39.jpg b/illustrations/2026/39.jpg new file mode 100644 index 0000000..45d3534 Binary files /dev/null and b/illustrations/2026/39.jpg differ diff --git a/illustrations/2026/40.jpg b/illustrations/2026/40.jpg new file mode 100644 index 0000000..cbc189a Binary files /dev/null and b/illustrations/2026/40.jpg differ diff --git a/illustrations/2026/41.jpg b/illustrations/2026/41.jpg new file mode 100644 index 0000000..35ff92f Binary files /dev/null and b/illustrations/2026/41.jpg differ diff --git a/illustrations/2026/42.jpg b/illustrations/2026/42.jpg new file mode 100644 index 0000000..4aa0803 Binary files /dev/null and b/illustrations/2026/42.jpg differ diff --git a/illustrations/2026/43.jpg b/illustrations/2026/43.jpg new file mode 100644 index 0000000..40ec0de Binary files /dev/null and b/illustrations/2026/43.jpg differ diff --git a/illustrations/2026/44.jpg b/illustrations/2026/44.jpg new file mode 100644 index 0000000..7e32f4d Binary files /dev/null and b/illustrations/2026/44.jpg differ diff --git a/illustrations/2026/45.jpg b/illustrations/2026/45.jpg new file mode 100644 index 0000000..9c0d1a2 Binary files /dev/null and b/illustrations/2026/45.jpg differ diff --git a/illustrations/2026/46.jpg b/illustrations/2026/46.jpg new file mode 100644 index 0000000..bed3a05 Binary files /dev/null and b/illustrations/2026/46.jpg differ diff --git a/illustrations/2026/47.jpg b/illustrations/2026/47.jpg new file mode 100644 index 0000000..5e08183 Binary files /dev/null and b/illustrations/2026/47.jpg differ diff --git a/illustrations/2026/48.jpg b/illustrations/2026/48.jpg new file mode 100644 index 0000000..cfe99e0 Binary files /dev/null and b/illustrations/2026/48.jpg differ diff --git a/illustrations/2026/49.jpg b/illustrations/2026/49.jpg new file mode 100644 index 0000000..48a7937 Binary files /dev/null and b/illustrations/2026/49.jpg differ diff --git a/illustrations/2026/50.jpg b/illustrations/2026/50.jpg new file mode 100644 index 0000000..eb20519 Binary files /dev/null and b/illustrations/2026/50.jpg differ diff --git a/illustrations/2026/small/01.jpg b/illustrations/2026/small/01.jpg new file mode 100644 index 0000000..e36e571 Binary files /dev/null and b/illustrations/2026/small/01.jpg differ diff --git a/illustrations/2026/small/02.jpg b/illustrations/2026/small/02.jpg new file mode 100644 index 0000000..1d8cdf6 Binary files /dev/null and b/illustrations/2026/small/02.jpg differ diff --git a/illustrations/2026/small/03.jpg b/illustrations/2026/small/03.jpg new file mode 100644 index 0000000..d348c23 Binary files /dev/null and b/illustrations/2026/small/03.jpg differ diff --git a/illustrations/2026/small/04.jpg b/illustrations/2026/small/04.jpg new file mode 100644 index 0000000..e31b7e5 Binary files /dev/null and b/illustrations/2026/small/04.jpg differ diff --git a/illustrations/2026/small/05.jpg b/illustrations/2026/small/05.jpg new file mode 100644 index 0000000..d9c3bd2 Binary files /dev/null and b/illustrations/2026/small/05.jpg differ diff --git a/illustrations/2026/small/06.jpg b/illustrations/2026/small/06.jpg new file mode 100644 index 0000000..a5fda60 Binary files /dev/null and b/illustrations/2026/small/06.jpg differ diff --git a/illustrations/2026/small/07.jpg b/illustrations/2026/small/07.jpg new file mode 100644 index 0000000..033d5b2 Binary files /dev/null and b/illustrations/2026/small/07.jpg differ diff --git a/illustrations/2026/small/08.jpg b/illustrations/2026/small/08.jpg new file mode 100644 index 0000000..cfac463 Binary files /dev/null and b/illustrations/2026/small/08.jpg differ diff --git a/illustrations/2026/small/09.jpg b/illustrations/2026/small/09.jpg new file mode 100644 index 0000000..3ad6274 Binary files /dev/null and b/illustrations/2026/small/09.jpg differ diff --git a/illustrations/2026/small/10.jpg b/illustrations/2026/small/10.jpg new file mode 100644 index 0000000..b184d94 Binary files /dev/null and b/illustrations/2026/small/10.jpg differ diff --git a/illustrations/2026/small/11.jpg b/illustrations/2026/small/11.jpg new file mode 100644 index 0000000..8dd52c7 Binary files /dev/null and b/illustrations/2026/small/11.jpg differ diff --git a/illustrations/2026/small/12.jpg b/illustrations/2026/small/12.jpg new file mode 100644 index 0000000..f39d201 Binary files /dev/null and b/illustrations/2026/small/12.jpg differ diff --git a/illustrations/2026/small/13.jpg b/illustrations/2026/small/13.jpg new file mode 100644 index 0000000..33e5082 Binary files /dev/null and b/illustrations/2026/small/13.jpg differ diff --git a/illustrations/2026/small/14.jpg b/illustrations/2026/small/14.jpg new file mode 100644 index 0000000..5c6a7b3 Binary files /dev/null and b/illustrations/2026/small/14.jpg differ diff --git a/illustrations/2026/small/15.jpg b/illustrations/2026/small/15.jpg new file mode 100644 index 0000000..9161a4d Binary files /dev/null and b/illustrations/2026/small/15.jpg differ diff --git a/illustrations/2026/small/16.jpg b/illustrations/2026/small/16.jpg new file mode 100644 index 0000000..ce8fc14 Binary files /dev/null and b/illustrations/2026/small/16.jpg differ diff --git a/illustrations/2026/small/17.jpg b/illustrations/2026/small/17.jpg new file mode 100644 index 0000000..5cd91bd Binary files /dev/null and b/illustrations/2026/small/17.jpg differ diff --git a/illustrations/2026/small/18.jpg b/illustrations/2026/small/18.jpg new file mode 100644 index 0000000..3ccaf7c Binary files /dev/null and b/illustrations/2026/small/18.jpg differ diff --git a/illustrations/2026/small/19.jpg b/illustrations/2026/small/19.jpg new file mode 100644 index 0000000..15b2905 Binary files /dev/null and b/illustrations/2026/small/19.jpg differ diff --git a/illustrations/2026/small/20.jpg b/illustrations/2026/small/20.jpg new file mode 100644 index 0000000..abd9507 Binary files /dev/null and b/illustrations/2026/small/20.jpg differ diff --git a/illustrations/2026/small/21.jpg b/illustrations/2026/small/21.jpg new file mode 100644 index 0000000..77d3bfd Binary files /dev/null and b/illustrations/2026/small/21.jpg differ diff --git a/illustrations/2026/small/22.jpg b/illustrations/2026/small/22.jpg new file mode 100644 index 0000000..4c4fadd Binary files /dev/null and b/illustrations/2026/small/22.jpg differ diff --git a/illustrations/2026/small/23.jpg b/illustrations/2026/small/23.jpg new file mode 100644 index 0000000..8ecdc46 Binary files /dev/null and b/illustrations/2026/small/23.jpg differ diff --git a/illustrations/2026/small/24.jpg b/illustrations/2026/small/24.jpg new file mode 100644 index 0000000..92597b1 Binary files /dev/null and b/illustrations/2026/small/24.jpg differ diff --git a/illustrations/2026/small/25.jpg b/illustrations/2026/small/25.jpg new file mode 100644 index 0000000..c8aa5bc Binary files /dev/null and b/illustrations/2026/small/25.jpg differ diff --git a/illustrations/2026/small/26.jpg b/illustrations/2026/small/26.jpg new file mode 100644 index 0000000..9b11aaf Binary files /dev/null and b/illustrations/2026/small/26.jpg differ diff --git a/illustrations/2026/small/27.jpg b/illustrations/2026/small/27.jpg new file mode 100644 index 0000000..5831733 Binary files /dev/null and b/illustrations/2026/small/27.jpg differ diff --git a/illustrations/2026/small/28.jpg b/illustrations/2026/small/28.jpg new file mode 100644 index 0000000..818b6b8 Binary files /dev/null and b/illustrations/2026/small/28.jpg differ diff --git a/illustrations/2026/small/29.jpg b/illustrations/2026/small/29.jpg new file mode 100644 index 0000000..65832ad Binary files /dev/null and b/illustrations/2026/small/29.jpg differ diff --git a/illustrations/2026/small/30.jpg b/illustrations/2026/small/30.jpg new file mode 100644 index 0000000..1c44b88 Binary files /dev/null and b/illustrations/2026/small/30.jpg differ diff --git a/illustrations/2026/small/31.jpg b/illustrations/2026/small/31.jpg new file mode 100644 index 0000000..0823d9e Binary files /dev/null and b/illustrations/2026/small/31.jpg differ diff --git a/illustrations/2026/small/32.jpg b/illustrations/2026/small/32.jpg new file mode 100644 index 0000000..4271604 Binary files /dev/null and b/illustrations/2026/small/32.jpg differ diff --git a/illustrations/2026/small/33.jpg b/illustrations/2026/small/33.jpg new file mode 100644 index 0000000..6eeb274 Binary files /dev/null and b/illustrations/2026/small/33.jpg differ diff --git a/illustrations/2026/small/34.jpg b/illustrations/2026/small/34.jpg new file mode 100644 index 0000000..081216d Binary files /dev/null and b/illustrations/2026/small/34.jpg differ diff --git a/illustrations/2026/small/35.jpg b/illustrations/2026/small/35.jpg new file mode 100644 index 0000000..2a4aa83 Binary files /dev/null and b/illustrations/2026/small/35.jpg differ diff --git a/illustrations/2026/small/36.jpg b/illustrations/2026/small/36.jpg new file mode 100644 index 0000000..dacae4a Binary files /dev/null and b/illustrations/2026/small/36.jpg differ diff --git a/illustrations/2026/small/37.jpg b/illustrations/2026/small/37.jpg new file mode 100644 index 0000000..da0d953 Binary files /dev/null and b/illustrations/2026/small/37.jpg differ diff --git a/illustrations/2026/small/38.jpg b/illustrations/2026/small/38.jpg new file mode 100644 index 0000000..925fb1c Binary files /dev/null and b/illustrations/2026/small/38.jpg differ diff --git a/illustrations/2026/small/39.jpg b/illustrations/2026/small/39.jpg new file mode 100644 index 0000000..c8666b4 Binary files /dev/null and b/illustrations/2026/small/39.jpg differ diff --git a/illustrations/2026/small/40.jpg b/illustrations/2026/small/40.jpg new file mode 100644 index 0000000..a3b600d Binary files /dev/null and b/illustrations/2026/small/40.jpg differ diff --git a/illustrations/2026/small/41.jpg b/illustrations/2026/small/41.jpg new file mode 100644 index 0000000..f730dc0 Binary files /dev/null and b/illustrations/2026/small/41.jpg differ diff --git a/illustrations/2026/small/42.jpg b/illustrations/2026/small/42.jpg new file mode 100644 index 0000000..741a35f Binary files /dev/null and b/illustrations/2026/small/42.jpg differ diff --git a/illustrations/2026/small/43.jpg b/illustrations/2026/small/43.jpg new file mode 100644 index 0000000..de85420 Binary files /dev/null and b/illustrations/2026/small/43.jpg differ diff --git a/illustrations/2026/small/44.jpg b/illustrations/2026/small/44.jpg new file mode 100644 index 0000000..6380e4f Binary files /dev/null and b/illustrations/2026/small/44.jpg differ diff --git a/illustrations/2026/small/45.jpg b/illustrations/2026/small/45.jpg new file mode 100644 index 0000000..c3b679f Binary files /dev/null and b/illustrations/2026/small/45.jpg differ diff --git a/illustrations/2026/small/46.jpg b/illustrations/2026/small/46.jpg new file mode 100644 index 0000000..77add0e Binary files /dev/null and b/illustrations/2026/small/46.jpg differ diff --git a/illustrations/2026/small/47.jpg b/illustrations/2026/small/47.jpg new file mode 100644 index 0000000..23918f7 Binary files /dev/null and b/illustrations/2026/small/47.jpg differ diff --git a/illustrations/2026/small/48.jpg b/illustrations/2026/small/48.jpg new file mode 100644 index 0000000..1b37d92 Binary files /dev/null and b/illustrations/2026/small/48.jpg differ diff --git a/illustrations/2026/small/49.jpg b/illustrations/2026/small/49.jpg new file mode 100644 index 0000000..600a441 Binary files /dev/null and b/illustrations/2026/small/49.jpg differ diff --git a/illustrations/2026/small/50.jpg b/illustrations/2026/small/50.jpg new file mode 100644 index 0000000..4872d96 Binary files /dev/null and b/illustrations/2026/small/50.jpg differ diff --git a/misc/ci/Dockerfile b/misc/ci/Dockerfile new file mode 100644 index 0000000..0e4da0c --- /dev/null +++ b/misc/ci/Dockerfile @@ -0,0 +1,7 @@ +FROM alpine:3.21 + +RUN apk add nodejs npm jq bash curl ca-certificates python3 build-base + +RUN npm install -g xml2json + +SHELL ["/bin/bash"] \ No newline at end of file diff --git a/misc/script/resize-illustrations.sh b/misc/script/resize-illustrations.sh new file mode 100755 index 0000000..fab80b7 --- /dev/null +++ b/misc/script/resize-illustrations.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +FILES=$(find illustrations -maxdepth 2 -name '*.jpg' -printf '%p ') + +for f in $FILES; do + small_dir=$(dirname $f)/small + mkdir -p "$small_dir" + magick convert -resize 75% "$f" "$small_dir/$(basename $f)" +done