2 # SPDX-FileCopyrightText: 2024 Julien Moutinho (adh14) <julm+rezine@sourcephile.fr>
3 # SPDX-License-Identifier: AGPL-3.0-or-later
4 # shellcheck disable=SC2034
5 # shellcheck disable=SC2046
6 # shellcheck disable=SC2086
7 # shellcheck disable=SC2119
8 # shellcheck disable=SC2154
13 # FIXME: host it on rezine.org?
14 rfcGitweb
="https://git.sourcephile.fr/julm/$rfcRepo.git"
18 rm -rf "${removeAtExit[@]}"
23 rfcRoot
=$(realpath --relative-to . "${0%/*}"/..)
24 rfcDir
=$(realpath --relative-to "$rfcRoot" "$rfcDir")
25 rfcBranch
=$(realpath --relative-to "$rfcRoot"/rfcs "$rfcDir")
26 rfcYearAdvocacy
=$(git log -1 --pretty=%cd --date=format:%Y "$rfcDir/advocacy.md")
27 rfcDateAdvocacy
=$(git log -1 --pretty=%cd --date=short "$rfcDir/advocacy.md")
28 rfcDateCriticisms
=$(git log -1 --pretty=%cd --date=short "$rfcDir/criticisms.yaml")
32 local advocacyLatestCommit criticismsLatestCommit
33 local rfcTagAdvocacyOld rfcTagCriticismsOld
34 rfcLatestCommit
=$(git rev-list --max-count=1 HEAD -- "$rfcDir" :'!*.html' :'!*.csl.json')
35 advocacyLatestCommit
=$(git rev-list --max-count=1 HEAD -- "$rfcDir/advocacy.html")
36 criticismsLatestCommit
=$(git rev-list --max-count=1 HEAD -- "$rfcDir/criticisms.html")
37 if test "$advocacyLatestCommit" != "$rfcLatestCommit" ||
38 test "$criticismsLatestCommit" != "$rfcLatestCommit"
40 advocacyLatestCommit
=$rfcLatestCommit
41 criticismsLatestCommit
=$rfcLatestCommit
43 rfcTagAdvocacyOld
="$(git describe --tags "$advocacyLatestCommit")" || true
44 rfcTagCriticismsOld
="$(git describe --tags "$criticismsLatestCommit")" || true
45 if test "${rfcTagAdvocacyOld#"${rfcBranch}v"}" != "$rfcTagAdvocacyOld"
46 then IFS
=psvc
- read -r _ _num rfcRevAdvocacy _rfcRevCriticisms rfcRevWIP
<<<"$rfcTagAdvocacyOld"
47 else rfcRevAdvocacy
=0; rfcTagAdvocacyOld
=init
49 if test "${rfcTagCriticismsOld#"${rfcBranch}v"}" != "$rfcTagCriticismsOld"
50 then IFS
=psvc
- read -r _ _num _rfcRevAdvocacy rfcRevCriticisms rfcRevWIP
<<<"$rfcTagCriticismsOld"
51 else rfcRevCriticisms
=0; rfcTagCriticismsOld
=init
53 rfcBranchRevision
="${rfcBranch}v${rfcRevAdvocacy}"
54 rfcTag
="${rfcBranchRevision}c${rfcRevCriticisms}${rfcRevWIP:+-$rfcRevWIP}"
55 echo rfcRevCriticisms
="${rfcRevCriticisms}"
56 echo rfcWIP
="${rfcRevWIP}"
57 if test -z "$rfcRevWIP"
58 then rfcTagOrMain
=$rfcTag
59 else rfcTagOrMain
=main
64 mkdir -p "$rfcRoot/rfcs/$rfcBranch/citation"
65 pandoc
>"$rfcRoot/rfcs/$rfcBranch/citation/v${rfcRevAdvocacy}.csl.json" \
68 --template "$rfcRoot/styles/rfc.csl.json" \
76 --template "$rfcRoot"/styles
/rfc.metadata.yaml \
78 if test ! "${rfcNoAdvocacy:+set}"; then
80 cat "$rfcRoot/styles/rfc.information.md"
82 cat "$rfcDir"/advocacy.md
85 if test ! "${rfcNoThanks:+set}"; then
89 --template "$rfcRoot"/styles
/rfc.thanks.md \
93 if test ! "${rfcNoHistory:+set}"; then
97 --template "$rfcRoot"/styles
/rfc.
history.md \
98 "$rfcDir"/history.yaml
101 if test ! "${rfcNoCriticisms:+set}"; then
105 --template "$rfcRoot"/styles
/rfc.criticisms.md \
106 "$rfcDir"/criticisms.yaml
109 cat "$rfcRoot"/styles
/rfc.references.md
113 printf ' --metadata %s' \
114 rfcBranch
="$rfcBranch" \
115 rfcDateAdvocacy
="$rfcDateAdvocacy" \
116 rfcDateCriticisms
="$rfcDateCriticisms" \
118 rfcDomain
="$rfcDomain" \
119 rfcGitweb
="$rfcGitweb" \
123 rfcBranchRevision
="$rfcBranchRevision" \
124 rfcRevAdvocacy
="$rfcRevAdvocacy" \
125 rfcRevisionAdvocacy
="v$rfcRevAdvocacy" \
126 rfcRevisionCriticisms
="c$rfcRevCriticisms" \
128 rfcTagOrMain
="$rfcTagOrMain" \
129 rfcYearAdvocacy
="$rfcYearAdvocacy"
133 local sourceFile metaFile
134 sourceFile
=$(mktemp --suffix ".md")
135 metaFile
=$(mktemp --suffix ".md")
136 removeAtExit
+=("$sourceFile" "$metaFile")
137 rfcSource
>"$sourceFile"
138 if test ! "${rfcNoAdvocacy:+set}" && test ! "${rfcNoCriticisms:+set}"; then
144 --template "$sourceFile" \
150 pandoc
--from markdown
+emoji
--to plain \
152 --csl "$rfcRoot"/styles
/rfc.csl \
153 $
(printf " --bibliography %s" "$rfcRoot"/refs
/*.json \
154 "$rfcRoot"/rfcs
/*/citation
/*.csl.json
) \
155 --lua-filter "$rfcRoot"/styles
/rfc.lua \
156 --variable lang
=fr
-FR \
162 pandoc
--from markdown
+emoji
--to markdown
+emoji \
163 --table-of-contents \
167 --csl "$rfcRoot"/styles
/rfc.csl \
168 $
(printf " --bibliography %s" "$rfcRoot"/refs
/*.json \
169 "$rfcRoot"/rfcs
/*/citation
/*.csl.json
) \
170 --lua-filter "$rfcRoot"/styles
/rfc.lua \
171 --variable lang
=fr
-FR \
177 pandoc
--from markdown
+emoji
--to html5 \
180 --include-in-header "$rfcRoot"/styles
/rfc.header.html \
181 --table-of-contents \
185 --csl "$rfcRoot"/styles
/rfc.csl \
186 $
(printf " --bibliography %s" "$rfcRoot"/refs
/*.json \
187 "$rfcRoot"/rfcs
/*/citation
/*.csl.json
) \
188 --lua-filter "$rfcRoot"/styles
/rfc.lua \
189 --variable lang
=fr
-FR \
195 pandoc
--from markdown
+emoji
--to pdf \
196 --pdf-engine lualatex \
197 --include-in-header "$rfcRoot"/styles
/rfc.header.tex \
200 --table-of-contents \
204 --csl "$rfcRoot"/styles
/rfc.csl \
205 $(printf " --bibliography %s" "$rfcRoot"/refs/*.json) \
206 --lua-filter "$rfcRoot"/styles
/rfc.lua \
207 --variable colorlinks
=true \
208 --variable lang
=fr
-FR \
209 --variable links
-as-notes=true \
215 git
diff --exit-code -- "$rfcDir" :'!*.html' :'!*.csl.json' ||
217 cat >&2 <<<"ERROR: you have changes to commit"
221 : "Check if \$rfcRevAdvocacy must be increased."
222 rfcNoCriticisms="set" \
225 rfcHTML -o "$rfcDir"/advocacy.html
226 git add "$rfcDir"/advocacy.html
227 rfcRevAdvocacyIncrement=0
228 if ! git diff --cached --quiet "$rfcDir"/advocacy.html; then
229 rfcRevAdvocacyIncrement=1
230 # Note that $rfcRevCriticisms is not reset:
231 # criticisms have their own independant revisions
232 # because, in practice, criticisms to an old $rfcRevAdvocacy
233 # can be received and added after a new $rfcRevAdvocacy has been tagged.
236 : "Check if \$rfcRevCriticisms must be increased."
238 rfcNoAdvocacy="set" \
241 rfcHTML -o "$rfcDir"/criticisms.html
242 git add "$rfcDir"/criticisms.html
243 rfcRevCriticismsIncrement=0
244 if ! git diff --cached --quiet "$rfcDir"/criticisms.html; then
245 rfcRevCriticismsIncrement=1
248 if test "$rfcRevAdvocacyIncrement" -gt 0 ||
249 test "$rfcRevCriticismsIncrement" -gt 0
251 rfcRevAdvocacy=$((rfcRevAdvocacy + rfcRevAdvocacyIncrement))
252 rfcRevCriticisms=$((rfcRevCriticisms + rfcRevCriticismsIncrement))
253 rfcBranchRevision="${rfcBranch}v$rfcRevAdvocacy"
254 rfcTag="${rfcBranchRevision}c$rfcRevCriticisms"
255 rfcNoCriticisms="set" \
258 rfcHTML -o "$rfcDir"/advocacy.html
260 rfcNoAdvocacy="set" \
263 rfcHTML -o "$rfcDir"/criticisms.html
264 rfcHTML -o "$rfcDir"/index.html
265 #rfcPDF -o "$rfcDir/${rfcRepo}-${rfcBranch}".pdf
266 git add "$rfcDir"/{advocacy,criticisms,index}.html
267 git add "$rfcDir/citation/v${rfcRevAdvocacy}.csl.json"
268 #git add "$rfcDir/${rfcRepo}-${rfcBranch}".pdf
269 git diff --cached --quiet ||
270 git commit -m "$rfcBranch: v$rfcRevAdvocacy c$rfcRevCriticisms"
271 git tag --force --sign --message "${rfcOrga} RFC${rfcTag}" "$rfcTag"