Skip to content

Releases: mborsetti/webchanges

v3.36.1

Choose a tag to compare

@github-actions github-actions released this 27 Apr 05:15

Fixed

  • Configuration loading no longer fails with NameError: name '_ConfigDisplay' is not defined (or similar) when
    an obsolete version of typeguard (<4.5) is found installed.
  • --edit-jobs, --edit-config, --edit-hooks, and --detailed-versions now run without loading the
    configuration, jobs, and hooks files, so a malformed file no longer prevents launching the editor or the version
    listing from being shown.
  • Improved output of --detailed-versions, especially when packaging is available.

Internals

  • RELEASE documentation is now in Markdown format.
  • Updated vendored packaging.version (used as a fallback when the optional packaging dependency is unavailable)
    from v24.2 to v26.2.

v3.36.0

Choose a tag to compare

@github-actions github-actions released this 26 Apr 08:14

Added

* Job directives and configuration values are now type-checked when starting **webchanbges**. If a directive has the
  wrong type (e.g. a string where a boolean is expected), this will be shown at launch with a clear error instead of
  failing later during execution.
* New JSON Schemas for ``config.yaml`` and ``jobs.yaml`` are deployed next to those files, so editors that consume
  schemas from the same directory can offer autocompletion and validation. ``config.schema.json`` is written next to
  ``--config``, and ``jobs.schema.json`` next to the first ``--jobs`` file.

  - Note that while some editors automatically start using them, others (e.g. VS Code) require the line
  ``# yaml-language-server: $schema=config.schema.json`` to be inserted at the top of a config file, and the line
  ``# yaml-language-server: $schema=jobs.schema.json`` at the top of a jobs file and repeated after every ``---``
  separator (i.e. each individual job entry starts with it).

* ``--test-reporter <name>`` combined with a positional joblist now overrides the configured reporters: the listed
  jobs are fetched, filtered, and diffed against the snapshot database, and the resulting report is sent to the
  named reporter only (other reporters do not fire). Snapshots are not saved (read-only). Without a joblist,
  ``--test-reporter`` continues to send a dummy report to the named reporter as before.

Changed
  • The additions_only job directive now accepts a numeric ratio in [0, 1] (interpreted as the minimum
    fraction of the original content that must remain
    before the deletion-safeguard warning is triggered) in addition
    to a boolean. true remains equivalent to 0.25 (the historical default — warn when 25% or less of the
    original content remains, i.e. 75% or more has been removed). The directive also accepts the string
    "disable_safeguard" to keep additions-only filtering active while never showing deletions, even on a full
    wipe. false continues to disable additions-only filtering entirely. The diff safeguard message has been
    rephrased and now reports the actual remaining percentage (e.g. "only 45% of the original content remains").
  • webchanges --list --verbose will now also display the internal guid value.
  • webchanges --errors now honors a "joblist" of positional JOB(S) arguments (job index numbers and/or
    URLs/commands), restricting the error check to those jobs only. Without a joblist, all enabled jobs are checked
    as before.
  • New -vvv (verbose level 3) command line argument to set the log level to Python's NOTSET for maximum
    verbosity.

Internals

* Fixed packaging so that the ``webchanges(1)`` man page is actually generated and installed.
* Improved testing and code coverage (work in progress).

v3.35.0

Choose a tag to compare

@github-actions github-actions released this 25 Apr 04:01

Added

* New ``curl_cffi`` option for the ``http_client`` job directive, using the `curl_cffi
  <https://github.com/lexiforest/curl_cffi>`__ library to wrap libcurl-impersonate. This replays real browser TLS
  fingerprints (Chrome, Firefox, Safari, Edge) at the wire level, enabling retrieval of pages behind Cloudflare,
  Akamai, and similar bot-walls that fingerprint the TLS handshake (JA3) or HTTP/2 ``SETTINGS`` frame, without
  needing a full headless browser job.
* New ``impersonate`` job directive controlling the browser TLS fingerprint used by the ``curl_cffi`` HTTP client
  (e.g. ``chrome``, ``chrome124``, ``safari17_0``, ``firefox133``). Defaults to ``chrome``. Ignored by the
  ``httpx`` and ``requests`` backends.
* New ``fingerprints`` job directive for advanced low-level TLS/HTTP fingerprint overrides with the ``curl_cffi``
  HTTP client. Accepts a mapping with optional ``ja3``, ``akamai``, and ``extra_fp`` keys, forwarded verbatim to
  ``curl_cffi``. See the `curl_cffi customization documentation
  <https://curl-cffi.readthedocs.io/en/latest/impersonate/customize.html>`__ for details. Ignored by the ``httpx``
  and ``requests`` backends.
* New ``http_version`` job directive to pin the HTTP protocol version (``v1``, ``v2``, ``v2tls``,
  ``v2_prior_knowledge``, ``v3``, ``v3only``) when using the ``httpx`` or ``curl_cffi`` HTTP clients. ``httpx``
  supports ``v1`` and ``v2`` (the latter requires the ``h2`` package); ``curl_cffi`` supports all values.
* New HTTP client selection logic. While **webchanges** installs ``httpx``, the program will work in in environments
  where ``httpx``  has been uninstalled by falling back to ``requests`` or ``curl_cffi``, enabling custom lightweight
  installs.
* The ``initialization_url`` job directive now works for all ``url`` jobs (not only those with
  ``use_browser: true``). A ``GET`` request is made to the initialization URL within the same session; cookies
  received are automatically carried over to the main request.
* The ``use_browser`` job directive now accepts a browser name string in addition to a boolean. Supported values
  any value starting with ``chrome`` or ``msedge`` (e.g. ``chrome``, ``chrome-beta``,  ``msedge-dev``), ``firefox``, or
  ``webkit``, or. ``true`` continues to mean the ``chrome`` channel.
* A (fairly good) AI-generated high-level architectural overview of **webchanges** is available on `DeepWiki
   <https://deepwiki.com/mborsetti/webchanges>`__.

Internals
  • The requests and curl_cffi HTTP client backends now use session objects (requests.Session and
    curl_cffi.requests.Session) for connection reuse and automatic cookie persistence across initialization and
    main requests.

Fixed

* A report will now be created for jobs initialized with ``--prepare-jobs`` when  ``display``  > ``new`` configuration
  has a ``true`` value.

v3.34.2

Choose a tag to compare

@github-actions github-actions released this 22 Mar 03:16

Fixed

* Files missing in PyPi installation.

v3.34.1

Choose a tag to compare

@github-actions github-actions released this 13 Mar 05:22

⚠ Breaking Changes

* Newly added ``utf-8`` sub-directive of ``smtp`` ``email`` reporter is now called ``utf_8`` (with an underscore) due to
  Python TypedDict class limitation, but will have backward-compatibility for at least 12 months.

Changed
```````
* ``telegram`` reporter will now look for the environment variable ``TELEGRAM_BOT_TOKEN`` if no token is defined in the
  configuration (i.e. ``bot_token`` is missing or has a ``null`` value).

Fixed
`````
* Regression: Rejecting ``ignore_cached`` job directive  (reported by `Marcos Alano <https://github.com/mhalano>`__
  in issue `#153 <https://github.com/mborsetti/webchanges/issues/153>`__).
* Rejecting ``http_credentials`` job directive in certain circumstances with URL jobs with ``browser: true``.

Internals impacting ``hooks.py``
  • Broken up huge files into smaller, more manageable ones. If you are importing from webchanges, the location of
    certain classes may have changed.

Internals

* Increased amount of free memory required before running URL jobs with ``use_browser: true`` (i.e. Playwright)
  in parallel to 800 MiB.

v3.34.0

Choose a tag to compare

@github-actions github-actions released this 10 Feb 13:17

Added

* New reporter ``github_issue`` creates a GitHub issue for changes detected.

  - Kindly contributed by `Dmitry Vasiliev <https://github.com/swimmwatch>`__ in `#105
    <https://github.com/mborsetti/webchanges/issues/105>`__.
  - Implemented as a GitHub Action ``webchanges-action`` available `here
    <https://github.com/swimmwatch/webchanges-action>`__.

* The ``wdiff`` filter now handles ``html`` text.
* New ``suppress_error_ended`` and ``suppress_errors``` Job sub-directives to control error notifications job-by-job.

  - Suggested by `Marcos Alano <https://github.com/mhalano>`__ in `#101
    <https://github.com/mborsetti/webchanges/issues/101>`__.

* New ``ntfy`` reporter to support `ntfy <https://ntfy.sh>`__ (pronounced _notify_), an open-source fee simple
  HTTP-based `pub-sub <https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern>`__ notification service (also
  for upstream compatibility).
* Filters ``execute`` and ``shellpipe`` now have an ``escape_characters`` sub-directive to automatically escape Windows
  command caracters (e.g. ``%`` becomes ``%%``, ``!`` becomes ``^!``, etc.).

Fixed
`````
* All databases, keep-alive connections, and underlying SSL sockets are now closed correctly before exit. Fixes the
  ``ResourceWarning: unclosed database`` and ``ResourceWarning: <ssl.SSLSocket>`` messages when run with environment
  variable ``PYTHONWARNINGS=all``.

v3.33.0

Choose a tag to compare

@github-actions github-actions released this 31 Jan 14:14

Added

* ``ai_google`` differ has new ``thinking_level`` and ``media_resolution`` sub-directives.
* ``command`` differ has a new ``context_lines`` sub-directive for commands starting with wdiff for backwards 
  compatibility (but use the built-in ``wdiff`` differ instead).

Changed
  • ai_google differ is no longer considered BETA.
  • Improved logging for the evaluate directive in URL Jobs with browser: true.
  • --dump-history JOB command line argument will now match any job, even one that is not in the --jobs file.

Fixed

* Regression: ``http_ignore_error_codes`` not being applied to ``TransientHTTPError`` Exceptions such as '429 Too Many
  Requests' (issue #`119 <https://github.com/mborsetti/webchanges/issues/119>`__).
* ``http_credentials`` directive not being applied to URL jobs with ``browser: true`` and ``user_data_dir``.
* When running with command line argument ``-vv``, browser pages will open with DevTools open.
* Problem parsing Playwright exceptions in BrowserJob class retrieve method  (issue #`141 
  <https://github.com/mborsetti/webchanges/issues/141>`__)..

Internals for ``hooks.py``
  • The BrowserJob class' retrieve method has been modularized, and exposes response_handler (a callable which
    replaces the built-in page.goto() directive), content_handler (a callable which replaces the built-in content
    extractor from the Page), and return_data (a callable which replaces all of the built-in functionality after
    the browser is launched).`

Internals

* Code type checking is now performed using ``ty`` instead of ``mypy``.
* Improved logging and the saving of snapshots when a browsing error is encountered for URL jobs with ``browser: true``.
* Use ``uv`` to build PyPi distributable.

v3.31.4

Choose a tag to compare

@github-actions github-actions released this 23 Oct 00:38

Reminder

Older Python versions are supported for 3 years after being obsoleted by a new major release. As Python 3.10 was
released on 24 October 2022, the codebase will be streamlined by removing support for Python 3.10 on or after 24 
October 2025.

Added
`````
* Support for Python 3.14.

Fixed
`````
* Fixed ``deepdiff`` differ to handle text strings correctly (e.g. when an API typically returning JSON starts
  returning an error in HTML).

Internals (impacting hooks.py)
  • In the Differ Class' process method, the report_kind's value text has been renamed plain for
    clarity and to align with IANA's media type nomenclature for different types of text.

Internals (other)

* Implemented testing for Python 3.14.
* Implemented OpenSSF Scorecard and improved code security.
* Enabled additional ``ruff check`` linters and improved code quality.

v3.31.3

Choose a tag to compare

@github-actions github-actions released this 24 Sep 06:45

Reminder

Older Python versions are supported for 3 years after being obsoleted by a new major release. As Python 3.10 was
released on 24 October 2022, the codebase will be streamlined by removing support for Python 3.10 on or after 24 
October 2025.

Fixed
`````
* Certain job Exceptions would fail with a yaml Exception.

Internals
  • Removed non-unique elements in pyproject.toml's classifiers,
  • Updated run-gemini-cli to fix GitHub error.
  • Fixed pre-commit.ci failing checks on new PRs

v3.31.2

Choose a tag to compare

@github-actions github-actions released this 16 Sep 02:32

Fixed

* Fixed UnboundLocalError when using new ``utf-8`` sub-directive within the ``smtp`` emailer (``email`` report).
  Reported in #`104 <https://github.com/mborsetti/webchanges/issues/110>`__.

Internals
  • Removed workaround for Python 3.9, which is no longer supported.