{"id":41714811,"url":"https://github.com/wazo-platform/wazo-sdk","last_synced_at":"2026-01-24T22:08:41.586Z","repository":{"id":44627176,"uuid":"113998119","full_name":"wazo-platform/wazo-sdk","owner":"wazo-platform","description":"Developer tool kit for Wazo development","archived":false,"fork":false,"pushed_at":"2026-01-19T17:07:01.000Z","size":310,"stargazers_count":5,"open_issues_count":2,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-19T22:54:35.548Z","etag":null,"topics":["development"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wazo-platform.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-12-12T14:09:15.000Z","updated_at":"2026-01-19T17:07:04.000Z","dependencies_parsed_at":"2024-01-09T16:31:25.649Z","dependency_job_id":"2265a305-430d-4890-a076-cf9338f25bc8","html_url":"https://github.com/wazo-platform/wazo-sdk","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wazo-platform/wazo-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wazo-platform%2Fwazo-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wazo-platform%2Fwazo-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wazo-platform%2Fwazo-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wazo-platform%2Fwazo-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wazo-platform","download_url":"https://codeload.github.com/wazo-platform/wazo-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wazo-platform%2Fwazo-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28737996,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T21:19:41.845Z","status":"ssl_error","status_checked_at":"2026-01-24T21:13:38.675Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["development"],"created_at":"2026-01-24T22:08:40.975Z","updated_at":"2026-01-24T22:08:41.580Z","avatar_url":"https://github.com/wazo-platform.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wazo-sdk\n\nDeveloper tool kit for Wazo development\n\n## Installation\n\n`wdk` depends on lsyncd. It can be installed on a Debian or Ubuntu with the following\ncommands. If you're running macOS, lsyncd won't work, so you must set the `rsync_only` option to `true`.\n\n### Installing WDK\n\nThe recommended way to install `wdk` is to use a virtual environment.\n\n#### Debian Instructions\n\n```sh\nsudo apt update\nsudo apt install lsyncd virtualenvwrapper python3-dev\nsource /usr/share/virtualenvwrapper/virtualenvwrapper.sh\nmkvirtualenv --python /usr/bin/python3 wdk\n```\n\n#### macOS Instructions\n\n```sh\nbrew install rsync # install latest\nbrew install python # install python3\n# Reload your terminal session to have the latest rsync\npip install --user virtualenvwrapper\nmkdir -p ~/.virtualenvs\nvirtualenv -p python3 ~/.virtualenvs/wdk\nsource ~/.virtualenvs/wdk/bin/activate\n```\n\n#### WDK Dependencies\n\n```sh\npip install -r requirements.txt\npip install -e .\nsudo ln -s ~/.virtualenvs/wdk/bin/wdk /usr/local/bin/wdk\n```\n\nCopying configuration files. The following commands will create a copy of the sample\nconfiguration file that you can modify to fit your needs and will create a link to the\nversion controlled `project.yml` such that changes to file will be automatically applied\nwhen pulling.\n\n```sh\nmkdir -p ~/.config/wdk\ncp config.yml.sample ~/.config/wdk/config.yml\nln -s $(readlink -f project.yml) ~/.config/wdk/project.yml\n```\n\n#### Using WSL2 (Windows Subsystem for Linux 2)\n\nIf using WSL2, please be aware that you should use a filesystem that is in the Linux\npartition used by your utility virtual machine. Otherwise, inotify will not work.\n\n### On the target machine (Wazo)\n\n```sh\napt update\napt install rsync\nmkdir /usr/src/wazo  # or whatever your \u003clocal_source\u003e\n```\n\n## Configuration\n\nThe default location of the configuration file is `~/.config/wdk/config.yml` you can check\n`config.yml.sample` for an example.\n\nIf you wish to use another location for you configuration file you can use the `--config` flag\nwhen launching `wdk` or set the `WDK_CONFIG_FILE` environment variable to the config file location.\n\n### Project configuration\n\nUntil everything can be guessed from the projects source code some information have to be configured\nfor each project. This information is stored in the project file. The default project file location\nis `~/.config/wdk/project.yml`.\n\nThe project file has the following structure\n\n```yml\n\u003cproject name\u003e:\n  python3: true\n  binds:\n    \u003csource\u003e: \u003cdestination\u003e\n  clean:\n    - \u003c/file/to/remove/when/done\u003e\n  log_filename: \u003cpath-to-filename.log\u003e  # default to /var/log/\u003cproject name\u003e.log\n```\n\n* project name: This is the name that matches your local source directory. ex: `wazo-auth`\n* python3: This will do a `python3 setup.py develop` when this project is mounted.\n* binds: This is a map of source and destination file/directory that should be overridden.\n* clean: A list of files to delete when unmounting the project.\n\nNote that using bind on files will not follow changes to the file. If you use a bind on a\nconfiguration file for example the mount will have to be redone when you change the configuration\nfile.\n\nNote that new entry points will need the project to be unmounted and mounted again to be applied.\n\n## Mounting a project\n\n```sh\nwdk mount [-r] [\u003cproject1\u003e, \u003cproject2\u003e, ...\u003cprojectn\u003e]\n```\n\n## Unmounting a project\n\n```sh\nwdk umount [-r] [\u003cproject1\u003e, \u003cproject2\u003e, ...\u003cprojectn\u003e]\n```\n\n## Listing mounted projects\n\n```sh\nwdk mount --list\n```\n\n## Restarting a daemon\n\n```sh\nwdk restart [\u003cproject1\u003e, \u003cproject2\u003e]\n```\n\n## Cloning all repos from GitHub\n\n```sh\nwdk repo clone\n```\n\n`wdk` will ask for your login/password and clone every repo of the GitHub orgs listed in the config.\n\nIf you also wish to include archived repos add the `--include-archived` (or `-a`) option.\n\n```sh\nwdk repo clone --include-archived\n```\n\n## Remove orphan local repos from local_source (archived, removed)\n\n```sh\nwdk repo rm orphan\n```\n\nTo see which repos will be deleted you can first run with the option `--dry-run` (or `-d`)\n\n```sh\nwdk repo rm orphan --dry-run\n```\n\nIf you wish to exclude one or more repos from removal you can use the option `--exclude` (or `-e`)\n\n```sh\nwdk repo rm orphan --exclude nestbox-ui wazo-nexsis\n```\n\n## Tailing a log files\n\n```sh\nwdk tailf \u003cproject\u003e\n```\n\n## Listing chores and progress\n\n```sh\nwdk chores [--list]\n```\n\n## Listing details for a chore\n\n```sh\nwdk chores \u003cchore\u003e\n```\n\n## Troubleshooting\n\n### Common causes\n\nMake sure you have:\n\n* created your `\u003cremote_source\u003e` (`/usr/src/wazo` by default)\n* installed rsync on your target machine\n\n### Increase the verbosity of errors\n\n```sh\nwdk -vvv \u003ccommand\u003e\n```\n\n### Mount command is stuck\n\nCopy the lsyncd command (got from `wdk -vvv ...`) and run it with the `-nodaemon` argument, e.g.:\n\n```sh\nlsyncd -nodaemon -delay 1 -rsyncssh /home/user/git/origin/wazo-confd wazo.example.com /usr/src/wazo/wazo-confd\n```\n\n### Increasing the amount of inotify watchers\n\n* `echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf \u0026\u0026 sudo sysctl -p`\n\nFor more information: \u003chttps://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers\u003e\n\n### Finding and cleaning up leftover mounts on a system\n\n- if a mount is in place, and should be removed, but the wdk state created by the `wdk mount` is unavailable\n- if a `wdk umount` did not complete successfully, and the wdk state file is cleared or corrupted (no local trace of the remaining mounts)\n- if wanting to make sure that no mounts are present on a system, without relying on wdk\n\nIt should still be a good idea to run `wdk umount \u003cproject\u003e` before doing any further manual steps.\n\n#### Bind mounts\n\n- Remaining bind mounts can be indentified `findmnt`;\n  `findmnt` identifies bind mounts by specifying a directory along with the partition in the mount source field\n  Example:\n  ```sh\n  # findmnt --raw | grep -E '\\[.+\\]'\n  /usr/share/wazo-webhookd/alembic /dev/xvda1[/usr/src/wazo/wazo-webhookd/alembic] ext4 rw,relatime\n  ```\n- to unmount a leftover bind mount, use `umount \u003cmount target\u003e`\n  Example:\n  ```sh\n  # umount /usr/share/wazo-webhookd/alembic\n  ```\n\n#### Python development installs\n\nTL;DR: `pip list --verbose | grep -v 'dist-packages'` should show all python installs which are not from debian packages.\n\n- Debian packages use `/usr/lib/python3/dist-packages/` for python libraries;\n  `/usr/local/lib/python\u003cversion\u003e/dist-packages/` is used for \"external\" (non-package-manager) installs, which should include those development installs managed by wdk;\n- Python sources installed with `setup.py develop` create `*.egg-link` files and add entries in an `easy-install.pth` file under `/usr/local/lib/python\u003cversion\u003e/`;\n  check with `find /usr/local/lib -name '*.egg-link'` and `find /usr/local/lib -name 'easy-install.pth'`;\n- `pip list --verbose` shows all python packages installed along with their location;\n  development installs will show the source directory, e.g.:\n  ```\n  # pip list --verbose | grep -v dist-packages\n  Package                   Version     Editable project location Location                                Installer\n  ------------------------- ----------- ------------------------- --------------------------------------- ---------\n  wazo-agid                 1.1         /usr/src/wazo/wazo-agid   /usr/src/wazo/wazo-agid\n  ```\n- To remove a development install, navigate to the development sources project directory (e.g. `/usr/src/wazo/\u003cproject\u003e`), then run `python3 setup.py develop -u`;\n  If that fails or does not properly cleanup those installs, remove the egg link files manually and remove entries from the `easy-install.pth` files;\n- Python package installs may add binaries/console scripts (e.g. `wazo-*`) in `/usr/local/bin`;\n  Check these against the console scripts defined in `/usr/src/wazo/\u003cproject\u003e/setup.py`;\n\n\n## The state file\n\nThe state file contains information about the current state of wdk.\n\nThe file is located in `~/.local/cache/wdk/state`\n\n```json\n{\n    \"hosts\": {\n        \"\u003chostname\u003e\": {\n            \"mounts\": {\n                \u003cproject_name\u003e: {\n                    \"project\": \"\u003cproject name\u003e\",\n                    \"lsync_config\": \"\u003c/path/to/the/lsync/config/file\u003e\",\n                }\n            }\n        }\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwazo-platform%2Fwazo-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwazo-platform%2Fwazo-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwazo-platform%2Fwazo-sdk/lists"}