Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
62f5a40
style: add builder for releaselist.
stevenhua0320 Nov 3, 2025
82aa55b
chore: add news item.
stevenhua0320 Nov 3, 2025
b34f33d
style: add ReleaselistBuilder in builder.py
stevenhua0320 Nov 3, 2025
932db62
[pre-commit.ci] auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 3, 2025
d899446
chore: Fix spelling issue
stevenhua0320 Nov 3, 2025
7e44307
chore: change filter for software, need more discussion for this.
stevenhua0320 Nov 3, 2025
53fe450
chore: change typo for ReleaseListBuilder
stevenhua0320 Nov 3, 2025
a60cb79
fix: fix iterator name to make compatible.
stevenhua0320 Nov 3, 2025
c158e64
chore: change iterator to sof
stevenhua0320 Nov 3, 2025
ba232d7
fix: change get date level from release level.
stevenhua0320 Nov 6, 2025
7840676
style: add program_description to compatible to output template, add …
stevenhua0320 Nov 7, 2025
610ebfa
[pre-commit.ci] auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 7, 2025
402223d
chore: change typo for correction of pre-commit
stevenhua0320 Nov 7, 2025
f3ccd01
feat: Add filter for releasebuilder by active status, release type, a…
stevenhua0320 Nov 10, 2025
a478a72
[pre-commit.ci] auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 10, 2025
ca239ff
fix: change variable and function argument to make it right
stevenhua0320 Nov 11, 2025
fc64966
[pre-commit.ci] auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 11, 2025
7df50f3
fix: change latex render level in releaselistbuilder and add releasel…
stevenhua0320 Nov 11, 2025
2b15147
fix: change format of releaselist.tex
stevenhua0320 Nov 11, 2025
05c72d5
[pre-commit.ci] auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 11, 2025
ae7ef2e
fix: correctly render the tex file, next step fix error.
stevenhua0320 Nov 19, 2025
7412568
fix: match latex build with the test output template.
stevenhua0320 Nov 19, 2025
5e413c6
Merge branch 'main' into relaselistbuilder
stevenhua0320 Nov 19, 2025
d7cb793
Fix: capitalize letter to pass test
stevenhua0320 Nov 19, 2025
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
23 changes: 23 additions & 0 deletions news/releasebuilder.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
**Added:**

* Add `ReleaseListBuilder` functionality, filter criteria

**Changed:**

* <news item>

**Deprecated:**

* <news item>

**Removed:**

* <news item>

**Fixed:**

* <news item>

**Security:**

* <news item>
2 changes: 2 additions & 0 deletions src/regolith/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from regolith.builders.publistbuilder import PubListBuilder
from regolith.builders.readinglistsbuilder import ReadingListsBuilder
from regolith.builders.reimbursementbuilder import ReimbursementBuilder
from regolith.builders.releaselistbuilder import ReleaseListBuilder
from regolith.builders.resumebuilder import ResumeBuilder

BUILDERS = {
Expand All @@ -35,6 +36,7 @@
"postdocad": PostdocadBuilder,
"preslist": PresListBuilder,
"publist": PubListBuilder,
"releaselist": ReleaseListBuilder,
"reading-lists": ReadingListsBuilder,
"reimb": ReimbursementBuilder,
"recent-collabs": RecentCollaboratorsBuilder,
Expand Down
77 changes: 77 additions & 0 deletions src/regolith/builders/releaselistbuilder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"""Builder for software release lists."""

from regolith.builders.basebuilder import LatexBuilderBase
from regolith.fsclient import _id_key
from regolith.sorters import position_key
from regolith.stylers import month_fullnames, sentencecase
from regolith.tools import all_docs_from_collection, filter_software, group_member_ids


class ReleaseListBuilder(LatexBuilderBase):
"""Build list of released software from database entries."""

btype = "releaselist"
needed_colls = ["groups", "people", "grants", "software", "contacts"]

def construct_global_ctx(self):
"""Constructs the global context."""
super().construct_global_ctx()
gtx = self.gtx
rc = self.rc
gtx["people"] = sorted(
all_docs_from_collection(rc.client, "people"),
key=position_key,
reverse=True,
)
gtx["contacts"] = sorted(
all_docs_from_collection(rc.client, "contacts"),
key=position_key,
reverse=True,
)
gtx["grants"] = sorted(all_docs_from_collection(rc.client, "grants"), key=_id_key)
gtx["groups"] = sorted(all_docs_from_collection(rc.client, "groups"), key=_id_key)
gtx["software"] = sorted(all_docs_from_collection(rc.client, "software"), key=_id_key)
gtx["all_docs_from_collection"] = all_docs_from_collection
gtx["float"] = float
gtx["str"] = str
gtx["zip"] = zip

def latex(self):
"""Render latex template."""
everybody = self.gtx["people"] + self.gtx["contacts"]
for group in self.gtx["groups"]:
grp = group["_id"]
grpmember_ids = group_member_ids(self.gtx["people"], grp)
for member in grpmember_ids:
if self.rc.people:
if member not in self.rc.people:
continue
progclean = filter_software(everybody, self.gtx["software"], member)

if len(progclean) > 0:
progclean = sorted(
progclean,
key=lambda k: max(release["release_date"] for release in k["release"]),
reverse=True,
)
outfile = "software-report-" + member
pi = [person for person in self.gtx["people"] if person["_id"] == member][0]
self.render(
"releaselist.tex",
outfile + ".tex",
pi=pi,
software=progclean,
sentencecase=sentencecase,
monthstyle=month_fullnames,
)
self.env.trim_blocks = True
self.env.lstrip_blocks = True
# self.render(
# "releaselist.txt",
# outfile + ".txt",
# pi=pi,
# software=progclean,
# sentencecase=sentencecase,
# monthstyle=month_fullnames,
# )
# self.pdf(outfile)
44 changes: 24 additions & 20 deletions src/regolith/exemplars.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,6 @@
"title": "My Vision",
"year": 2015
},
"software": {
"_id": "unique-package-id",
"active": true,
"url": "https://github.com/diffpy/diffpy.utils",
"grants": ["dmref15", "SymPy-1.1"],
"groups": ["ergs"]
},
"citations": [
{
"_id": "meurer2016sympy",
Expand Down Expand Up @@ -2178,13 +2171,14 @@
"software": [
{
"_id": "diffpy.utils",
"groups": ["xrd"],
"groups": ["aeinstein_grp"],
"active": true,
"org_name": "diffpy",
"repo_name": "diffpy.utils",
"platform_name": "Github",
"grants": ["NSF Funding"],
"author": ["Simon Billinge", "Sanjoon Bob Lee", "Zhiming Xu", "Tieqiong Zhang"],
"program_description": "General utilities for analyzing diffraction data",
"author": ["Sanjoon Bob Lee", "Zhiming Xu", "Tieqiong Zhang", "ANTHONY SCOPATZ"],
"release": [
{
"major": 3,
Expand All @@ -2193,24 +2187,25 @@
"release_type": "major",
"release_date": "2025-10-25",
"summary": "Python 3.14 and something else",
"changes": ["Deprecated python2 feature.",
"Changed to scikit-packaged standard.",
"Add some functionality.",
"Modify existing function to make convenient."
"changes": ["Deprecated Python 2 feature",
"Changed to scikit-packaged standard",
"Add some functionality",
"Modify existing function to make convenient"
],
"release_id": "3.1.0"
}
]
},
{
"_id": "diffpy.srxplanar",
"groups": ["billingegroup"],
"groups": ["aeinstein_grp"],
"active": true,
"author": ["Xiaohao Yang", "Rundong Hua","Zhiming Xu", "Simon Billinge"],
"author": ["Xiaohao Yang", "Rundong Hua", "Zhiming Xu", "ANTHONY SCOPATZ"],
"org_name": "diffpy",
"repo_name": "diffpy.srxplanar",
"platform_name": "Github",
"grants": ["NSF Funding"],
"program_description": "2D diffraction image integration using non splitting pixel algorithm.",
"release": [
{
"major": 1,
Expand All @@ -2237,13 +2232,22 @@
},
{
"_id": "diffpy.distanceprinter",
"groups": ["billingegroup"],
"groups": [
"aeinstein_grp"
],
"active": false,
"org_name": "diffpy",
"repo_name": "diffpy.distanceprinter",
"platform_name": "Github",
"grants": ["NSF Funding"],
"author": ["Xiaohao Yang", "Dasun Abeykoon", "Simon Billinge"],
"grants": [
"NSF Funding"
],
"program_description": "Distance Printer, calculate the inter atomic distances. Part of xPDFsuite",
"author": [
"Xiaohao Yang",
"Dasun Abeykoon",
"ANTHONY SCOPATZ"
],
"release": [
{
"major": 0,
Expand All @@ -2252,8 +2256,8 @@
"release_type": "minor",
"release_date": "2025-10-26",
"summary": "Python 3.14 and something else",
"changes": ["Change package to scikit-package level-5 standard."],
"release_id": "0.1.0"
"changes": ["Python 3.14 and something else"],
"release_id": "1.0.0"
}
]
}
Expand Down
5 changes: 5 additions & 0 deletions src/regolith/schemas.json
Original file line number Diff line number Diff line change
Expand Up @@ -2956,6 +2956,11 @@
"required": true,
"type": "list"
},
"program_description": {
"description": "The short description of the software.",
"required": true,
"type": "string"
},
"release": {
"description": "The release information of the software.",
"required": true,
Expand Down
49 changes: 49 additions & 0 deletions src/regolith/templates/releaselist.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
\documentclass[prl,tighten,amsmath,amssymb,floatfix]{revtex4-1}
\usepackage{graphicx}
\usepackage{times}
\usepackage{booktabs,dcolumn}
\usepackage{siunitx}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{enumitem}

\begin{document}

{% raw %}
\noindent
\colorbox{gray!40}{%
\begin{tabular*}{7in}{l@{\extracolsep{\fill}}r}
{% endraw %}
\textbf{\Large {{ latex_safe(pi['name']).upper() }}} & \textbf{\today} \\
{{ latex_safe(pi['institution']) }} & {{ latex_safe(pi['email']) }} \\
{% raw %}
\end{tabular*}%
}\vspace{1em}
{% endraw %}

\textbf{Software Releaselist}

\begin{enumerate}
{% for program in software %}
\item \textbf{\href{https://github.com/{{ latex_safe(program['org_name']) }}/{{ latex_safe(program['repo_name']) }}}{ {{- latex_safe(program['org_name']) -}}/{{- latex_safe(program['repo_name']) -}}}:}\\
\hspace*{1em}{{ latex_safe(program['program_description']) }}\\
\hspace*{1em}\textit{Authors: {{ latex_safe(', '.join(program.get('author', []))) }}}\\
\hspace*{1em}Url: https://github.com/{{ latex_safe(program['org_name']) }}/{{ latex_safe(program['repo_name']) }}\\
\hspace*{1em}\textbf{Releases:}\vspace{-0.5em}
\begin{itemize}[label={}]
{% for release in program['release'] %}
\item \textbf{ {{- latex_safe(release['release_id']) -}}:} {{ latex_safe(release['release_date']) }}
\begin{itemize}[label={}, leftmargin=2em]
{% if release.get('changes') %}
{% for change in release.get('changes', []) %}
\item {{ latex_safe(change) }}
{% endfor %}
\end{itemize}
{% endif %}
{% endfor %}
\end{itemize}
{% endfor %}
\end{enumerate}

\end{document}
Loading
Loading