The first run of the automated Release workflow failed in two jobs:
* Windows MSVC (x86/x64) — the version-bump step died with
"CHANGES: no leading 'RRDtool - master ...' block found".
actions/checkout writes CHANGES with CRLF endings on Windows
runners, defeating the LF-anchored regexes in finalize-changes.pl.
Normalize CRLF -> LF after slurping the file, and add a
.gitattributes entry forcing LF on CHANGES as defense-in-depth.
* RPM (almalinux:9) — "make dist" died with "ps2pdf: command not
found" while generating EXTRA_DIST PDFs. The minimal RPM container
has no ghostscript. The build-rpm job already depends on
build-source, which ships the canonical tarball, so download that
artifact instead of rebuilding it in-container. This matches the
job's own documented intent and drops a class of missing-dist-dep
failures.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
--- /dev/null
+# CHANGES is rewritten at release time by conftools/finalize-changes.pl,
+# whose regexes are LF-anchored. Force LF on checkout everywhere (notably
+# on Windows CI runners) so that rewrite cannot break.
+CHANGES text eol=lf
version: ${{ needs.compute-version.outputs.version }}
date: ${{ needs.compute-version.outputs.date }}
- - name: Build source tarball locally for rpmbuild input
- run: |
- set -e
- ./bootstrap
- ./configure
- make dist
+ # Reuse the canonical tarball produced by build-source instead of
+ # rebuilding it here: `make dist` needs doc-toolchain deps (ps2pdf via
+ # ghostscript) that this minimal RPM container does not carry.
+ - name: Download source tarball from build-source
+ uses: actions/download-artifact@v6
+ with:
+ name: source-tarball
- name: Stage rpmbuild tree
env:
my $content = <$fh>;
close $fh;
+# Normalize CRLF -> LF. On Windows CI runners actions/checkout writes
+# CHANGES with CRLF line endings, which would defeat the LF-anchored
+# regexes below. The file is always rewritten with LF (matching the repo).
+$content =~ s/\r\n/\n/g;
+
# Idempotency: a "RRDtool $version - YYYY-MM-DD" header already present
# means the rewrite ran on a previous job in the same release; just exit.
if ($content =~ /^RRDtool \Q$version\E - \d{4}-\d{2}-\d{2}\b/m) {