{"id":21408540,"url":"https://github.com/cloudnimble/breakdance","last_synced_at":"2025-04-10T03:54:13.793Z","repository":{"id":44437185,"uuid":"91226199","full_name":"CloudNimble/Breakdance","owner":"CloudNimble","description":"Helping you manage the dangerous dance of shipping public APIs.","archived":false,"fork":false,"pushed_at":"2025-04-04T07:13:25.000Z","size":3453,"stargazers_count":19,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-10T03:54:04.076Z","etag":null,"topics":["dotnet","microsoft","nuget","restier","testing-framework"],"latest_commit_sha":null,"homepage":"","language":"C#","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/CloudNimble.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":["CloudNimble"]}},"created_at":"2017-05-14T07:07:48.000Z","updated_at":"2025-04-06T20:53:39.000Z","dependencies_parsed_at":"2023-12-01T23:24:15.541Z","dependency_job_id":"cc45268b-1768-4424-ab98-18b7046f4122","html_url":"https://github.com/CloudNimble/Breakdance","commit_stats":{"total_commits":175,"total_committers":5,"mean_commits":35.0,"dds":0.3542857142857143,"last_synced_commit":"574668df0153aa37b938effbe95651a591d4e8ad"},"previous_names":["advancedrei/breakdance"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CloudNimble%2FBreakdance","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CloudNimble%2FBreakdance/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CloudNimble%2FBreakdance/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CloudNimble%2FBreakdance/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CloudNimble","download_url":"https://codeload.github.com/CloudNimble/Breakdance/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248154999,"owners_count":21056542,"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":["dotnet","microsoft","nuget","restier","testing-framework"],"created_at":"2024-11-22T17:16:45.865Z","updated_at":"2025-04-10T03:54:13.771Z","avatar_url":"https://github.com/CloudNimble.png","language":"C#","funding_links":["https://github.com/sponsors/CloudNimble"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eBreakdance - by CloudNimble\u003c/h1\u003e \n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  A testing framework for managing the dangerous dance of shipping public APIs. Built by @CloudNimble.\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://cloud.githubusercontent.com/assets/1657085/26813617/6489768e-4a4d-11e7-8a49-3864333ebde9.png\" alt=\"Breakdance Logo\"\u003e\n\n\u003cbr\u003e\n\n[Website][website-link] \u0026nbsp;\u0026nbsp;\u0026nbsp; | \u0026nbsp;\u0026nbsp;\u0026nbsp; [Releases][release-link] \u0026nbsp;\u0026nbsp;\u0026nbsp;| \u0026nbsp;\u0026nbsp;\u0026nbsp; [Documentation][doc-link] \u0026nbsp;\u0026nbsp;\u0026nbsp;\n\n[![Build Status][devops-rtm-build-img]][devops-rtm-build]\n[![Release Status][devops-rtm-release-img]][devops-rtm-release]\n[![Twitter][twitter-img]][twitter-intent]\n\n\u003c/div\u003e\n\n## Introduction\nManaging breakage in public APIs is a HUGE pain in the ass. With the current tools, you never really know when you're going to break someone. And with NuGet\nmaking weak references mainstream, even Microsoft breaks people... sometimes without realizing it for months.\n\nIt's time to change all that. Breakdance integrates surface testing into your build and deployment process, in just a few lines of code. Instead of waiting until GitHub issues break your inbox, Breakdance will break YOUR build first, forcing you to make critical decisions about how to keep your customers happy BEFORE they grab their pitchforks.\n\n### Components\n- **Breakdance.AspNetCore:**     ASP.NET Core assemblies.\n- **Breakdance.Assemblies:**     .NET assemblies.\n- **Breakdance.Blazor:**         Blazor assemblies.\n- **Breakdance.WebApi:**         WebApi services.\n- **Breakdance.OData:**          OData services.\n- **Breakdance.Restier:**        Restier-based OData services.\n\n### Ecosystem\n\n| Project | Release | Latest | Description |\n|---------|--------|--------|-------------|\n| [Breakdance.AspNetCore][bd-aspnetcore-nuget]    | [![bd-aspnetcore-rtm][bd-aspnetcore-rtm-nuget-img]][bd-aspnetcore-nuget] | [![bd-aspnetcore-ci][bd-aspnetcore-ci-nuget-img]][bd-aspnetcore-nuget] | ASP.NET Core assemblies.\n| [Breakdance.AspNetCore.SignalR][bd-aspnetcore-sigr-nuget]    | [![bd-aspnetcore-sigr-rtm][bd-aspnetcore-sigr-rtm-nuget-img]][bd-aspnetcore-sigr-nuget] | [![bd-aspnetcore-sigr-ci][bd-aspnetcore-sigr-ci-nuget-img]][bd-aspnetcore-sigr-nuget] | ASP.NET Core assemblies for SignalR\n| [Breakdance.Assemblies][bd-assemblies-nuget]    | [![bd-assemblies-rtm][bd-assemblies-rtm-nuget-img]][bd-assemblies-nuget] | [![bd-assemblies-ci][bd-assemblies-ci-nuget-img]][bd-assemblies-nuget] | .NET assemblies.\n| [Breakdance.Blazor][bd-blazor-nuget]    | [![bd-blazor-rtm][bd-blazor-rtm-nuget-img]][bd-blazor-nuget] | [![bd-blazor-ci][bd-blazor-ci-nuget-img]][bd-blazor-nuget] | Blazor assemblies.\n| [Breakdance.Extensions.MSTest2][bd-mstest-nuget]    | [![bd-mstest-rtm][bd-mstest-rtm-nuget-img]][bd-mstest-nuget] | [![bd-mstest-ci][bd-mstest-ci-nuget-img]][bd-mstest-nuget] | Microsoft Test assemblies.\n| [Breakdance.Tools][bd-tools-nuget]    | [![bd-tools-rtm][bd-tools-rtm-nuget-img]][bd-tools-nuget] | [![bd-tools-ci][bd-tools-ci-nuget-img]][bd-tools-nuget]  | CLI tools  for Breakdance.\n| [Breakdance.WebApi][bd-webapi-nuget]    | [![bd-webapi-rtm][bd-webapi-rtm-nuget-img]][bd-webapi-nuget] | [![bd-webapi-ci][bd-webapi-ci-nuget-img]][bd-webapi-nuget] | WebApi services.\n\n## Installation\n\nYou can install Testier from NuGet by opening up Package Manager and typing `install-package CloudNimble.Breakdance -pre`. Please note that the current version \nrequires [CloudNimble's flavor of Restier](https://github.com/robertmclaws/RESTier), which we are currently shipping because Microsoft has not officially updated \ntheir NuGet packages for quite some time.\n\n## Using Breakdance\n[TBD]\n\n### Assembly-Level Tests\n[TBD]\n\n### WebApi Tests\n[TBD]\n\n### WebApi OData Tests\n[TBD]\n\n### Restier Tests\nBecause Restier uses a set of built-in conventions to reflect over your API and _automagically_ find the methods it needs, it can be difficult to know what methods the system is expecting to find.\n\nTestier uses a copy of the same convention lookup code, and the same method naming patterns, to generate a list of all possible method names. It can also generate a \"Visibility Matrix\" for your API, showing you which ones it expected, and which ones it found. That matrix looks something like this:\n\n```\n--------------------------------------------------\nFunction Name                            |   Found\n--------------------------------------------------\nCanInsertPlayers                         |   False\nCanUpdatePlayers                         |   False\nCanDeletePlayers                         |   False\nOnInsertingPlayers                       |   False\nOnUpdatingPlayers                        |   False\nOnDeletingPlayers                        |   False\nOnFilterPlayer                           |   False\nOnInsertedPlayers                        |   False\nOnUpdatedPlayers                         |   False\nOnDeletedPlayers                         |   False\nCanInsertSports                          |   False\nCanUpdateSports                          |   False\nCanDeleteSports                          |   False\nOnInsertingSports                        |   False\nOnUpdatingSports                         |   False\nOnDeletingSports                         |   False\nOnFilterSport                            |    True\nOnInsertedSports                         |    True\nOnUpdatedSports                          |   False\nOnDeletedSports                          |   False\nCanInsertTeams                           |   False\nCanUpdateTeams                           |   False\nCanDeleteTeams                           |   False\nOnInsertingTeams                         |   False\nOnUpdatingTeams                          |   False\nOnDeletingTeams                          |   False\nOnFilterTeam                             |   False\nOnInsertedTeams                          |   False\nOnUpdatedTeams                           |   False\nOnDeletedTeams                           |   False\nCanExecuteTestMethod                     |   False\nOnExecutingTestMethod                    |   False\nOnExecutedTestMethod                     |   False\n--------------------------------------------------\n```\n\nThe included unit tests show how to take this information, and build tests that compare a baseline against your current version. That way, if something changes, your tests break, and you're forced to understand what changed.\n\n### Swagger Tests\n[TBD]\n\n## Known Issues\n\n- Testier can't currently map OData functions that are bound to datasets. If you know how to do this, please feel free to submit a PR.\n\n## Feedback\n\nFeel free to send us feedback on [Twitter][twitter-link] or [file an issue][issues-link]. Feature requests are always welcome. If you wish to contribute, please take a quick look at the [contribution guidelines](./.github/CONTRIBUTING.md).\n\n## Code of Conduct\n\nPlease adhere to our [Code of Conduct](./CODE_OF_CONDUCT.md) during any interactions with \nCloudNimble team members and community members. It is strictly enforced on all official CloudNimble\nrepositories, websites, and resources. If you encounter someone violating\nthese terms, please let us know via DM on [Twitter][twitter-link] or via email at opensource@nimbleapps.cloud and we will address it as soon as possible.\n\n## Contributors\n\nThank you to all the people who have contributed to the project: [Source code Contributors][contri-link]\n\nPlease visit our [Contribution](./.github/CONTRIBUTING.md) document to start contributing to our project.\n\n\u003c!-- Base Link References --\u003e\n\n[website-link]: https://nimbleapps.cloud/\n[project-link]: https://github.com/CloudNimble/Breakdance/\n[release-link]: https://github.com/CloudNimble/Breakdance/releases\n[doc-link]: https://github.com/CloudNimble/Breakdance/tree/main/docs\n[contri-link]: https://github.com/CloudNimble/Breakdance/graphs/contributors\n[issues-link]: https://github.com/CloudNimble/Breakdance/issues\n\n[twitter-link]: https://twitter.com/cloud_nimble\n[twitter-intent]:https://twitter.com/intent/tweet?via=cloud_nimble\u0026text=Check%20out%20Breakdance%2C%20the%20framework%20for%20reliable%2C%20distributed%2C%20scalable%2C%20cross-platform%20event%20processing%20on%20.NET.\u0026hashtags=dotnetcore%2Cazure\n[twitter-img]:https://img.shields.io/badge/share-on%20twitter-55acee.svg?style=for-the-badge\u0026logo=twitter\n\n\u003c!-- CI/CD Link References --\u003e\n\n[devops-rtm-build]:https://dev.azure.com/cloudnimble/Breakdance/_build/latest?definitionId=10\n[devops-rtm-release]:https://dev.azure.com/cloudnimble/Breakdance/_release?view=all\u0026definitionId=2\n\n[devops-rtm-build-img]:https://img.shields.io/azure-devops/build/cloudnimble/breakdance/10.svg?style=for-the-badge\u0026logo=azuredevops\n[devops-rtm-release-img]:https://img.shields.io/azure-devops/release/cloudnimble/7f9e2e9c-c38f-43dd-a5f2-0b909c883db2/2/2.svg?style=for-the-badge\u0026logo=azuredevops\n\n\u003c!-- Ecosystem Link References --\u003e\n\n[bd-aspnetcore-nuget]: https://www.nuget.org/packages/Breakdance.AspNetCore\n[bd-aspnetcore-sigr-nuget]: https://www.nuget.org/packages/Breakdance.AspNetCore.SignalR\n[bd-assemblies-nuget]: https://www.nuget.org/packages/Breakdance.Assemblies\n[bd-blazor-nuget]: https://www.nuget.org/packages/Breakdance.Blazor\n[bd-mstest-nuget]: https://www.nuget.org/packages/Breakdance.Extensions.MSTest2\n[bd-tools-nuget]: https://www.nuget.org/packages/Breakdance.Tools\n[bd-webapi-nuget]: https://www.nuget.org/packages/Breakdance.WebApi\n\n\u003c!-- Badges --\u003e\n[bd-aspnetcore-rtm-nuget-img]: https://img.shields.io/nuget/v/Breakdance.AspNetCore?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-aspnetcore-sigr-rtm-nuget-img]: https://img.shields.io/nuget/v/Breakdance.AspNetCore.SignalR?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-assemblies-rtm-nuget-img]: https://img.shields.io/nuget/v/Breakdance.Assemblies?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-blazor-rtm-nuget-img]: https://img.shields.io/nuget/v/Breakdance.Blazor?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-mstest-rtm-nuget-img]: https://img.shields.io/nuget/v/Breakdance.Extensions.MSTest2?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-tools-rtm-nuget-img]: https://img.shields.io/nuget/v/Breakdance.Tools?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-webapi-rtm-nuget-img]: https://img.shields.io/nuget/v/Breakdance.WebApi?label=\u0026logo=NuGet\u0026style=for-the-badge\n\n[bd-aspnetcore-ci-nuget-img]: https://img.shields.io/nuget/vpre/Breakdance.AspNetCore?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-aspnetcore-sigr-ci-nuget-img]: https://img.shields.io/nuget/vpre/Breakdance.AspNetCore.SignalR?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-assemblies-ci-nuget-img]: https://img.shields.io/nuget/vpre/Breakdance.Assemblies?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-blazor-ci-nuget-img]: https://img.shields.io/nuget/vpre/Breakdance.Blazor?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-mstest-ci-nuget-img]: https://img.shields.io/nuget/vpre/Breakdance.Extensions.MSTest2?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-tools-ci-nuget-img]: https://img.shields.io/nuget/vpre/Breakdance.Tools?label=\u0026logo=NuGet\u0026style=for-the-badge\n[bd-webapi-ci-nuget-img]: https://img.shields.io/nuget/vpre/Breakdance.WebApi?label=\u0026logo=NuGet\u0026style=for-the-badge\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudnimble%2Fbreakdance","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudnimble%2Fbreakdance","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudnimble%2Fbreakdance/lists"}