Welcome 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:
This repository serves as a hub for Metalama. The codebase is distributed across the following repositories:
Link | License | Description |
---|---|---|
Metalama.Compiler | MIT | A Roslyn fork that introduces an extension point for arbitrary source code transformations. |
Metalama.Framework | Source Available | The core implementation of the Metalama Framework. |
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. |
Metalama.Backstage | Source Available | Implements infrastructure core for other Metalama projects, like management of configuration and temporary files. |
PostSharp.Engineering | MIT | A custom multi-repo build and CI framework. |
Metalama.Framework.RunTime | MIT | Run-time classes utilized by code generated via Metalama.Framework . |
Metalama.Extensions | MIT | Open-source, professional-grade extensions for Metalama such as dependency injection or architecture verification. |
Metalama.Patterns | MIT | Ready-to-use, open-source and professional-grade aspects, including caching, code contracts, and INotifyPropertyChanged . |
Metalama.LinqPad | MIT | A LinqPad driver for querying any C# project or solution. |
Metalama.Community | MIT | Repository housing community-contributed aspects. |
Metalama.Migration | MIT | The original PostSharp API annotated with guidelines to transition to Metalama. |
Metalama.Documentation | MIT | Source repository for documentation hosted on Metalama Docs. |
Metalama.Samples | MIT | A collection of illustrative samples available at Metalama Examples. |
Here is a graph of the dependencies between these repos:
flowchart LR
Metalama.Backstage --> Metalama.Framework
Metalama.Framework.Private --> Metalama.Framework
Metalama.Framework.RunTime --> Metalama.Framework
Metalama.Compiler --> Metalama.Framework
Metalama.Framework --> Metalama.Extensions
Metalama.Extensions --> Metalama.Migration
Metalama.Extensions --> Metalama.Samples
Metalama.Extensions --> Metalama.Patterns
Metalama.Framework --> Metalama.LinqPad
Metalama.Framework --> Metalama.Community
Metalama.Migration --> Metalama.Documentation
Metalama.Samples --> Metalama.Documentation
Metalama.Patterns --> Metalama.Documentation
master
nor the main
branch.YYYY.N
. Typically, one is stable and maintained, the other is rc
and the third is preview
.release/YYYY.N
branch.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.nuget.org
):
nuget.org
./release/2023.4.1-preview
.develop/YYYY.N
branch into release/YYYY.N
.topic/YYYY.N/whatever
and generally do PRs to develop/YYYY.N
.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.The following schema illustrates our workflow. It shows two public builds, 2023.4.1-preview
and 2023.4.2-preview
, each including two bug fixes.
%%{init: { 'gitGraph': { 'mainBranchName':'develop/2023.4', 'mainBranchOrder': 1, 'showCommitLabel': false }} }%%
gitGraph:
commit
branch release/2023.4 order:0
branch topic/2023.4/1234-bug-1 order:1
checkout topic/2023.4/1234-bug-1
commit
commit
checkout develop/2023.4
merge topic/2023.4/1234-bug-1
branch topic/2023.4/1235-bug-2 order:2
checkout topic/2023.4/1235-bug-2
commit
commit
checkout develop/2023.4
merge topic/2023.4/1235-bug-2 tag:"release/2023.4.1-preview" type:HIGHLIGHT
checkout release/2023.4
merge develop/2023.4
branch topic/2023.4/1236-bug-3 order:3
checkout topic/2023.4/1236-bug-3
commit
commit
checkout develop/2023.4
merge topic/2023.4/1236-bug-3
branch topic/2023.4/1237-bug-4 order:4
checkout topic/2023.4/1237-bug-4
commit
commit
checkout develop/2023.4
merge topic/2023.4/1237-bug-4 tag:"release/2023.4.2-preview" type:HIGHLIGHT
checkout release/2023.4
merge develop/2023.4
commit