Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
22e192e
feat: build authors from yaml header
lubianat Jul 1, 2026
6bac583
test setup for rfc 9 comment 5
lubianat Jul 1, 2026
89fb3ec
chore: use short ORCID version
lubianat Jul 6, 2026
f056f6c
rename directive to document_authors
lubianat Jul 6, 2026
a5bc52c
add YML front to rfc 9 docs
lubianat Jul 6, 2026
cb549e4
fix build for the rfc status page
lubianat Jul 6, 2026
462ff21
start draft on representation of reviews
lubianat Jul 6, 2026
538195a
merge main, add rfc 9 - 6
lubianat Jul 6, 2026
f698b99
Merge branch 'main' into rfc_yaml_header
lubianat Aug 11, 2026
cf12dec
merge main into branch
lubianat Aug 11, 2026
9fe3106
Add frontmatter and anchor recommendations to templates
lubianat Aug 11, 2026
e6ddd01
Update again review templates and start work on RFC 4
lubianat Aug 11, 2026
d3b6919
Update RFC 4 comment2; add support for e-mail rendering
lubianat Aug 11, 2026
5eea111
Add authors to reviews and responses for RFC 4
lubianat Aug 11, 2026
f7b8b94
update the rfc_status directive
lubianat Aug 20, 2026
4e08ef9
update metadata for rfc3
lubianat Aug 20, 2026
6d695ea
Merge branch 'main' of github.com:ome/ngff into rfc_yaml_header
lubianat Sep 7, 2026
322d1b3
add checks before rendering status
lubianat Sep 8, 2026
f1a1b0c
add changes in batch based on previous examples
lubianat Sep 8, 2026
a93ff33
Add Matthew's review (received via e-mail)
lubianat Sep 8, 2026
5379bea
fix inconsistencies found during manual review
lubianat Sep 8, 2026
3b381d2
auto update listing.csv based on status
lubianat Sep 8, 2026
c87b340
add status on individual RFCs
lubianat Sep 9, 2026
2339ada
manually change status notes so they are consistent
lubianat Sep 9, 2026
2ad5d41
add linkml schema and validation code for the yaml front matter
lubianat Sep 9, 2026
97d071a
update schema for ORCID
lubianat Sep 9, 2026
e4ce2bc
fix date validation
lubianat Sep 9, 2026
f610594
Merge branch 'main' of github.com:ome/ngff into rfc_yaml_header
lubianat Sep 9, 2026
ce13578
update front matter and tag
lubianat Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/rfc-front-matter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: "Validate RFC front matter"

on:
workflow_dispatch:
push:
branches: ["main"]
pull_request:
branches: ["main"]
paths:
- "rfc/**"
- ".github/workflows/rfc-front-matter.yml"

concurrency:
group: rfc-front-matter-${{ github.ref }}
cancel-in-progress: true

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1

- uses: actions/setup-python@v5
with:
python-version: "3.13"

- name: Install dependencies
run: pip install linkml pyyaml

- name: Validate against rfc/schema/front_matter.yaml
run: python rfc/schema/validate.py
92 changes: 92 additions & 0 deletions _ext/document_authors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import yaml
from docutils import nodes
from docutils.parsers.rst import Directive

ORCID_ICON = "https://orcid.org/assets/vectors/orcid.logo.icon.svg"
GITHUB_ICON = "https://github.githubassets.com/favicons/favicon.svg"
EMAIL_ICON = "https://raw.githubusercontent.com/twbs/icons/main/icons/envelope-fill.svg"


def _icon_link(uri, src, alt):
"""A hyperlink wrapping a small inline image."""
ref = nodes.reference("", "", refuri=uri)
img = nodes.image(
uri=src,
alt=alt,
classes=["rfc-author-icon"],
)
ref += img
return ref


class DocumentAuthors(Directive):
def run(self):
env = self.state.document.settings.env
src = env.doc2path(env.docname)
with open(src, encoding="utf-8") as f:
text = f.read()

parts = text.split("---", 2)
if len(parts) < 3:
raise self.error("rfc-authors: no YAML front matter found")
meta = yaml.safe_load(parts[1]) or {}

authors = meta.get("authors", [])
if not authors:
raise self.error("rfc-authors: no 'authors' in front matter")

# Number unique affiliations in first-seen order
affils, order = {}, []
for a in authors:
aff = a.get("affiliation")
if aff and aff not in affils:
order.append(aff)
affils[aff] = len(order)

para = nodes.paragraph(classes=["rfc-authors"])
for i, a in enumerate(authors):
if i:
para += nodes.Text(" and " if i == len(authors) - 1 else ", ")

para += nodes.Text(a["name"])

aff = a.get("affiliation")
if aff:
para += nodes.superscript(text=str(affils[aff]))

orcid = a.get("orcid")
if orcid:
uri = (
orcid
if str(orcid).startswith("http")
else f"https://orcid.org/{orcid}"
)
para += nodes.Text(" ")
para += _icon_link(uri, ORCID_ICON, "ORCID")

gh = a.get("github")
if gh:
uri = gh if str(gh).startswith("http") else f"https://github.com/{gh}"
para += nodes.Text(" ")
para += _icon_link(uri, GITHUB_ICON, "GitHub")

email = a.get("email")
if email:
uri = email if str(email).startswith("mailto:") else f"mailto:{email}"
para += nodes.Text(" ")
para += _icon_link(uri, EMAIL_ICON, "Email")

result = [para]

for aff in order:
p = nodes.paragraph(classes=["rfc-affiliation"])
p += nodes.superscript(text=str(affils[aff]))
p += nodes.Text(" " + aff)
result.append(p)

return result


def setup(app):
app.add_directive("document-authors", DocumentAuthors)
return {"parallel_read_safe": True, "parallel_write_safe": True}
Loading
Loading