Skip to content

Commit 44cf756

Browse files
authored
Merge pull request #669 from perladvent/archive-2025
chore: archive 2025 and prepare 2026 scaffold
2 parents 7c28711 + a9f8905 commit 44cf756

13 files changed

Lines changed: 194 additions & 21 deletions

File tree

.github/pull_request_template.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ shared. Adding an image is by no means required and you should feel free to
77
ignore this message entirely. However, if you'd like to add an image, it's as
88
simple as:
99

10-
* Adding the image to the `2025/share/static` folder like `2025/share/static/some-graphic.png`
10+
* Adding the image to the `2026/share/static` folder like `2026/share/static/some-graphic.png`
1111
* Including the image as HTML in your article
1212

1313
The HTML would look like:

2026/advent.ini

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
title = Perl Advent Calendar 2026
2+
tagline = twenty-four merry days of Perl
3+
year = 2026
4+
end_date = 2026-12-24
5+
uri = https://perladvent.org/2026/
6+
category = Perl
7+
editor = PerlAdvent Org
8+
default_author = Mark Fowler <mark@twoshortplanks.com>
9+
10+
article_dir = articles
11+
share_dir = share
12+
13+
[Palette]
14+
generic00 = #fff
15+
generic01 = #d00
16+
17+
bodyBG = #333
18+
19+
feedLinkFG= #0a0
20+
titleFG = genericWhite
21+
22+
taglineBG = #fff
23+
taglineFG = #a00
24+
25+
codeBG = genericBlack
26+
codeFG = genericWhite
27+
codeNumbersBG = #800
28+
codeNumbersBorder = genericWhite

2026/articles/.gitkeep

Whitespace-only changes.

2026/incoming/.gitkeep

Whitespace-only changes.

2026/share/static/.gitkeep

Whitespace-only changes.

ANNUAL-UPDATES.md

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,67 @@
11
# Preparing for a New Calendar Year
22

3-
Run the following script:
3+
Run the following steps once the previous December's articles are complete
4+
(typically in January or February):
5+
6+
## 1. Archive the previous year
7+
8+
Add the previous year's topics to `archives.yaml`:
9+
10+
```bash
11+
./year2yaml YYYY
12+
```
13+
14+
For example, after the 2025 calendar:
15+
16+
```bash
17+
./year2yaml 2025
18+
```
19+
20+
`year2yaml` reads the `Topic:` header from each article and appends a new
21+
section to `archives.yaml`. Entries are classified as `module` (linked to
22+
MetaCPAN) when the topic name contains `::`, and as `topic` otherwise.
23+
Single-word CPAN modules without `::` in their name (e.g. `LWP`, `Moose`)
24+
will be classified as `topic` — edit `archives.yaml` by hand afterwards if
25+
you want those to carry a MetaCPAN link.
26+
27+
Comma-separated topics on a single `Topic:` line are split into individual
28+
entries automatically. Space-separated module names are also split, provided
29+
every space-delimited token contains `::`.
30+
31+
## 2. Prepare the new year's scaffold
432

533
```bash
634
./script/prepare-new-year.sh
735
```
36+
37+
This script:
38+
39+
* Creates `YYYY/advent.ini` (copied from the previous year with the year
40+
updated throughout)
41+
* Updates year references in `in-season.html`, `README.md`,
42+
`.github/pull_request_template.md`, `script/build-site.sh`, and
43+
`script/stats.sh`
44+
45+
After the script runs, create the empty directories that the build system
46+
expects and add `.gitkeep` files so they are tracked by git:
47+
48+
```bash
49+
NEW_YEAR=$(date +%Y)
50+
mkdir -p "$NEW_YEAR/articles" "$NEW_YEAR/incoming" "$NEW_YEAR/share/static"
51+
touch "$NEW_YEAR/articles/.gitkeep" \
52+
"$NEW_YEAR/incoming/.gitkeep" \
53+
"$NEW_YEAR/share/static/.gitkeep"
54+
```
55+
56+
## 3. Review and commit
57+
58+
Check the updated files, then commit everything:
59+
60+
```bash
61+
git add archives.yaml year2yaml \
62+
"$NEW_YEAR/" \
63+
in-season.html README.md \
64+
.github/pull_request_template.md \
65+
script/build-site.sh script/stats.sh
66+
git commit -m "chore: archive PREV_YEAR and prepare scaffold for NEW_YEAR"
67+
```

CLAUDE.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,27 @@ perl script/render-incoming.pl
8181
http_this --autoindex out/2025
8282
```
8383

84-
### Annual Maintenance (run in January)
84+
### Annual Maintenance (run in January/February)
85+
86+
See `ANNUAL-UPDATES.md` for the full step-by-step guide. In brief:
87+
8588
```bash
86-
# Add previous year to archives database
87-
./year2yaml 2024
89+
# 1. Add previous year to archives database
90+
./year2yaml 2025
8891

89-
# Prepare for new year
92+
# 2. Create new year scaffold and update year references site-wide
9093
./script/prepare-new-year.sh
94+
95+
# 3. Create empty directories tracked by git
96+
NEW_YEAR=$(date +%Y)
97+
mkdir -p "$NEW_YEAR/articles" "$NEW_YEAR/incoming" "$NEW_YEAR/share/static"
98+
touch "$NEW_YEAR/articles/.gitkeep" "$NEW_YEAR/incoming/.gitkeep" "$NEW_YEAR/share/static/.gitkeep"
9199
```
92100

101+
`year2yaml` classifies topics as `module` (links to MetaCPAN) when the topic
102+
contains `::`, and as `topic` otherwise. Review `archives.yaml` afterwards for
103+
single-word CPAN modules that lack `::` (e.g. `LWP`, `Moose`).
104+
93105
## Article Format (POD)
94106

95107
Articles are written in POD (Plain Old Documentation) with these required headers:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ cpm install -g WWW::AdventCalendar App::HTTPThis
5959
Then build all recent calendars
6060

6161
```bash
62-
for year in $(seq 2011 2025); do cd $year && advcal -c advent.ini -o `pwd` && cd ..; done
62+
for year in $(seq 2011 2026); do cd $year && advcal -c advent.ini -o `pwd` && cd ..; done
6363
```
6464

6565
### 3. Test (locally)

archives.yaml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,3 +1236,62 @@
12361236
- { "topic" : "Camel" }
12371237
25:
12381238
- { "topic" : "Merry Christmas, bless us, everyone" }
1239+
1240+
1241+
2025:
1242+
01:
1243+
- { "topic" : "Perl IDE Developer Survey" }
1244+
02:
1245+
- { "module" : "App::BlurFill" }
1246+
03:
1247+
- { "topic" : "idi" }
1248+
04:
1249+
- { "topic" : "System Security Auditing" }
1250+
05:
1251+
- { "topic" : "LWP" }
1252+
- { "topic" : "JSON" }
1253+
- { "topic" : "constant" }
1254+
06:
1255+
- { "module" : "Mojolicious::Lite" }
1256+
- { "topic" : "JSON" }
1257+
- { "topic" : "HTTPie" }
1258+
07:
1259+
- { "module" : "Storage::Abstract" }
1260+
08:
1261+
- { "module" : "Data::Random::Contact" }
1262+
- { "module" : "Getopt::Long" }
1263+
09:
1264+
- { "module" : "Test2::Plugin::SubtestFilter" }
1265+
10:
1266+
- { "topic" : "PAGI" }
1267+
11:
1268+
- { "topic" : "Art with Perl" }
1269+
13:
1270+
- { "topic" : "No Estimates" }
1271+
14:
1272+
- { "topic" : "Critical Chain Project Management" }
1273+
15:
1274+
- { "module" : "Mojolicious::Plugin::Mount" }
1275+
16:
1276+
- { "topic" : "OpenTelemetry" }
1277+
- { "topic" : "Observability" }
1278+
17:
1279+
- { "topic" : "Moose" }
1280+
18:
1281+
- { "module" : "App::Transpierce" }
1282+
19:
1283+
- { "topic" : "The Underbar podcast" }
1284+
20:
1285+
- { "topic" : "OpenQA" }
1286+
- { "topic" : "Open Build Service" }
1287+
21:
1288+
- { "topic" : "Source code" }
1289+
22:
1290+
- { "topic" : "bitvectors" }
1291+
23:
1292+
- { "module" : "Imager::QRCode" }
1293+
24:
1294+
- { "module" : "Audio::Nama" }
1295+
- { "topic" : "Tickit" }
1296+
- { "module" : "Tie::Simple" }
1297+
- { "module" : "Parse::RecDescent" }

in-season.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<!-- use this redirect splash screen in December and January -->
22
<html>
33
<head>
4-
<meta http-equiv="refresh" content="0; URL=2025" />
4+
<meta http-equiv="refresh" content="0; URL=2026" />
55
</head>
66
<body>
77
</body>

0 commit comments

Comments
 (0)