webhaak ======= |PyPI version| |PyPI downloads| |PyPI license| |Code quality| |Known vulnerabilities| `webhaak`_ is a simple `webhook`_ service to update and deploy sites and do other maintenance without having to ssh to a node. `webhaak is on ReadTheDocs `_ webhaak supports ``git push`` hooks from GitHub, BitBucket, gitea, and gogs; for these it can automatically update checkouts. It also recognises Sentry notifications, and of course regular calls. Installation ------------ From PyPI ~~~~~~~~~ Assuming you already are inside a virtualenv: .. code-block:: bash pip install webhaak From Git ~~~~~~~~ Create a new virtualenv (if you are not already in one) and install the necessary packages: .. code-block:: bash git clone https://codeberg.org/diginaut/webhaak.git cd webhaak # Create a virtualenv with uv uv venv # When venv already exists, activate it source .venv/bin/activate # Or, when using fish shell: source .venv/bin/activate.fish # If you just want to run it, no need for development dependencies uv sync --active --no-dev # Otherwise, install everything in the active virtualenv uv sync --active Instead of manually activating the virtualenv, ``direnv`` can be used by copying the ``.envrc.example`` file to ``.envrc`` and using the ``layout_uv()`` snippet from https://codeberg.org/diginaut/dotfiles/src/branch/master/.config/direnv/direnvrc This will automatically enable (and create if necessary) the ``.venv`` virtualenv inside the project directory. Usage ----- Copy ``example.yaml`` from example_config to a directory you will use for configuration and configure to your needs. This is a yaml file with the projects to serve (see next section). Run webhaak as a service under nginx or apache and call the appropriate url's when wanted (e.g., on push to repository). webhaak can also be run from the command line: ``uvicorn webhaak:app --reload`` Be sure to export/set the ``SECRETKEY`` environment variable before running, it's needed for some management URI's. Run ``gunicorn -k uvicorn.workers.UvicornWorker`` for production. For an example of how to set up a server `see this article `_ with configuration for nginx, uvicorn, systemd, security and such. The RQ background worker can be run from the command line: ``rq worker --with-scheduler webhaak`` Url's are of the form https://hook.example.com/app// API documentation is auto-generated, and can be browsed at https://hook.example.com/docs Example configuration --------------------- See the example `hook settings`_ for syntax of how to configure repositories, commands and directories. Call webhaak on its endpoint ``/admin/SECRETKEY/get_app_key`` to generate a random new key for usage in the projects yaml file (so, for example https://hook.example.com/admin/abc123/get_app_key) By default, webhaak clones projects in a directory under its ``REPOS_CACHE_DIR`` directory, but there is support for a per-repo parent dir settings with ``repo_parent`` in the yaml. This means that webhaak then doesn't clone this repo into its default cache dir, but in a subdirectory of the directory configured in ``repo_parent``, so /repo_name (e.g., /srv/custom_parent/myproject). Server configuration ~~~~~~~~~~~~~~~~~~~~ * `supervisord RQ worker`_ which uses the `RQ config`_ * `systemd for webhaak API`_ which uses the `gunicorn config`_ * `nginx for webhaak API`_ * `more config`_ What's new? ----------- See the `Changelog`_. Developing ---------- Running in PyCharm: tbd :) .. _webhaak: https://codeberg.org/diginaut/webhaak .. _webhook: https://en.wikipedia.org/wiki/Webhook .. |PyPI version| image:: https://img.shields.io/pypi/v/webhaak.svg :target: https://pypi.python.org/pypi/webhaak/ .. |PyPI downloads| image:: https://img.shields.io/pypi/dm/webhaak.svg :target: https://pypi.python.org/pypi/webhaak/ .. |PyPI license| image:: https://img.shields.io/github/license/aquatix/webhaak.svg :target: https://pypi.python.org/pypi/webhaak/ .. |Code quality| image:: https://api.codacy.com/project/badge/Grade/e18e62698761411482716d0fceb65bfe :target: https://www.codacy.com/app/aquatix/webhaak?utm_source=github.com&utm_medium=referral&utm_content=aquatix/webhaak&utm_campaign=Badge_Grade :alt: Code Quality .. |Known vulnerabilities| image:: https://snyk.io/test/github/aquatix/webhaak/badge.svg?targetFile=requirements.txt :target: https://snyk.io/test/github/aquatix/webhaak :alt: Known vulnerabilities .. _hook settings: https://codeberg.org/diginaut/webhaak/src/branch/master/example_config/examples.yaml .. _supervisord RQ worker: https://codeberg.org/diginaut/webhaak/src/branch/master/example_config/supervisord/webhaak_rq_worker.conf .. _RQ config: https://codeberg.org/diginaut/webhaak/src/branch/master/example_config/rq_settings.example.py .. _systemd for webhaak API: https://codeberg.org/diginaut/webhaak/src/branch/master/example_config/systemd/webhaak.service .. _gunicorn config: https://codeberg.org/diginaut/webhaak/src/branch/master/example_config/gunicorn_webhaak_conf.py .. _more config: https://codeberg.org/diginaut/webhaak/src/branch/master/example_config .. _nginx for webhaak API: https://codeberg.org/diginaut/webhaak/src/branch/master/example_config/nginx/hook.example.com.conf .. _Changelog: https://codeberg.org/diginaut/webhaak/src/branch/master/CHANGELOG.md