Skip to content

feed-repeat v1.1.0

Choose a tag to compare

@abhin4v abhin4v released this 13 Jun 05:42
· 16 commits to main since this release
Immutable release. Only release title and notes can be modified.

feed-repeat is a small Haskell tool that resurfaces older entries from RSS/Atom feeds by writing weighted-random selections to new Atom feeds. See the README.md for what it does and how to use it.

Get it

  • Docker / Podman: ghcr.io/abhin4v/feed-repeat:1.1.0
  • Static binaries: attached below (x86_64-linux, aarch64-linux)
  • Source: cabal build or nix-build nix/release.nix

Verify the binaries

sha256sum -c feed-repeat-x86_64.sha256        # or
shasum -a 256 -c feed-repeat-x86_64.sha256

Reporting issues

Bugs: open an issue.
Security: SECURITY.md.

Changelog

Added

  • Passthrough of new entries from source feed to output feed via passthroughNewEntries config option.
  • SSRF protection for source feed URLs — DNS resolution and IP range validation before connecting.
  • HTTP 429 (Too Many Requests) detection — treated like 304, falls back to cached feed.
  • Source feed deduplication across tasks sharing the same URL.
  • Canonicalization of output and cache directory paths.
  • ETag and Last-Modified header persistence for conditional feed fetches.
  • Configurable User-Agent header via --user-agent CLI option.
  • Configurable service username in the NixOS module via the userName option.
  • A GitHub Action workflow to generate and host the generated feeds on GitHub Pages.
  • devTools parameter throughout the Nix build files for faster Nix shell builds without HLS and other dev tools.

Changed

  • Cache files are now per-task instead of per-source, enabling different saveSourceFeedEntries per task for the same source URL. Old cache files are migrated automatically to the new file names.
  • Credentials embedded in source feed URLs (e.g., https://token@host/feed) are now redacted from all log output.
  • Explicit dependency version bounds.
  • Minimum supported GHC version is now 9.10 (Cabal 3.12+), no support for GHC 9.6 and 9.8.

Fixed

  • HTTP retry for server errors — retry logic was previously broken because 5xx exceptions bypassed the retry loop. Server errors are now properly retried with exponential backoff.
  • Statically-linked build for AArch64 — the Nix GC root was not being created.
  • URL credentials in source feed URLs were not being sent with HTTP requests, breaking authentication for feeds that require them. The original URL is now preserved as-is for the request.

Removed

  • Legacy cache file migration code.