{"id":20247678,"url":"https://github.com/postsharp/metalama","last_synced_at":"2025-03-12T22:07:47.954Z","repository":{"id":45164862,"uuid":"314225240","full_name":"postsharp/Metalama","owner":"postsharp","description":"Metalama is a Roslyn-based meta-programming framework. Use this repo to report bugs or ask questions.","archived":false,"fork":false,"pushed_at":"2024-04-10T06:33:52.000Z","size":437,"stargazers_count":158,"open_issues_count":15,"forks_count":4,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-05-16T01:24:18.860Z","etag":null,"topics":["compiler","csharp","dotnet","metalama"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/postsharp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-11-19T11:20:17.000Z","updated_at":"2024-06-21T05:44:02.983Z","dependencies_parsed_at":"2022-07-18T09:09:21.414Z","dependency_job_id":"f601926a-0a94-4b53-aa82-1ccf3a193f5d","html_url":"https://github.com/postsharp/Metalama","commit_stats":{"total_commits":66,"total_committers":7,"mean_commits":9.428571428571429,"dds":0.2727272727272727,"last_synced_commit":"51b8a9b0879b49829513ac5d85b05c12a2afea93"},"previous_names":["postsharp/caravela"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postsharp%2FMetalama","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postsharp%2FMetalama/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postsharp%2FMetalama/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postsharp%2FMetalama/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/postsharp","download_url":"https://codeload.github.com/postsharp/Metalama/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243301127,"owners_count":20269286,"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":["compiler","csharp","dotnet","metalama"],"created_at":"2024-11-14T09:38:47.037Z","updated_at":"2025-03-12T22:07:47.933Z","avatar_url":"https://github.com/postsharp.png","language":null,"readme":"\u003cp align=\"center\"\u003e\n\u003cimg width=\"450\" src=\"images/metalama-by-postsharp.svg\" alt=\"Metalama logo\" /\u003e\n\u003c/p\u003e\n\n[![Slack](https://img.shields.io/badge/Slack-4A154B?label=Chat%20with%20us\u0026style=flat\u0026logo=slack\u0026logoColor=white)](https://www.postsharp.net/slack)\n\nWelcome to Metalama, a Roslyn-based framework for code generation and validation, designed to enhance your code quality and productivity in C#. Metalama stands on three foundational principles:\n\n* *Boilerplate Reduction*: Harness the power of aspect-oriented programming to dynamically generate repetitive code during compilation. This ensures your source code stays concise and clear.\n* *Architecture as Code*: Receive real-time validation of your code against your architectural guidelines, patterns, and conventions. Say goodbye to waiting for code reviews.\n* *Tailored Coding Assistance*: Arm your team with personalized code fixes and refactorings.\n\n\n## Quick Links\n\n- 🌐 [Metalama Website](https://www.postsharp.net/metalama)\n- 📖 [Documentation](https://doc.postsharp.net/metalama)\n- 📝 [Annotated Examples](https://doc.postsharp.net/metalama/examples)\n- 🎥 [Tutorial Videos](https://doc.postsharp.net/metalama/videos)\n- 🐞 [Bug Reports](https://github.com/postsharp/Metalama/issues)\n- 💬 [Discussions](https://github.com/postsharp/Metalama/discussions)\n- 📜 [Detailed Changelog](https://github.com/orgs/postsharp/discussions/categories/changelog)\n- 📢 [Release Notes](https://doc.postsharp.net/metalama/conceptual/aspects/release-notes)\n- ✨ [Visual Studio Extension](https://marketplace.visualstudio.com/items?itemName=PostSharpTechnologies.PostSharp)\n\n\n## Repositories\n\nThis repository serves as a hub for Metalama. The codebase is distributed across the following repositories:\n\n| Link                                                                           | License          | Description                                                                                                                                     |\n| ------------------------------------------------------------------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |\n| [Metalama.Compiler](https://github.com/postsharp/Metalama.Compiler)           | MIT              | A [Roslyn](https://github.com/dotnet/roslyn) fork that introduces an extension point for arbitrary source code transformations. |\n| [Metalama.Framework](https://github.com/postsharp/Metalama.Framework)         | Source Available | The core implementation of the Metalama Framework.                                                                                               |\n| [Metalama.Framework.Private](https://github.com/postsharp/Metalama.Framework.Private)         | Proprietary | Access to this repository is required to build `Metalama.Framework` and is granted to customers who have an active Source Code Subscription.  |\n| [Metalama.Backstage](https://github.com/postsharp/Metalama.Backstage)        | Source Available | Implements infrastructure core for other Metalama projects, like management of configuration and temporary files.\n| [PostSharp.Engineering](https://github.com/postsharp/PostSharp.Engineering)    | MIT              | A custom multi-repo build and CI framework.                                                                                                       |\n| [Metalama.Framework.RunTime](https://github.com/postsharp/Metalama.Framework.RunTime) | MIT  | Run-time classes utilized by code generated via `Metalama.Framework`.                                                                            |\n| [Metalama.Extensions](https://github.com/postsharp/Metalama.Extensions)        | MIT              | Open-source, professional-grade extensions for Metalama such as dependency injection or architecture verification.                                                                                        |\n| [Metalama.Patterns](https://github.com/postsharp/Metalama.Patterns)            | MIT              | Ready-to-use, open-source and professional-grade aspects, including caching, code contracts, and `INotifyPropertyChanged`.                                          |\n| [Metalama.LinqPad](https://github.com/postsharp/Metalama.LinqPad)              | MIT              | A LinqPad driver for querying any C# project or solution.                                                                                        |\n| [Metalama.Community](https://github.com/postsharp/Metalama.Community)          | MIT              | Repository housing community-contributed aspects.                                                                                                |\n| [Metalama.Migration](https://github.com/postsharp/Metalama.Migration)          | MIT              | The original PostSharp API annotated with guidelines to transition to Metalama.                                                        |\n| [Metalama.Documentation](https://github.com/postsharp/Metalama.Documentation)  | MIT              | Source repository for documentation hosted on [Metalama Docs](https://doc.postsharp.net/metalama).                                                       |\n| [Metalama.Samples](https://github.com/postsharp/Metalama.Samples)              | MIT              | A collection of illustrative samples available at [Metalama Examples](https://doc.postsharp.net/metalamaexamples).                                        |\n\n\n## Dependencies\n\nHere is a graph of the dependencies between these repos:\n\n```mermaid\n\nflowchart LR\n    \nMetalama.Backstage --\u003e Metalama.Framework\nMetalama.Framework.Private --\u003e Metalama.Framework\nMetalama.Framework.RunTime --\u003e Metalama.Framework\nMetalama.Compiler --\u003e Metalama.Framework\nMetalama.Framework --\u003e Metalama.Extensions\nMetalama.Extensions --\u003e Metalama.Migration\nMetalama.Extensions --\u003e Metalama.Samples\nMetalama.Extensions --\u003e Metalama.Patterns\nMetalama.Framework --\u003e Metalama.LinqPad\nMetalama.Framework --\u003e Metalama.Community\nMetalama.Migration --\u003e Metalama.Documentation\nMetalama.Samples --\u003e Metalama.Documentation\nMetalama.Patterns --\u003e Metalama.Documentation\n\n```\n\n## Our Git flow\n\n* We don't use the `master` nor the `main` branch.\n* We are generally concurrently working on three versions, numbered `YYYY.N`. Typically, one is stable and maintained, the other is `rc` and the third is `preview`.\n* You should generally check out the `release/YYYY.N` branch.\n* Our continuous integration branches are `develop/YYYY.N`. They generally depend on unpublished build artifacts of dependencies and therefore _cannot_ be easily built by the public except by building the dependencies locally. Our `develop/YYYY.N` builds can occasionally be broken.\n* When we publish artifacts (for instance to `nuget.org`):\n  - We update the version of package references to the ones just uploaded to `nuget.org`.\n  - We mark the released commit with the precise package version, e.g. `/release/2023.4.1-preview`.\n  - We merge the `develop/YYYY.N` branch into `release/YYYY.N`.\n* We work on branches named `topic/YYYY.N/whatever` and generally do PRs to `develop/YYYY.N`.\n* After any merge to an \"old\" `develop/YYYY.N`, the \"old\" `develop/YYYY.N` is automatically merged into the newer `develop/YYYY.N+1`. A merge commit, named `merge/YYYY.N+1/commit-123456` is automatically created, tested, if possible merged, then deleted.\n* We use a private TeamCity service for our continuous integration.\n\n### Illustration\n\nThe following schema illustrates our workflow. It shows two public builds, `2023.4.1-preview` and `2023.4.2-preview`, each including two bug fixes.\n\n[//]: # (The \"commit\" before the first \"merge develop/2023.4\" is a workaround for https://github.com/mermaid-js/mermaid/issues/5898 and should be removed when fixed.)\n\n```mermaid\n%%{init: { 'gitGraph': { 'mainBranchName':'develop/2023.4', 'mainBranchOrder': 1, 'showCommitLabel': false }} }%%\n\ngitGraph:\n    commit\n    branch release/2023.4 order:0\n    branch topic/2023.4/1234-bug-1 order:1\n    checkout topic/2023.4/1234-bug-1\n    commit\n    commit\n    checkout develop/2023.4\n    merge topic/2023.4/1234-bug-1\n    branch topic/2023.4/1235-bug-2  order:2\n    checkout topic/2023.4/1235-bug-2\n    commit\n    commit\n    checkout develop/2023.4\n    merge topic/2023.4/1235-bug-2 tag:\"release/2023.4.1-preview\" type:HIGHLIGHT\n    checkout release/2023.4\n    commit \n    merge develop/2023.4\n    branch topic/2023.4/1236-bug-3 order:3\n    checkout topic/2023.4/1236-bug-3\n    commit\n    commit\n    checkout develop/2023.4\n    merge topic/2023.4/1236-bug-3\n    branch topic/2023.4/1237-bug-4 order:4\n    checkout topic/2023.4/1237-bug-4\n    commit\n    commit\n    checkout develop/2023.4\n    merge topic/2023.4/1237-bug-4 tag:\"release/2023.4.2-preview\" type:HIGHLIGHT\n    checkout release/2023.4\n    merge develop/2023.4\n    \ncommit\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpostsharp%2Fmetalama","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpostsharp%2Fmetalama","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpostsharp%2Fmetalama/lists"}