ADotNet 1.0.0
See the version list below for details.
dotnet add package ADotNet --version 1.0.0
NuGet\Install-Package ADotNet -Version 1.0.0
<PackageReference Include="ADotNet" Version="1.0.0" />
paket add ADotNet --version 1.0.0
#r "nuget: ADotNet, 1.0.0"
// Install ADotNet as a Cake Addin #addin nuget:?package=ADotNet&version=1.0.0 // Install ADotNet as a Cake Tool #tool nuget:?package=ADotNet&version=1.0.0
ADotNet
<p align="center"> <img width="25%" height="25%" src="https://github.com/hassanhabib/ADotNet/blob/master/ADotNet/ADotNet.png"> </p>
ADotNet (ADO Dot Net)
ADotNet is a.NET library that enables software engineers on the .NET platform to develop AzureDevOps pipelines in C#.
Introduction
There's an issue today with developing Azure DevOps pipelines with YAML. The technology/language can be quite challenging to learn and predict what the available options are when it comes to orchestrating build steps.
ADotNet presents a solution to pipeline tasks as C# models. Predefined, with all the options available to orchestrate a pipeline without having to search for the available options on the documentation websites.
How It Works
Here's how this library works. Let's assume you want to write a task in your pipeline that restores packages for your ASP.NET Core project. Today, engineers write the following command in YAML:
- task: DotNetCoreCLI@2
displayName: 'Restore'
inputs:
command: 'restore'
feedsToUse: 'select'
The problem with the YAML code above, is that it's not that easy to remember. Even while I'm starting right at it right now, I just can't seem to remember DotNetCoreCLI@2
and what does all of this means to someone who is a full-stack engineer trying to get off the ground as soon, easy and as fast as possible? here's how the very same code above would look like in ADotNet:
new DotNetExecutionTask
{
DisplayName = "Restore",
Inputs = new DotNetExecutionTasksInputs
{
Command = Command.restore,
FeedsToUse = Feeds.select
}
}
The options here are available with the power of stongly typed options and Enums. You don't have to think about what needs to go there. It's already directing you towards the options you need to get going with your pipelines.
Dependencies & Kudos
This library relies heavily on YamlDotNet which is an amazing .NET library developed by Antoine Aubry along with so many other amazing contributors who made C# to YAML possible.
The library also leverages native .NET System.IO.File
functionality to write files to a destination of the consumer's choosing.
The Architecture
The library's architecture follows The Standard. Breaking it's capabilities into brokers, services and clients. here's a low-level architecture view of how it works:
<p align="center"> <img src="https://user-images.githubusercontent.com/1453985/124557013-d8d8b300-dded-11eb-8fa0-4805a7e5259b.png"> </p>
The abstraction of the dependencies should allow a future expansion and pluggability for any other C# to YAML components easily.
Real-Life Example
Here's something I'm using in my open source OtripleS project which is built in ASP.NET Core 6.0:
var adoClient = new ADotNetClient();
var aspNetPipeline = new AspNetPipeline
{
TriggeringBranches = new List<string>
{
"master"
},
VirtualMachinesPool = new VirtualMachinesPool
{
VirutalMachineImage = VirtualMachineImages.Windows2019
},
ConfigurationVariables = new ConfigurationVariables
{
BuildConfiguration = BuildConfiguration.Release
},
Tasks = new List<BuildTask>
{
new UseDotNetTask
{
DisplayName = "Use DotNet 6.0",
Inputs = new UseDotNetTasksInputs
{
Version = "6.0.100-preview.3.21202.5",
IncludePreviewVersions = true,
PackageType = PackageType.sdk
}
},
new DotNetExecutionTask
{
DisplayName = "Restore",
Inputs = new DotNetExecutionTasksInputs
{
Command = Command.restore,
FeedsToUse = Feeds.select
}
},
new DotNetExecutionTask
{
DisplayName = "Build",
Inputs = new DotNetExecutionTasksInputs
{
Command = Command.build,
}
},
new DotNetExecutionTask
{
DisplayName = "Test",
Inputs = new DotNetExecutionTasksInputs
{
Command = Command.test,
Projects = "**/*Unit*.csproj"
}
},
new DotNetExecutionTask
{
DisplayName = "Publish",
Inputs = new DotNetExecutionTasksInputs
{
Command = Command.publish,
PublishWebProjects = true
}
}
}
};
adoClient.SerializeAndWriteToFile(aspNetPipeline, "../../azure-pipelines.yaml");
And here's the product of this code:
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
steps:
- task: UseDotNet@2
displayName: 'Use DotNet 6.0'
inputs:
packageType: 'sdk'
version: '6.0.100-preview.3.21202.5'
includePreviewVersions: true
- task: DotNetCoreCLI@2
displayName: 'Restore'
inputs:
command: 'restore'
feedsToUse: 'select'
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
- task: DotNetCoreCLI@2
displayName: 'Test'
inputs:
command: 'test'
projects: '**/*Unit*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Publish'
inputs:
command: 'publish'
publishWebProjects: true
And finally, here's the results:
Some Odd Decisions
I have intentionally limited some of the capabilities in this library to ensure any contributions go to this repository so everyone can benefit from the updates. For instance, I could've easily made selecting a virtual machine as a string input to allow for anyone to pass in whatever vm they need. But the problem with that is for those who will need the same thing and have to do the same research to find the right VM for their build.
I'm intentionally making my library less usable to ensure this level of hive mindset is reflected in our changes in here.
If you have any suggestions, comments or questions, please feel free to contact me on: <br /> Twitter: @hassanrezkhabib <br /> LinkedIn: hassanrezkhabib <br /> E-Mail: hassanhabib@live.com <br />
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- YamlDotNet (>= 11.2.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (5)
Showing the top 5 popular GitHub repositories that depend on ADotNet:
Repository | Stars |
---|---|
hassanhabib/OtripleS
This is an open source schooling system, dedicated to provide a better experience for schools needing a management and communication and tutoring system all in one place. This project is aiming toward directing all the software development funds and hours to families in need, the idea of the project is to allow schools to use the system as long as the software funds in the school are directed towards financially disadvantaged families and students.
|
|
hassanhabib/Standard.AI.OpenAI
Standard-Compliant .NET library for Open AI
|
|
hassanhabib/RESTFulSense
A RESTFul operations client that serializes responses and throws meaningful exceptions for >= 400 status codes.
|
|
OData/OData.Neo
|
|
hassanhabib/PrettyBlazor
PrettyBlazor is a Blazor .NET library that enables Blazor developers to use control structures in their Blazor applications through markup without having to use obtrusive C# code to iterate or select particular fragments.
|
Version | Downloads | Last updated |
---|---|---|
3.0.4 | 3,365 | 9/6/2024 |
3.0.3 | 10,228 | 5/21/2024 |
3.0.2 | 15,150 | 6/28/2023 |
3.0.1 | 529 | 6/9/2023 |
3.0.0 | 325 | 6/6/2023 |
2.2.0.2 | 1,262 | 5/28/2023 |
2.2.0.1 | 207 | 5/28/2023 |
2.2.0 | 262 | 5/28/2023 |
2.1.2 | 14,206 | 7/4/2022 |
2.1.1 | 525 | 7/4/2022 |
2.1.0 | 504 | 7/4/2022 |
2.0.5 | 8,835 | 2/23/2022 |
2.0.4 | 2,157 | 2/5/2022 |
2.0.3 | 3,687 | 11/2/2021 |
2.0.2 | 430 | 11/2/2021 |
2.0.1 | 1,631 | 10/7/2021 |
2.0.0 | 450 | 10/7/2021 |
1.2.0 | 1,577 | 8/4/2021 |
1.1.0 | 417 | 8/4/2021 |
1.0.0 | 467 | 7/6/2021 |
This is the initial release of ADotNet - It includes ASP.NET Core Build Pipeline