{"id":50474955,"url":"https://github.com/softwarefactory-project/zuul-weeder","last_synced_at":"2026-06-01T12:31:35.892Z","repository":{"id":83299312,"uuid":"479091652","full_name":"softwarefactory-project/zuul-weeder","owner":"softwarefactory-project","description":"Zuul configuration analyzer","archived":false,"fork":false,"pushed_at":"2025-03-10T19:20:55.000Z","size":715,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-10T20:19:57.972Z","etag":null,"topics":["zuul"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/softwarefactory-project.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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}},"created_at":"2022-04-07T17:50:07.000Z","updated_at":"2025-03-10T19:17:06.000Z","dependencies_parsed_at":"2025-01-28T15:24:31.636Z","dependency_job_id":"95864543-a679-4091-81b7-6ee47e071017","html_url":"https://github.com/softwarefactory-project/zuul-weeder","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/softwarefactory-project/zuul-weeder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fzuul-weeder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fzuul-weeder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fzuul-weeder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fzuul-weeder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softwarefactory-project","download_url":"https://codeload.github.com/softwarefactory-project/zuul-weeder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fzuul-weeder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33775857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["zuul"],"created_at":"2026-06-01T12:31:32.896Z","updated_at":"2026-06-01T12:31:35.880Z","avatar_url":"https://github.com/softwarefactory-project.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zuul-weeder: Zuul configuration analyzer\n\nUse this service to inspect the configurations objects loaded in a [zuul](https://zuul-ci.org) system.\n\n\n## Overview and scope\n\nZuul Weeder analyzes the configuration objects such as jobs and nodesets and provides a search interface for:\n\n- Depencencies: what depends on an object.\n- Requirements: what is needed by an object.\n- URL of the configuration files that contains the object.\n\nZuul Weeder leverage a generic dependency graph using the data found in the ZooKeeper database\nto collect every configuration elements used by any tenants.\nThe goal is to help evaluate the impact of a configuration change,\nfor example, when removing a node label or a repository.\n\n\n## Usage\n\nThe service provide two functions:\n\n- `/search/$name` returns the list of object matching the requested name.\n- `/object/$type/$name` returns\n  - the list of configuration file url that directly defines or uses the object,\n  - the list of related objects that are reachable, either by requirement or by dependency.\n\nFor example, by visiting `/search/centos`, the service returns:\n\n- job tripleo-centos\n- nodeset centos\n- label cloud-centos\n\nAnd by visiting `/object/nodeset/centos`, the service returns:\n\n- The list of zuul.yaml file url that contains a nodeset named `centos`.\n- The list of jobs and project that depends on this nodeset.\n- The list of node label name that is required by this nodeset.\n\nThe results can be scoped to a specific tenant by using the `/tenant/$tenant` url prefix.\n\n\n## Setup\n\nStart the service at `http://localhost:9001` (needs access to the zuul.conf):\n\n```\npodman run -p 9001:9001 -v /etc/zuul:/etc/zuul:ro --rm ghcr.io/softwarefactory-project/zuul-weeder\n```\n\nServe behind a sub-path using this argument `-e WEEDER_ROOT_URL=/weeder/` and this httpd.conf:\n\n```\n\u003cLocation \"/weeder\"\u003e\n    ProxyPass http://weeder-host:9001\n    ProxyPassReverse http://weeder-host:9001\n\u003c/Location\u003e\n```\n\nSetup monitoring by adding this prometheus configuration:\n\n```\nscrape_configs:\n  - job_name: weeder\n    static_configs:\n      - targets:\n          - weeder-host:9001\n```\n\nConfigure grafana dashboard by running `./bin/create-dashboard`\n\n\n## Roadmap\n\nHere are some planned features:\n\n- Add a project name object type, to resolve global project configuration (e.g. with a name regexp) and to create a graph connection for all the matching repository names.\n- Connect the graphs from multiple zuul-weeder service to analyse the configuration cross deployments.\n- Display the weeds, e.g. the dead configuration object that are unreachable.\n\nCheckout the [Developper Guide](./CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fzuul-weeder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftwarefactory-project%2Fzuul-weeder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fzuul-weeder/lists"}