{"id":40570835,"url":"https://github.com/kongo2002/monodeps","last_synced_at":"2026-01-21T01:35:14.548Z","repository":{"id":306603599,"uuid":"993320666","full_name":"kongo2002/monodeps","owner":"kongo2002","description":"CLI for change detection in mono repositories","archived":false,"fork":false,"pushed_at":"2026-01-10T23:07:17.000Z","size":238,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-11T06:19:45.316Z","etag":null,"topics":["ci-cd","cicd","cli","continuous-integration","monorepo","monorepository"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kongo2002.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2025-05-30T15:31:22.000Z","updated_at":"2026-01-10T23:07:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"516c6d9e-5732-4154-b944-512f6345dab4","html_url":"https://github.com/kongo2002/monodeps","commit_stats":null,"previous_names":["kongo2002/monodeps"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/kongo2002/monodeps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kongo2002%2Fmonodeps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kongo2002%2Fmonodeps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kongo2002%2Fmonodeps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kongo2002%2Fmonodeps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kongo2002","download_url":"https://codeload.github.com/kongo2002/monodeps/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kongo2002%2Fmonodeps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28621815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T23:49:58.628Z","status":"ssl_error","status_checked_at":"2026-01-20T23:47:29.996Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["ci-cd","cicd","cli","continuous-integration","monorepo","monorepository"],"created_at":"2026-01-21T01:35:13.872Z","updated_at":"2026-01-21T01:35:14.542Z","avatar_url":"https://github.com/kongo2002.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# monodeps\n\n[![monodeps](https://github.com/kongo2002/monodeps/actions/workflows/build.yaml/badge.svg)][actions] [![Coverage Status](https://coveralls.io/repos/github/kongo2002/monodeps/badge.svg?branch=master)](https://coveralls.io/github/kongo2002/monodeps?branch=master)\n\nmonodeps is a tool to help with change detection in mono-repository setups in\norder to determine which services or folders are candidate for build and publish\nin CI/CD environments.\n\nThe program expects a list of changed/updated files on STDIN. These files are\nthe base for the change detection algorithm. The program output will be all\nservices/folders that have to be built, based on the respective `Depsfile` files\nin each service folder.\n\nFor instance, you could pipe the git diff output to monodeps:\n\n```console\ngit diff-tree --no-commit-id --name-only HEAD -r | monodeps\n```\n\n\n## Idea\n\nThe general idea of monodeps is to calculate direct and transitive dependencies\nof services by both using `Depsfile` files that explicitly list dependencies and\nalso trying to auto-discover dependencies for a list of known programming\nlanguages/frameworks. Of course, auto-discovery can only be considered \"best\neffort\" but can ease and simplify the initial setup of a mono-repository\nconsiderably.\n\n\n### Auto discovery\n\nOne of the ideas of *monodeps* is to come with \"batteries included\" as much as\npossible. For that purpose, auto discovery of service's dependencies is one of\nthe key components.\n\nAs of now, the following languages/frameworks are supported (to a varying degree\nof \"accuracy\"):\n\n | Language     | Support    | Description                                                             |\n | ---          | ---        | ---                                                                     |\n | C#           | very good  | full support for `csproj` files and directory configuration             |\n | Kustomize    | very good  | support for recursively referenced resources                            |\n | Justfile     | very good  | support for imports and submodules                                      |\n | Flutter/Dart | very good  | support for fonts, assets, workspaces, local dependencies and overrides |\n | Go           | good       | regex based, requires common prefix/namespace configuration             |\n | Protobuf     | good       | regex/prefix based support for imports                                  |\n | Makefile     | basic      | support for includes (no variable expansion though)                     |\n | Javascript   | very basic | workspace support                                                       |\n\nBy default, *monodeps* will try to auto-detect the mentioned language/frameworks\nbased on the present files and file types. Once detected, the language specific\ndependency discovery will attempt to automatically add dependencies to the ones\nthat are explicitly listed in the `Depsfile`.\n\n\n### Service discovery\n\nIn order to know what directories are build units, *monodeps* will determine\nwhich folders are potential \"service roots\". By default, every folder that\ncontains a `Depsfile` will be considered a \"service\".\n\nMoreover you can toggle via `--makefile` and `--justfile` to also consider every\nfolder that contains either a `Makefile` or `justfile` as service roots\nrespectively. Of course, in that case you are solely relying on the\nauto-discovery feature to determine dependencies.\n\n\n## Installation\n\nGo to the [releases page][releases], expand the list of assets and download a\nready-to-run binary.\n\n\n## Configuration\n\nIn terms of configuration there are two components: a global, optional\nconfiguration file on a per-repository base and a `Depsfile` for each service\nthat is built and deployed in CI/CD.\n\n\n### Depsfile\n\nThe `Depsfile` is expected in the root directory of a single service/deployment.\nAll components of the file are optional, meaning an empty file can work as well,\nconsequently fully depending on monodeps' auto-discovery capabilities.\n\n```yaml\n# Following you can list directories of other services or files this particular\n# service is depending on. Whenever any of these files or directories are part\n# of the changed input files, this service will be candidate for build and\n# publish.\ndependencies:\n  # relative paths are considered from the location of the `Depsfile`:\n  - ../../services/auth-service\n  - ../../shared/postgres\n  - ../../shared/pagination\n  # absolute paths are considered from the repository root (or the `--target`\n  # directory monodeps is being run in):\n  - /Dockerfile\n  # alternatively you can also specify a regex:\n  - regex: '\\.proto$'\n\n# Specifying the language of the respective service helps monodeps to know what\n# files to look for in terms of auto-discovering dependencies. Otherwise,\n# monodeps will try to guess the language based on the majority of files in the\n# service directory.\n#\n# Currently supported: go/golang, csharp/dotnet, dart/flutter, kustomize,\n#                      js/javascript, proto, justfile, makefile\nlanguages:\n  - go\n```\n\n\n### Global configuration\n\nThe global configuration file, `.monodeps.yaml`, is by default expected in the\nmono-repository root directory. The file is optional but allows to configure a\nfew additional aspects of monodeps:\n\n```yaml\n# You can specify a list of \"global\" dependencies that means a change to any of\n# the listed files/directories will cause a build and publish of *every* service\n# known to monodeps.\nglobal_dependencies:\n  - ./shared\n\n# You can tweak the behavior of auto-discovered dependencies of particular\n# languages.\nauto_discovery:\n  go:\n    # You have to specify the valid prefixes of go modules that identify the\n    # dependencies of other services/packages in this mono-repository.\n    #\n    # This setting is *required* for go auto-discovery of dependencies to work!\n    package_prefixes:\n      - dev.my.org/services\n  dotnet:\n    # Similarly, you can configure relevant namespace(s) that should be\n    # considered relevant to this mono-repository.\n    #\n    # This setting is *optional*.\n    package_namespaces:\n      - MyOrganization.Services\n```\n\n\n## Building\n\n*monodeps* is written in Rust and can be built using the usual `cargo`\ntoolchain:\n\n```console\ncargo build --release\n```\n\n\n[actions]: https://github.com/kongo2002/monodeps/actions/\n[releases]: https://github.com/kongo2002/monodeps/releases/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkongo2002%2Fmonodeps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkongo2002%2Fmonodeps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkongo2002%2Fmonodeps/lists"}