{"id":20629714,"url":"https://github.com/agile-lab-dev/scrupulous-config","last_synced_at":"2026-04-22T10:32:51.035Z","repository":{"id":79859660,"uuid":"213444245","full_name":"agile-lab-dev/scrupulous-config","owner":"agile-lab-dev","description":"A small library/command line utility that parses/resolves two typesafe config and outputs the diffs","archived":false,"fork":false,"pushed_at":"2023-12-15T17:57:11.000Z","size":17,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-15T18:53:02.603Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scala","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/agile-lab-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2019-10-07T17:23:43.000Z","updated_at":"2019-10-21T17:55:50.000Z","dependencies_parsed_at":"2024-11-16T14:16:30.952Z","dependency_job_id":null,"html_url":"https://github.com/agile-lab-dev/scrupulous-config","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/agile-lab-dev/scrupulous-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agile-lab-dev%2Fscrupulous-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agile-lab-dev%2Fscrupulous-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agile-lab-dev%2Fscrupulous-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agile-lab-dev%2Fscrupulous-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agile-lab-dev","download_url":"https://codeload.github.com/agile-lab-dev/scrupulous-config/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agile-lab-dev%2Fscrupulous-config/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32132313,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T08:34:57.708Z","status":"ssl_error","status_checked_at":"2026-04-22T08:34:55.583Z","response_time":58,"last_error":"SSL_read: 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":[],"created_at":"2024-11-16T14:05:44.719Z","updated_at":"2026-04-22T10:32:51.020Z","avatar_url":"https://github.com/agile-lab-dev.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ScrupulousConfig\n\nScrupulousConfig is a command line tool and a library that compares two \n[lightbend config](https://github.com/lightbend/config) and outputs\na human-readable diff. \n\nScrupulousConfig is exitcode \"friendly\" this means that it returns 0 as a exit code\nif and only if the two configurations are semantically the same.\n\n## Quickstart\n\n1. Clone the repository\n1. Build the project `sbt clean assembly`\n1. Run the tool to generate your current resolved config: `java -cp \"scrupulous-config-assembly-0.1.0.jar:\u003cyour-application-artifacts\u003e\" it.agilelab.utils.scrupulous.ScrupulousConfig -t template.conf -c application.conf -o`\n1. Perform changes at `application.conf`\n1. Re-run the tool without `overwrite` flag: `java -cp \"scrupulous-config-assembly-0.1.0.jar:\u003cyour-application-artifacts\u003e\" it.agilelab.utils.scrupulous.ScrupulousConfig -t template.conf -c application.conf`\n1. Check the output and evaluate if the changes are what you expect or you have any unwanted changes reach your application config!\n\n## Usage\n\n```\nUsage: ScrupulousConfig --template \u003cpath\u003e --config \u003cpath\u003e [--defaultValue \u003ckey=value\u003e]... [--pathToIgnore \u003cstring\u003e]... [--verbose] [--overwrite]\n\nOutputs diffs between a rendered (template) lightbend config and another config still to be resolved. The template one does not get resolved, only parsed, while the second one is resolved (i.e. through reference.conf files found in the classpath and so on, like in your regular final application).\n\nOptions and flags:\n    --help\n        Display this help text.\n    --template \u003cpath\u003e, -t \u003cpath\u003e\n        The template conf to parse\n    --config \u003cpath\u003e, -c \u003cpath\u003e\n        The conf to resolve\n    --defaultValue \u003ckey=value\u003e, -d \u003ckey=value\u003e\n        Default values to be injected in the resolved config. The format must be key=value. Only unquoted strings are supported\n    --pathToIgnore \u003cstring\u003e, -i \u003cstring\u003e\n        Config paths that have to be ignored during comparison\n    --verbose, -v\n        Verbose mode\n    --overwrite, -o\n        Overwrite the template with the resolved conf\n```\n\n## Motivation\n\nDevelopers are used to test code they write, developers love to make things configurable and \nwe at [Agilelab](www.agilelab.it) make an extensive use of configurations \nand in particular [lightbend config](https://github.com/lightbend/config).\n\nWe also end up composing multiple configuration files in order to avoid \nrepeated configuration keys that are cumbersome to keep aligned.\n\nFor the \"runnable\" part of our artifacts (i.e. scala code) we configure and run unit and\nintegration tests that insure that the behavior of the applications we develop is stable and\nas expected. The same attention is not given to configuration of applications, and that is a shame!\n\nTherefore we developed this tool to make easy to resolve and then compare a template configuration \nagainst the \"current\" configuration that we are going to deploy. This means that even a small change \ninside `reference.conf` inside an artifact will be caught and highlighted to whoever is responsible of\ndeploying a new version of the application. \n\n\n## Technical details\n\nScrupulousConfig is an attempt to achieve something useful while learning something new \n(I encourage everyone to do the same from time to time). \n\nTherefore we started developing it using the \"Typelevel stack\": [cats](https://typelevel.org/cats/) \nand [cats-effect](https://typelevel.org/cats-effect/).\n\nTo manage CLI arguments we picked [monovore decline](http://ben.kirw.in/decline/).\n\nTo perform the actual semantic diff between the two configs we picked [Gnieh Diffson](https://github.com/gnieh/diffson) with spray json as a backend.\n\nFinally to test we tried out [zio-test](http://github.com/zio/zio).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagile-lab-dev%2Fscrupulous-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagile-lab-dev%2Fscrupulous-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagile-lab-dev%2Fscrupulous-config/lists"}