Skip to content

Instantly share code, notes, and snippets.

View davidfowl's full-sized avatar

David Fowler davidfowl

View GitHub Profile
@davidfowl
davidfowl / react_cli.cs
Last active June 18, 2025 23:01
React like framework based on Spectre.Console
#:package Spectre.Console@0.50.0
using Spectre.Console;
using Spectre.Console.Rendering;
using System.Threading.Channels;
// Entry point
var app = new ConsoleApp();
app.Render(new App());
@davidfowl
davidfowl / cleanrg.cs
Created June 16, 2025 21:42
A C# tool for cleaning up resource groups
// -----------------------------------------------------------------------------
// Azure RG Janitor - Spectre Edition
// Run with: dotnet run cleanup-rg.cs
// Targets: .NET 10 Preview 4+
// -----------------------------------------------------------------------------
#:package Azure.Identity@1.*
#:package Azure.ResourceManager@1.*
#:package [email protected]
using System.Diagnostics;
using System.Reflection;
using System.Threading.Channels;
using Aspire.Hosting.Eventing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
public static class ProjectResourceBuilderExtensions
{
public static IResourceBuilder<ProjectResource> RestartOnChange(this IResourceBuilder<ProjectResource> builder, params string[] filePatterns)
@davidfowl
davidfowl / ResourceModel.md
Last active June 13, 2025 08:31
Aspire Resource Model: Concepts, Design, and Authoring Guidance

Aspire Resource Model: Concepts, Design, and Authoring Guidance

Audience – Aspire integrators, advanced users, and contributors who are defining custom resource types, implementing publishers, or working across both runtime and publish workflows.
This documentation's focus is on hosting integrations NOT client integrations. Just getting started? Jump straight to Quick Start and come back later for the deep‑dive.


Quick Start

A two‑minute "hello‑world" that shows the happy path.

@davidfowl
davidfowl / git.cs
Last active December 12, 2024 09:11
Sample schema for git add, clone, commit, clean
using System;
using System.Collections.Generic;
using CliWrap;
namespace GitCLIWrapper;
public static class Git
{
public static Command Clone(
string repository,
@davidfowl
davidfowl / WaitToStart.cs
Last active December 19, 2024 16:38
Wait to start command
using Microsoft.Extensions.DependencyInjection;
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("redis", "redis").WithExplicitStart();
builder.Build().Run();
public static class ExplicitStartupExtensions
{
@davidfowl
davidfowl / UsingCopilot.md
Created March 30, 2024 22:51
Github copilot

Me using copilot

Copilot_Aspire.mp4
using System.Text.Json;
using System.Text.Json.Serialization;
var data = new[]
{
"Hello"u8.ToArray(),
"Twitter"u8.ToArray(),
"Optimize"u8.ToArray()
}
.Select(m => new Message(m)).ToArray();
@davidfowl
davidfowl / TimeHttpEvents.cs
Last active August 7, 2024 01:57
Using Yarp.Telemetry.Consumption to track outbound network events (this package isn't tied to YARP)
using System.Diagnostics;
using System.Net.Sockets;
using System.Security.Authentication;
using Yarp.Telemetry.Consumption;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTelemetryConsumer<TelemetryConsumer>();
var app = builder.Build();
public static class ConfigurationBinderExtensions
{
public static ValidateOptionsResult BindAndValidate<TOptions>(this IConfiguration configuration, TOptions instance) where TOptions : class, new()
{
configuration.Bind(instance);
var validateOptions = new DataAnnotationValidateOptions<TOptions>(Options.DefaultName);
return validateOptions.Validate(Options.DefaultName, instance);
}
}