All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Ensure unique repo directories
- Pull request status update messages (through Telegram)
- Call another (external) URL/endpoint from a hook
- Native Sentry message support
- Support for (Inoreader filter) RSS news item notification
- Support for Freshping monitoring updates
- Use ruff to lint and fix codebase
- Jobs now may take 10 minutes instead of the previous maximum of 3
- Switched to use (async)
httpx
instead ofrequests
for HTTP calls from webhaak to other services - Only update repository and run command when the push was on the configured branch (use
branch: <name>
)
- Dependency on
requests
- Actually use named
webhaak
queue for RQ worker (instead ofdefault
, which might also conflict with other RQ instances) - Guard against remote not returning a JSON response
- Properly await async functions that handle incoming webhook calls
- Installation through pip/pypi failed due to incorrect script entry point
- Pydantic settings is its own package since Pydantic 2
- Crash when links were available in a BitBucket push, but not html link info for the branch
- Sentry pushes didn't get handled correctly
- Minor error in new PushOver send function causing pushes not to be sent
- Better variable names
- Dependency on external PushOver library
- Background worker through RQ (Redis Queue) for asynchronous running of jobs
- Status endpoint for a submitted job, which shows status of the (background) job, and process output
- Configuration through environment variables, including sanity checks on the values (e.g., existing paths and such); if webhaak is crashing on startup, check the last line of the stacktrace as that will likely tell what's wrong
- API backend changed from Flask to FastAPI; big refactor
get_app_key
endpoint is now located behind the secret key to prevent abuse- All configuration is done through environment variables, see Example configuration and the configuration examples
- Various linting, CI and code quality improvements
- settings.py file; configuration is handled through environment variables completely now; project/hook configuration is still in the yaml file
- A crash could occur when a branch was merged, as
commits
property of payload is empty (BitBucket) - Job results when commands were failing or when a job was still running
- Lots of other small crashes and edge-cases
- Optional endpoint to list all projects (apps) and their triggers. Enable by setting a SECRETKEY in settings.py The endpoint is located at /admin//list and webhaak-ui is an example client.
- Possibility to remotely use the endpoints (e.g., through jsonp)
- Git-based version string generation, use
REPOVERSION
placeholder in your projects yaml - ReadTheDocs, including apiDoc
- Support for Gitea and Gogs webhooks
- Support for checking out a certain branch (use
branch: <name>
) - Notification also includes runtime of the Git update and command execution
- Gather information about the webhook (push) event, to be used by commands, with keyword substitution
- BitBucket support
- Changed yaml library to strictyaml, to be safer
- Better logging
- Fixed 'REPODIR' substitution in commands
- Fixes for wrong payload lookups on pings and some other crashes
- pyyaml dependency
- utilkit dependency
- Python 3 compatibility
- Subprocess worker, making requests process the pull/clone and script execution asynchronous from the API call
- Give more output about the checkout and pull in the response JSON
- PushOver integration, providing feedback after the subprocess is done with updating and running its job
- Fixes to the example
- Better logging of the results of the jobs
- Use subprocess.run() instead of check_output()
- Trial with Redis
- Trial with Quart (asyncio Flask-alike)
- wsgi file, for Apache mod_wsgi and supervisord and such
- Example Apache vhost
- Support for GitHub ping and push requests
- Support for per-repo parent dir settings with
repoparent
. This means that webhaak doesn't clone this repo into its default cache dir, but in a subdirectory of the directory configured inrepoparent
, so /reponame (e.g., /srv/customparent/myproject) - json response now includes project name
- Logs information about GitHub hook requests
- Better error messags in json responses
- More info in json response about the executed command
- If DEBUG=True, Flask's DEBUG is enabled too
- Correctly checkout projects, don't only fetch the repos
- Better repo directory generation
- Better execution of scripts and other commands (with parameters)
- Initial release
- Flask API with appkey-secured endpoints to:
- Git clone/fetch a repo to a certain directory
- Run a pre-defined command
- Return result of both the repo update and command execution as json response
- Configuration through yaml file: actions are pre-defined
- /getappkey helper endpoint to generate keys for usage in the yaml configuration