Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1
ARG webchanges_tag=v3.38.0
ARG webchanges_tag=v3.39.0

FROM python:3.15.0-alpine3.24 AS builder
ARG webchanges_tag
Expand Down
20 changes: 20 additions & 0 deletions data/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,11 @@
"description": "Sender's email address. Do not use a primary mailbox; create a throwaway account for webchanges.",
"default": ""
},
"reply_to": {
"type": "string",
"description": "Reply-To email address(es), used by email clients when replying to the report. For multiple addresses, concatenate with commas. If blank, no Reply-To header is sent.",
"default": ""
},
"subject": {
"type": "string",
"description": "Subject line. Use {count}, {jobs}, and {jobs_files} placeholders (see html.title for details).",
Expand Down Expand Up @@ -984,6 +989,21 @@
{ "$ref": "#/$defs/_ConfigReportXmpp" },
{ "type": "array", "items": { "$ref": "#/$defs/_ConfigReportXmpp" }, "minItems": 1 }
]
},
"mattermost": {
"type": ["object", "array"],
"description": "Deprecated (legacy); replace with 'webhook' and add 'markdown: true'. Still runs as a webhook reporter with Markdown.",
"deprecated": true
},
"shell": {
"type": ["object", "array"],
"description": "Deprecated (legacy); replace with 'run_command'. Still runs its 'command' (a string or a list of arguments, without a shell) with the text report on its standard input; sub-directives 'command', 'ignore_stdout' (default true) and 'ignore_stderr' (default false).",
"deprecated": true
},
"slack": {
"type": ["object", "array"],
"description": "Deprecated (legacy); rename to 'webhook' (same sub-directives). Still runs as a webhook reporter.",
"deprecated": true
}
}
},
Expand Down
3 changes: 2 additions & 1 deletion data/config.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# webchanges configuration file. See https://webchanges.readthedocs.io/en/stable/configuration.html
# Originally written on 2026-10-25T15:52:52+00:00Z by version 3.38.0.
# Originally written on 2026-10-27T20:13:10+00:00Z by version 3.39.0.

# yaml-language-server: $schema=config.schema.json
display:
Expand Down Expand Up @@ -42,6 +42,7 @@ report:
html: true
from: ''
to: ''
reply_to: ''
subject: '[webchanges] {count} changes{jobs_files}: {jobs}'
method: smtp
smtp:
Expand Down
30 changes: 27 additions & 3 deletions data/jobs.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,11 @@
"description": "If true, accepts a server's weak (1024-bit) Diffie-Hellman key by lowering the OpenSSL security level (certificates are still verified). Supported by http_client httpx and requests, not by curl_cffi.",
"default": false
},
"ignore_incomplete_reads": {
"type": "boolean",
"description": "If true, suppresses errors caused by the server closing the connection before sending the complete response. Not supported with use_browser: true.",
"default": false
},
"params": {
"type": "object",
"additionalProperties": { "type": "string" },
Expand Down Expand Up @@ -369,9 +374,22 @@
"deprecated": true,
"deprecationMessage": "Use 'url' with 'use_browser: true' instead of 'navigate'."
},
"useragent": {
"type": "string",
"description": "Deprecated (legacy): set a 'User-Agent' header in 'headers' instead.",
"deprecated": true,
"deprecationMessage": "Set a 'User-Agent' header in 'headers' instead of 'useragent'."
},
"browser": {
"type": "string",
"enum": ["chromium", "firefox", "webkit"],
"description": "Deprecated (legacy): use 'use_browser: <browser>' instead ('chromium' is 'use_browser: true').",
"deprecated": true,
"deprecationMessage": "Use 'use_browser: <browser>' instead of 'browser'."
},
"wait_for": {
"type": ["integer", "string"],
"description": "No longer supported (Pyppeteer): use 'wait_for_function', 'wait_for_selector' or 'wait_for_timeout' instead.",
"description": "No longer supported (Pyppeteer): use 'wait_for_function', 'wait_for_selector' or 'wait_for_timeout' instead. In legacy 'navigate' jobs, a selector, run as 'wait_for_selector'.",
"deprecated": true,
"deprecationMessage": "Use 'wait_for_function', 'wait_for_selector' or 'wait_for_timeout' instead of 'wait_for'."
},
Expand All @@ -383,8 +401,9 @@
},
"stderr": {
"type": "string",
"description": "Ignored; accepted for compatibility with urlwatch (command jobs).",
"deprecated": true
"enum": ["ignore", "forward", "fail", "stdout"],
"description": "What to do with the standard error output of a command job: 'ignore' reports it only when the command fails (exits with a non-zero code), 'forward' also writes it to webchanges' own standard error, 'fail' fails the job if there is any, and 'stdout' merges it into the standard output, i.e. into the data. For backward compatibility, 'urlwatch' is accepted for 'forward'.",
"default": "ignore"
},
"differ": {
"oneOf": [
Expand Down Expand Up @@ -744,6 +763,11 @@
"type": "boolean",
"description": "If true, only report the first occurrence of an error."
},
"treat_new_as_changed": {
"type": "boolean",
"description": "If true, report a new job (its first successful run) as changed, with its content shown as a diff from empty content, instead of as new.",
"default": false
},
"compared_versions": {
"type": "integer",
"description": "Number of versions to keep/compare."
Expand Down
Loading