{"id":23185780,"url":"https://github.com/ludat/conferer","last_synced_at":"2025-05-08T23:30:07.830Z","repository":{"id":37791706,"uuid":"191934683","full_name":"ludat/conferer","owner":"ludat","description":"Configuration managment for haskell","archived":false,"fork":false,"pushed_at":"2025-03-10T22:29:42.000Z","size":1537,"stargazers_count":21,"open_issues_count":13,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-02T14:08:28.561Z","etag":null,"topics":["configuration","hackage","hacktoberfest","haskell"],"latest_commit_sha":null,"homepage":"https://conferer.ludat.io","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ludat.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}},"created_at":"2019-06-14T11:50:53.000Z","updated_at":"2024-10-12T08:44:25.000Z","dependencies_parsed_at":"2023-02-15T05:01:46.814Z","dependency_job_id":"264ed737-cda4-4642-9952-77a746bf4412","html_url":"https://github.com/ludat/conferer","commit_stats":{"total_commits":372,"total_committers":6,"mean_commits":62.0,"dds":"0.19354838709677424","last_synced_commit":"8e9575e05352041708339762b7c3391dc4dc30f0"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludat%2Fconferer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludat%2Fconferer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludat%2Fconferer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ludat%2Fconferer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ludat","download_url":"https://codeload.github.com/ludat/conferer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253163191,"owners_count":21864036,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["configuration","hackage","hacktoberfest","haskell"],"created_at":"2024-12-18T10:12:44.174Z","updated_at":"2025-05-08T23:30:07.762Z","avatar_url":"https://github.com/ludat.png","language":"Haskell","readme":"# Conferer\n\n[![Hackage](https://img.shields.io/hackage/v/conferer)](https://hackage.haskell.org/package/conferer)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/ludat/conferer/haskell.yml?branch=master)](https://github.com/ludat/conferer/actions)\n[![Hackage-Deps](https://img.shields.io/hackage-deps/v/conferer)](https://packdeps.haskellers.com/feed?needle=conferer)\n[![License](https://img.shields.io/github/license/ludat/conferer)](https://www.mozilla.org/en-US/MPL/2.0/)\n\nMost user oriented information you can find in the website: [conferer.ludat.io](https://conferer.ludat.io/)\n\n## Testing and CI\n\nWe have about 50 tests, mostly for the conferer package since it's the one with most of the logic\nboth sources and FromConfig packages also have some tests but they are not tested as throughtly.\n\nTo run them do:\n\n```shell\nstack test # for everything\nstack test conferer # to run only core library tests\nstack test conferer-source-json # to run json source tests\nstack test conferer-warp # to run warp fromConfig tests\n```\n\nOur ci is pretty intense as well we test with the last 5 versions of ghc (oldest being 8.0.2)\nand with the nightly provided by stack and on every platform (windows, linux and macOS).\n\nSo I'm pretty confident that if someone introduces a platform dependent bug we'll catch it.\n\n## Licensing\n\nThis library is released under the Mozilla Public License 2.0 which is a weak copyleft license.\n\nAs usual you can use this library for anything you want, the only difference is that **if you modify\nthe source and distribute** you must publish your modifications.\n\nYou can use it for privative software, GPL'd code, in house development and distribute\nit as much as you like.\n\n## Contributing\n\nIt's pretty simple, if you want to add a feature that already has a ticket just go ahead and create a PR\nreferencing the ticket.\n\nIf you want to add a new feature that doesn't have a ticket then you can add a ticket first to validate\nthat the feature makes sense and then create a PR (you can create the PR without the ticket if you feel\nlike it).\n\n## Devlopment\n\nMost of the time I use ghcid to run tests:\n\n```bash\nghcid -c='stack repl --test --main-is conferer-aeson:test:specs' --run=':main' --warnings\n```\n\nThere you can replace `conferer-aeson` with the right package and that will run those tests, and also\nreload if any of the other packages change.\n\n## The website\n\nThe website is based on [docusaurus](https://docusaurus.io/) so it's mostly generated from the\nmarkdown stored in the [/docs](/docs) directory and built and deployed using\n[netlify](https://www.netlify.com/).\n\n## Publishing new versions\n\nPublishing a new version is done using stack and parallel, beware that packages in the\nexamples directory shouldn't be published.\n\nBut sadly versions need to be bumped by hand following PVP.\n\nSo to actually publish a new version of packages:\n\n```shell\nfind -name '*.cabal' | grep -v example | parallel --tty stack upload {//}\n```\n\n## Future maybe things\n\n* Interpolate keys with other keys: `{a: \"db\", b: \"${a}_thing\"}`, getting `b`\n  will give `\"db_thing\"` (maybe) even in different levels of configuration\n* A LOT of sources\n* A LOT of `FromConfig` implementations\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fludat%2Fconferer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fludat%2Fconferer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fludat%2Fconferer/lists"}