From 7eca605cf9a60edce5b0d73a2d72e05707150f69 Mon Sep 17 00:00:00 2001 From: jadamcrain Date: Thu, 15 Oct 2026 13:10:32 -0700 Subject: [PATCH] Add a changelog, and take each release's notes from it --- .github/workflows/release.yml | 11 +++++++++++ CHANGELOG.md | 21 +++++++++++++++++++++ CLAUDE.md | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 95df557..f33774c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,6 +34,16 @@ jobs: echo "A dependency's license changed: review src/license/texts and commit it" exit 1 fi + # the release notes are the version's section of CHANGELOG.md; a release candidate (0.2.0-RC1) uses its + # version's (0.2.0). Taken before publishing, so a missing section stops the release before anything is published + - name: Take the release notes from the changelog + run: | + base="${VERSION%%-*}" + awk -v v="$base" '$0 == "## " v {f = 1; next} /^## / {f = 0} f' CHANGELOG.md > release-notes.md + if [ ! -s release-notes.md ]; then + echo "CHANGELOG.md has no section for $base" + exit 1 + fi - name: Import the PGP key id: import_gpg uses: crazy-max/ghaction-import-gpg@v7 @@ -50,6 +60,7 @@ jobs: - name: Create the GitHub release uses: softprops/action-gh-release@v2 with: + body_path: release-notes.md files: | target/dnp3c-${{ github.ref_name }}.zip target/dnp3c-${{ github.ref_name }}-cli.jar diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..42f0d92 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +## 0.2.0 + +- **DNP3 IED Certification Procedure 3.1 rev 1**, subset levels 1 to 3, alongside 2.7. Choose the revision with `-rev`; `-revs` lists them. +- **Serial and UDP**, as well as TCP, including 3.1 rev 1's network, multi-drop and collision avoidance tests. +- **Exclusions:** leave a procedure out of a run with a reason, e.g. for a known gap in the device. The report shows it as not run, apart from skipped procedures, with its reason. +- **Reports** say why each procedure was skipped, and name the revision and subset level. +- The runnable jar and the CLI zip list the licenses of the dependencies they bundle. + +### Upgrading from 0.1.0 + +- `-rev` is required, e.g. `-rev 2.7`. +- `outstation.subset.level` is required in the configuration. +- Results are kept by revision and level, e.g. `results/2.7/L2/`. +- Some configuration keys were renamed or removed; an old key is reported as an unknown option. `-write` writes a file with every current option. +- Integration plugins: `IntegrationPlugin`'s per-type methods take the kind of point, and runs can report a procedure as `ProcedureOutcome.Excluded`. See [Automating the tests](docs/automation.md). + +## 0.1.0 + +The first release: the DNP3 IED Certification Procedure, Subset Level 2, version 2.7, over TCP, with a command-line tool, an HTML report, packet capture, and a library for automated runs through an integration plugin. diff --git a/CLAUDE.md b/CLAUDE.md index 3179b5f..5e64fa9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -46,7 +46,7 @@ dnp3c is licensed GPL-3.0-only, copyright Step Function I/O LLC. ## Releasing -Pushing a tag releases that version (`.github/workflows/release.yml`): the tag is the version, e.g. `0.1.0`, or `0.1.0-RC1` for a release candidate. The job builds and tests it, publishes `io.stepfunc:dnp3c` to Maven Central, and creates a GitHub release with the CLI zip and the runnable jar. Publishing to Central can't be undone, so tag only what's ready. +Pushing a tag releases that version (`.github/workflows/release.yml`): the tag is the version, e.g. `0.1.0`, or `0.1.0-RC1` for a release candidate. The job builds and tests it, publishes `io.stepfunc:dnp3c` to Maven Central, and creates a GitHub release with the CLI zip and the runnable jar. The release's notes are the version's section of `CHANGELOG.md` (a release candidate uses its version's), so add that section before tagging: without it the job stops before publishing. Keep the changelog high level, with an upgrading list for what breaks. Publishing to Central can't be undone, so tag only what's ready. ## Downstream users