diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index bc6c8e6be..eff267329 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -9,7 +9,35 @@ Closes #
This PR addresses ...
**Checklist**
-- [ ] added entry in `CHANGES.rst` under the corresponding subsection
+- [ ] for a public change, added a towncrier news fragment in `changes/` `echo "changed something" > changes/..rst`
+
+ - ``changes/.general.rst``: infrastructure or miscellaneous change
+ - ``changes/.docs.rst``
+ - ``changes/.stpipe.rst``
+ - ``changes/.associations.rst``
+ - ``changes/.scripts.rst``
+ - ``changes/.mosaic_pipeline.rst``
+ - ``changes/.patch_match.rst``
+
+ ## steps
+ - ``changes/.dq_init.rst``
+ - ``changes/.saturation.rst``
+ - ``changes/.refpix.rst``
+ - ``changes/.linearity.rst``
+ - ``changes/.dark_current.rst``
+ - ``changes/.jump_detection.rst``
+ - ``changes/.ramp_fitting.rst``
+ - ``changes/.assign_wcs.rst``
+ - ``changes/.flatfield.rst``
+ - ``changes/.photom.rst``
+ - ``changes/.flux.rst``
+ - ``changes/.source_detection.rst``
+ - ``changes/.tweakreg.rst``
+ - ``changes/.skymatch.rst``
+ - ``changes/.outlier_detection.rst``
+ - ``changes/.resample.rst``
+ - ``changes/.source_catalog.rst``
+
- [ ] updated relevant tests
- [ ] updated relevant documentation
- [ ] updated relevant milestone(s)
diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml
index 69c86b60b..cb5c44f47 100644
--- a/.github/workflows/changelog.yml
+++ b/.github/workflows/changelog.yml
@@ -1,25 +1,30 @@
-name: Changelog
+name: changelog
on:
pull_request:
- types: [labeled, unlabeled, opened, synchronize, reopened]
+ types:
+ - labeled
+ - unlabeled
+ - opened
+ - synchronize
+ - reopened
-# Only cancel in-progress jobs or runs for the current workflow
-# This cancels the already triggered workflows for a specific PR without canceling
-# other instances of this workflow (other PRs, scheduled triggers, etc) when something
-# within that PR re-triggers this CI
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
- changelog:
- name: Confirm changelog entry
+ check:
+ if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-changelog-entry-needed') }}
runs-on: ubuntu-latest
steps:
- - name: Check change log entry
- uses: scientific-python/action-check-changelogfile@1fc669db9618167166d5a16c10282044f51805c0 # 0.3
- env:
- CHANGELOG_FILENAME: CHANGES.rst
- CHECK_MILESTONE: false
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - uses: actions/setup-python@v5
+ with:
+ python-version: 3
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - run: pip install .
+ - run: pip install towncrier
+ - run: towncrier check
+ - run: towncrier build --draft | grep -P '#${{ github.event.number }}'
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index ebbddd839..eceef651f 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -36,6 +36,8 @@ build:
- ./git-lfs fetch
# Make local files to have the real content on them
- ./git-lfs checkout
+ post_install:
+ - towncrier build --keep
conda:
environment: docs/rtd_environment.yaml
diff --git a/CHANGES.rst b/CHANGES.rst
index ef3def2fb..e73e53971 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,14 +1,3 @@
-0.16.4dev
-=========
-
-mosaic_pipeline
----------------
-
-- Allow asn product name to be the output product [#1394]
-
-
-
-
0.16.3 (2024-08-29)
===================
@@ -99,7 +88,7 @@ stpipe
------
- Add ``ModelContainer`` support to ``Step._datamodels_open`` to allow
- loading "pars-*" files from CRDS. [#1270]
+ loading ``pars-*`` files from CRDS. [#1270]
tweakreg
@@ -749,7 +738,7 @@ linearity
- Linearity correction now supports NaN's in the reference file. [#484]
- photom
+photom
------
- Photom updated to skip updating photometric converstions for spectral data [#498]
diff --git a/changes/.gitkeep b/changes/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/changes/1375.docs.rst b/changes/1375.docs.rst
new file mode 100644
index 000000000..77509605d
--- /dev/null
+++ b/changes/1375.docs.rst
@@ -0,0 +1 @@
+handle changelog entries with ``towncrier``
diff --git a/changes/1394.mosaic_pipeline.rst b/changes/1394.mosaic_pipeline.rst
new file mode 100644
index 000000000..08cebb565
--- /dev/null
+++ b/changes/1394.mosaic_pipeline.rst
@@ -0,0 +1 @@
+Allow asn product name to be the output product
diff --git a/docs/index.rst b/docs/index.rst
index b71f65055..dd5305125 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -69,3 +69,4 @@ desk at `Roman Help Desk `_.
:maxdepth: 1
roman/pipeline_static_preview.rst
+ roman/changes.rst
diff --git a/docs/roman/changes.rst b/docs/roman/changes.rst
new file mode 100644
index 000000000..555a27c95
--- /dev/null
+++ b/docs/roman/changes.rst
@@ -0,0 +1,7 @@
+.. currentmodule:: roman
+
+***********
+Change Log
+***********
+
+.. include:: ../../CHANGES.rst
diff --git a/docs/rtd_environment.yaml b/docs/rtd_environment.yaml
index aeebc4dff..f6818e66e 100644
--- a/docs/rtd_environment.yaml
+++ b/docs/rtd_environment.yaml
@@ -7,3 +7,4 @@ dependencies:
- pip
- graphviz
- sphinx_rtd_theme>1.2.0
+ - towncrier
diff --git a/pyproject.toml b/pyproject.toml
index 28a36bd22..56c329615 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -227,3 +227,134 @@ archs = [
"auto",
"aarch64",
]
+
+[tool.towncrier]
+filename = "CHANGES.rst"
+directory = "changes"
+package = "romancal"
+title_format = "{version} ({project_date})"
+ignore = [".gitkeep"]
+wrap = true
+issue_format = "`#{issue} `_"
+
+[[tool.towncrier.type]]
+directory = "general"
+name = "General"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "docs"
+name = "Documentation"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "stpipe"
+name = "``stpipe``"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "associations"
+name = "Associations"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "scripts"
+name = "Scripts"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "mosaic_pipeline"
+name = "``mosaic_pipeline``"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "patch_match"
+name = "``patch_match``"
+showcontent = true
+
+# steps
+
+[[tool.towncrier.type]]
+directory = "dq_init"
+name = "``dq_init`` (WFI-Image, WFI-Prism, WFI-Grism)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "saturation"
+name = "``saturation`` (WFI-Image, WFI-Prism, WFI-Grism)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "refpix"
+name = "``refpix`` (WFI-Image, WFI-Prism, WFI-Grism)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "linearity"
+name = "``linearity`` (WFI-Image, WFI-Prism, WFI-Grism)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "dark_current"
+name = "``dark_current`` (WFI-Image, WFI-Prism, WFI-Grism)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "jump_detection"
+name = "``jump_detection``"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "ramp_fitting"
+name = "``ramp_fitting`` (WFI-Image, WFI-Prism, WFI-Grism)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "assign_wcs"
+name = "``assign_wcs`` (WFI-Image, WFI-Prism, WFI-Grism)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "flatfield"
+name = "``flatfield`` (WFI-Image)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "photom"
+name = "``photom`` (WFI-Image)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "flux"
+name = "``flux``"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "source_detection"
+name = "``source_detection`` (WFI-Image)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "tweakreg"
+name = "``tweakreg`` (WFI-Image)"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "skymatch"
+name = "``skymatch``"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "outlier_detection"
+name = "``outlier_detection``"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "resample"
+name = "``resample``"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "source_catalog"
+name = "``source_catalog``"
+showcontent = true