Commit Graph
43 Commits
Author SHA1 Message Date
kevinveenbirkenbach 29eaa44849 Release version 16.2.3 2026-10-21 22:02:43 +02:00
kevinveenbirkenbach ed2ed573cc Release version 16.2.2 2026-10-21 13:00:13 +02:00
kevinveenbirkenbach 66eb3c7082 Release version 16.2.1 2026-10-20 22:35:05 +02:00
kevinveenbirkenbach e2501cb1de Release version 16.2.0 2026-10-20 21:11:50 +02:00
kevinveenbirkenbach e1d7e32889 Release version 16.1.0 2026-10-19 16:20:32 +02:00
kevinveenbirkenbach 7363137ea2 Release version 16.0.1 2026-10-18 23:04:22 +02:00
kevinveenbirkenbach fa0b40ae00 Release version 16.0.0 2026-10-18 23:04:02 +02:00
kevinveenbirkenbach 21d2c01c66 Release version 15.0.0 2026-10-03 21:21:58 +02:00
kevinveenbirkenbach b7ba182781 Release version 14.2.0 2026-09-22 15:22:09 +02:00
kevinveenbirkenbach 46b6e94a70 Release version 14.1.0 2026-09-21 23:12:35 +02:00
kevinveenbirkenbach d19b4b5f5a Release version 14.0.0 2026-09-19 16:35:48 +02:00
kevinveenbirkenbach 8df5c31e6e Release version 13.0.0 2026-08-26 09:39:19 +02:00
kevinveenbirkenbachandClaude Opus 5 575a5a87ac refactor(layout): sort shipped scripts by language and split the unit suite
Every script a role ships now lives under `files/<language>/`, and the unit
suite is split the same way: `tests/unit/python/` beside new sibling trees for
the other languages. `tests/lint/filesystem/test_role_files_layout.py` keeps it
that way; directories whose shape is dictated from outside carry a `.nocheck`
naming the constraint (Docker build contexts, WordPress mu-plugins, the Joomla
extension, Odoo addons, Playwright suites, the `files/test/test.sh` harness
that `test-e2e-cli` resolves generically).

This cannot be applied in halves. Moving a file and repointing what names it
are the same change: 14 references resolve only at deploy time, so the tree is
green either before or after, never between.

Those 14 were found by static resolution over every reference class, not by the
test suite -- a full `make quality-high` was green while all of them were
broken:

  * 7 `src:` values built from a role variable holding a bare filename
    (svc-bkp-remote-2-local, decidim, espocrm, friendica, joomla, pixelfed x2).
    The variable doubles as the destination name inside the container, so the
    language segment belongs at the call site, not in the variable.
  * `sys-service/tasks/04_base.yml` resolved every consumer's systemd script
    through `first_found(..., errors='strict')` over `files/script.{sh,py}`.
    18 roles ship exactly that and have no template fallback: the play would
    have died on each.
  * `sys-front-inj-javascript` fell back to `<role>/files/javascript.js`; the
    interface now reads `files/javascript/javascript.js`.
  * `sys-front-inj-logout/templates/head_sub.j2` built the cache-busting mtime
    path through `path_absolute(... 'files', ...)`.
  * 4 `ansible.builtin.script:` invocations naming a bare command
    (pull.py, prune.sh, set_postgres_superuser_password.sh, ganesha-serve.sh).
  * `dev-python/files/shell/install.sh` pointed at a sibling role's script.

Depth-dependent paths inside the moved trees were bumped accordingly: 59
`parents[N]` computations, 12 relative climbs, and the per-role recover CLI,
whose path `cli/administration/recover/recoverers.py` still assembled from the
pre-move location.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 01:31:09 +02:00
kevinveenbirkenbach b40a5b286e Release 12.0.0 2026-08-08 10:29:28 +02:00
kevinveenbirkenbach 490b42d509 Release 11.6.0 2026-07-08 03:07:30 +02:00
kevinveenbirkenbach 68c7555fbe Release 11.5.0 2026-07-04 21:20:44 +02:00
kevinveenbirkenbach ae41724cba Release version 11.4.0 2026-07-01 04:09:50 +02:00
kevinveenbirkenbach 42cec33388 Release 11.3.0 2026-06-29 20:56:20 +02:00
kevinveenbirkenbach cf78079448 Release version 11.2.0 2026-06-28 20:38:36 +02:00
kevinveenbirkenbach 354491c5f2 Release 11.1.0 2026-06-27 21:36:31 +02:00
kevinveenbirkenbachandClaude Opus 4.8 8a586ad373 feat(lint): validate generated distro changelogs + harden the mirror generator
Adds a lint-packages target/workflow that parses the generated packaging metadata with each ecosystem's native parser (dpkg-parsechangelog, rpmspec, bash -n for the PKGBUILD), failing on any parser stderr so warnings cannot slip through. Wired into the make lint fan-out and ci-orchestrator's lint gate; an install group provisions the parsers (best-effort, cross-distro).

Hardens package_mirror so the generated changelogs parse without warnings: every RPM body line gets a '- ' continuation prefix (a column-0 '*' was read as a new %changelog entry -> 'bad date'), and the archived-releases notice is folded into the oldest kept entry instead of trailing after the final entry (free text there made dpkg-parsechangelog warn). Regenerates packaging/debian/changelog and the Fedora spec accordingly.

Adds a test-lint check (test_package_changelog_completeness) asserting both package changelogs list every CHANGELOG.md + docs/changelog release and that their inline window matches CHANGELOG.md, plus unit regressions for the RPM continuation prefix and the Debian footer fold.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 21:36:30 +02:00
kevinveenbirkenbachandClaude Opus 4.8 376822ebe4 fix(changelog): indent Debian changelog bodies so dpkg-buildpackage parses them
format_debian_entry indented only the first body line per entry, leaving the rest at column 0. dpkg's changelog parser treats un-indented change lines as badly formatted, loses the entry boundary and reports 'cannot parse maintainer email address ""', failing the .deb build in build-ci-images. Every non-empty body line is now indented by two spaces.

trim_and_archive additionally dropped the '# Changelog' H1 preamble on every rewrite (it rebuilt content from the version entries only), which would break the MD041 markdown lint on the next trim. The preamble before the first version header is now preserved.

Regenerated packaging/debian/changelog and packaging/fedora/infinito-nexus.spec from CHANGELOG.md (untrimmed). Also adds the missing YAML document-start to web-app-pihole/tasks/main.yml.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 21:36:30 +02:00
kevinveenbirkenbach 9c2e8379fb Release 11.0.0 2026-06-27 14:35:36 +02:00
kevinveenbirkenbachandClaude Opus 4.8 3bdc8180c7 chore(changelog): archive releases past active window
Trim CHANGELOG.md to the active window and move older entries (4.0.3 through 8.0.4) into docs/changelog/; regenerate the Debian and Fedora package changelogs from the kept entries.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 10:46:05 +02:00
kevinveenbirkenbach 9bfbb7c3cb Release version 9.3.0 2026-06-11 10:33:55 +02:00
kevinveenbirkenbach d142431f9c Release version 9.2.0 2026-06-03 10:37:49 +02:00
kevinveenbirkenbach 4a2beaa3e7 Release version 9.1.0 2026-06-01 11:29:42 +02:00
kevinveenbirkenbach 9699ab33b3 Release version 9.0.2 2026-05-29 12:47:55 +02:00
kevinveenbirkenbach b9a3a8762a Release version 9.0.1 2026-05-28 21:19:49 +02:00
kevinveenbirkenbach 3d7bb7b983 Release version 9.0.0 2026-05-28 18:37:57 +02:00
kevinveenbirkenbach 21e878d7cd Release version 8.0.5 2026-05-28 17:50:39 +02:00
kevinveenbirkenbach 91ad89b3f4 Release version 8.0.4 2026-05-28 13:50:57 +02:00
kevinveenbirkenbach b12397e988 Release version 8.0.3 2026-05-28 11:51:38 +02:00
kevinveenbirkenbach 211fbcecf8 Release version 8.0.2 2026-05-28 11:12:31 +02:00
kevinveenbirkenbach fae8fa468a Release version 8.0.1 2026-05-28 09:14:46 +02:00
kevinveenbirkenbach 12e53905fd Release 8.0.0 2026-05-27 17:37:31 +02:00
kevinveenbirkenbachandClaude Opus 4.7 66badf258e refactor(changelog): split archive CLI into per-responsibility modules
Break cli/contributing/changelog/archive/__main__.py into four
single-responsibility modules under the same package:

* versioning.py — pad_version / unpad_version / archive_filename
  (the canonical <padded-semver>-<date>.md filename schema).
* archive_dir.py — existing_archives, archived_releases_from_directory,
  build_index_section (filesystem operations on docs/changelog/).
* changelog_md.py — split_into_entries, md_body_after_header,
  trim_and_archive (CHANGELOG.md parsing and trimming, plus the
  always-rebuild-index logic).
* package_mirror.py — mirror_to_debian_changelog,
  mirror_to_rpm_spec_changelog (Debian and RPM regeneration from
  CHANGELOG.md kept entries, with the trailing notice that points at
  docs.infinito.nexus and lists archived versions as plain text).

__main__.py shrinks to argparse plus a thin orchestration layer that
parses CHANGELOG.md once, runs trim_and_archive, reads the populated
archive directory, and mirrors into the package files.

Add `mirror_to_debian_changelog` and `mirror_to_rpm_spec_changelog`
content-idempotency: skip the write when the regenerated content
already matches what is on disk so re-runs leave file mtimes
unchanged. Verified end-to-end: a follow-up run on a fully-processed
tree leaves all three files (CHANGELOG.md, Debian changelog, RPM
spec) byte-identical and mtime-stable.

Replace `datetime.strptime` calls with `date.fromisoformat` so the
DTZ007 lint stays clean: we only need calendar-date parsing for
display formatting, not timezone-aware moments.

Tests follow the same split: one test_<module>.py per source module,
40 tests in total. Shared fixtures live in _helpers.py (underscore
prefix exempts it from the test-file-naming lint), and each test
class explicitly mixes TempRepoMixin with unittest.TestCase so the
test-files-have-tests AST lint sees the direct unittest base.

Update docs/contributing/actions/release.md so the procedure
description matches the current behaviour: package changelogs are
"mirrored" (not "trimmed") from CHANGELOG.md, and the idempotence
section calls out byte-idempotency on each of the three files.

Run the CLI once against the live tree to bring packaging/debian/
changelog and packaging/fedora/infinito-nexus.spec back into sync
with CHANGELOG.md and the docs/changelog/ archive directory.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:19:42 +02:00
kevinveenbirkenbach fa7c021525 Release version 7.0.0 2026-05-08 13:22:20 +02:00
kevinveenbirkenbach 15e9693eaf Release version 6.0.0 2026-04-25 17:59:57 +02:00
kevinveenbirkenbach e49631fec6 packaging: add PyYAML runtime dependency 2026-03-20 21:03:11 +01:00
kevinveenbirkenbach ad3f159548 Require Docker Compose in dev packaging 2026-03-19 11:25:49 +01:00
kevinveenbirkenbach d720937763 Fix EL9 RPM Python packaging dependency 2026-03-19 04:33:35 +01:00
kevinveenbirkenbach 3b11d7f469 feat(packaging): add distro packages and install via package metadata 2026-03-19 02:53:15 +01:00