Skip to content

Commit e1d7509

Browse files
authored
chore: Support for local development with Aspire (#236)
* chore: Support for local development with Aspire
1 parent 5297eda commit e1d7509

21 files changed

Lines changed: 456 additions & 38 deletions

.github/CODEOWNERS

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# Default owner for everything
2-
* @pmcilreavy
2+
3+
* @pm7y

.github/CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Thank you for your interest in contributing! This simulator is intended for **lo
1111

1212
## Documentation
1313

14-
For detailed guidelines on contributing, CI/CD workflows, release process, and conventional commits, see the **[Contributing wiki page](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Contributing)**.
14+
For detailed guidelines on contributing, CI/CD workflows, release process, and conventional commits, see the **[Contributing wiki page](https://github.com/pm7y/AzureEventGridSimulator/wiki/Contributing)**.
1515

1616
## Code of Conduct
1717

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
blank_issues_enabled: false
22
contact_links:
33
- name: Documentation
4-
url: https://github.com/pmcilreavy/AzureEventGridSimulator#readme
4+
url: https://github.com/pm7y/AzureEventGridSimulator#readme
55
about: Check the README for documentation and examples
66
- name: Discussions
7-
url: https://github.com/pmcilreavy/AzureEventGridSimulator/discussions
7+
url: https://github.com/pm7y/AzureEventGridSimulator/discussions
88
about: Ask questions and discuss ideas

.github/SECURITY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ We take security vulnerabilities seriously. If you discover a security issue, pl
1919

2020
Instead, please report them using GitHub's private vulnerability reporting feature:
2121

22-
1. Go to the [Security tab](https://github.com/pmcilreavy/AzureEventGridSimulator/security) of this repository
22+
1. Go to the [Security tab](https://github.com/pm7y/AzureEventGridSimulator/security) of this repository
2323
2. Click "Report a vulnerability"
2424
3. Fill in the details of the vulnerability
2525

.github/workflows/ci.yml

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ env:
2020
DOTNET_CLI_TELEMETRY_OPTOUT: "1"
2121
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: "1"
2222
DOTNET_NOLOGO: "true"
23-
SOLUTION_PATH: ./src/AzureEventGridSimulator.sln
23+
# Build specific projects, not the solution (excludes Aspire projects from CI)
24+
MAIN_PROJECT: ./src/AzureEventGridSimulator/AzureEventGridSimulator.csproj
25+
TEST_PROJECT: ./src/AzureEventGridSimulator.Tests/AzureEventGridSimulator.Tests.csproj
2426
CONFIGURATION: Release
2527

2628
jobs:
@@ -51,11 +53,23 @@ jobs:
5153
cache-dependency-path: "**/*.csproj"
5254

5355
- name: Restore dependencies
54-
run: dotnet restore ${{ env.SOLUTION_PATH }} --runtime ${{ matrix.runtime }}
56+
run: |
57+
dotnet restore ${{ env.MAIN_PROJECT }} --runtime ${{ matrix.runtime }}
58+
dotnet restore ${{ env.TEST_PROJECT }} --runtime ${{ matrix.runtime }}
5559
56-
- name: Build
60+
- name: Build main project
5761
run: >-
58-
dotnet build ${{ env.SOLUTION_PATH }}
62+
dotnet build ${{ env.MAIN_PROJECT }}
63+
--configuration ${{ env.CONFIGURATION }}
64+
--runtime ${{ matrix.runtime }}
65+
--no-restore
66+
--no-incremental
67+
/p:WarningLevel=4
68+
/p:TreatWarningsAsErrors=true
69+
70+
- name: Build test project
71+
run: >-
72+
dotnet build ${{ env.TEST_PROJECT }}
5973
--configuration ${{ env.CONFIGURATION }}
6074
--runtime ${{ matrix.runtime }}
6175
--no-restore
@@ -65,7 +79,7 @@ jobs:
6579
6680
- name: Test
6781
run: >-
68-
dotnet test ${{ env.SOLUTION_PATH }}
82+
dotnet test ${{ env.TEST_PROJECT }}
6983
--configuration ${{ env.CONFIGURATION }}
7084
--runtime ${{ matrix.runtime }}
7185
--no-build

README.md

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
# Azure Event Grid Simulator
22

3-
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/pmcilreavy/AzureEventGridSimulator/ci.yml)
4-
![GitHub contributors](https://img.shields.io/github/contributors-anon/pmcilreavy/AzureEventGridSimulator)
5-
![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/pmcilreavy/AzureEventGridSimulator?label=latest)
6-
![GitHub all releases](https://img.shields.io/github/downloads/pmcilreavy/AzureEventGridSimulator/total)
7-
![Docker Pulls](https://img.shields.io/docker/pulls/pmcilreavy/azureeventgridsimulator)
3+
![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/pm7y/AzureEventGridSimulator/ci.yml)
4+
![License](https://img.shields.io/github/license/pm7y/AzureEventGridSimulator)
5+
![.NET](https://img.shields.io/badge/.NET-8.0%20%7C%209.0%20%7C%2010.0-512BD4)
6+
![Platform](https://img.shields.io/badge/platform-windows%20%7C%20macos%20%7C%20linux-lightgrey)
7+
88
![NuGet Version](https://img.shields.io/nuget/v/AzureEventGridSimulator)
9+
![NuGet Downloads](https://img.shields.io/nuget/dt/AzureEventGridSimulator)
10+
![Docker Pulls](https://img.shields.io/docker/pulls/pmcilreavy/azureeventgridsimulator)
11+
![Docker Image Size](https://img.shields.io/docker/image-size/pmcilreavy/azureeventgridsimulator)
912

10-
A simulator that provides HTTPS endpoints to mimic [Azure Event Grid](https://azure.microsoft.com/en-au/services/event-grid/) topics and subscribers. Compatible with the `Microsoft.Azure.EventGrid` client library and supports both EventGrid and CloudEvents v1.0 schemas.
13+
![GitHub Stars](https://img.shields.io/github/stars/pm7y/AzureEventGridSimulator)
14+
![GitHub contributors](https://img.shields.io/github/contributors-anon/pm7y/AzureEventGridSimulator)
15+
![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/pm7y/AzureEventGridSimulator?label=latest)
16+
![GitHub all releases](https://img.shields.io/github/downloads/pm7y/AzureEventGridSimulator/total)
17+
![Last Commit](https://img.shields.io/github/last-commit/pm7y/AzureEventGridSimulator)
18+
19+
A simulator that provides HTTPS endpoints to
20+
mimic [Azure Event Grid](https://azure.microsoft.com/en-au/services/event-grid/) topics and subscribers. Compatible with
21+
the `Microsoft.Azure.EventGrid` client library and supports both EventGrid and CloudEvents v1.0 schemas.
1122

1223
> **Note:** This simulator is intended for **local development and testing only**.
1324
@@ -34,7 +45,21 @@ docker pull pmcilreavy/azureeventgridsimulator:latest
3445

3546
### Binary
3647

37-
Download from [GitHub Releases](https://github.com/pmcilreavy/AzureEventGridSimulator/releases).
48+
Download from [GitHub Releases](https://github.com/pm7y/AzureEventGridSimulator/releases).
49+
50+
## Local Development with Aspire
51+
52+
For an improved local development experience with Azure emulators and built-in observability, use .NET Aspire:
53+
54+
```bash
55+
cd src
56+
dotnet run --project AzureEventGridSimulator.AppHost
57+
```
58+
59+
This starts the simulator along with Azure Storage (Azurite), Service Bus, Event Hubs, and SQL Server emulators. The
60+
Aspire Dashboard provides distributed traces, logs, and metrics.
61+
62+
See the [Aspire](https://github.com/pm7y/AzureEventGridSimulator/wiki/Aspire) wiki page for details.
3863

3964
## Quick Start
4065

@@ -74,20 +99,24 @@ Access the built-in dashboard at `https://localhost:<port>/dashboard` to view ev
7499

75100
## Documentation
76101

77-
For detailed documentation, see the **[Wiki](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki)**:
78-
79-
- [Configuration](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Configuration) - Topics, subscribers, and app settings
80-
- [HTTP Subscribers](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/HTTP-Subscribers) - Webhook configuration
81-
- [Service Bus Subscribers](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Service-Bus-Subscribers) - Azure Service Bus
82-
- [Storage Queue Subscribers](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Storage-Queue-Subscribers) - Azure Storage Queues
83-
- [Event Hub Subscribers](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Event-Hub-Subscribers) - Azure Event Hubs
84-
- [Filtering](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Filtering) - Event filtering
85-
- [Retry and Dead-Letter](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Retry-and-Dead-Letter) - Retry policies
86-
- [Dashboard](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Dashboard) - Web-based monitoring
87-
- [Docker](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Docker) - Container deployment
88-
- [Schema Support](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Schema-Support) - EventGrid and CloudEvents
89-
- [Architecture](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Architecture) - System design and internals
102+
For detailed documentation, see the **[Wiki](https://github.com/pm7y/AzureEventGridSimulator/wiki)**:
103+
104+
- [Configuration](https://github.com/pm7y/AzureEventGridSimulator/wiki/Configuration) - Topics, subscribers, and app
105+
settings
106+
- [HTTP Subscribers](https://github.com/pm7y/AzureEventGridSimulator/wiki/HTTP-Subscribers) - Webhook configuration
107+
- [Service Bus Subscribers](https://github.com/pm7y/AzureEventGridSimulator/wiki/Service-Bus-Subscribers) - Azure
108+
Service Bus
109+
- [Storage Queue Subscribers](https://github.com/pm7y/AzureEventGridSimulator/wiki/Storage-Queue-Subscribers) - Azure
110+
Storage Queues
111+
- [Event Hub Subscribers](https://github.com/pm7y/AzureEventGridSimulator/wiki/Event-Hub-Subscribers) - Azure Event Hubs
112+
- [Filtering](https://github.com/pm7y/AzureEventGridSimulator/wiki/Filtering) - Event filtering
113+
- [Retry and Dead-Letter](https://github.com/pm7y/AzureEventGridSimulator/wiki/Retry-and-Dead-Letter) - Retry policies
114+
- [Dashboard](https://github.com/pm7y/AzureEventGridSimulator/wiki/Dashboard) - Web-based monitoring
115+
- [Docker](https://github.com/pm7y/AzureEventGridSimulator/wiki/Docker) - Container deployment
116+
- [Schema Support](https://github.com/pm7y/AzureEventGridSimulator/wiki/Schema-Support) - EventGrid and CloudEvents
117+
- [Architecture](https://github.com/pm7y/AzureEventGridSimulator/wiki/Architecture) - System design and internals
90118

91119
## Contributing
92120

93-
See the [Architecture](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki/Architecture) page for system design details and the [Wiki](https://github.com/pmcilreavy/AzureEventGridSimulator/wiki) for development guidelines.
121+
See the [Architecture](https://github.com/pm7y/AzureEventGridSimulator/wiki/Architecture) page for system design details
122+
and the [Wiki](https://github.com/pm7y/AzureEventGridSimulator/wiki) for development guidelines.

docker/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ COPY /src/Directory.Packages.props .
88

99
# copy source
1010
COPY /src/AzureEventGridSimulator ./AzureEventGridSimulator
11+
COPY /src/AzureEventGridSimulator.ServiceDefaults ./AzureEventGridSimulator.ServiceDefaults
1112

1213
ARG TARGETARCH
1314
RUN rid="linux-musl-arm64" \

docker/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
The Azure Event Grid Simulator provides a local development environment that mimics Azure Event Grid functionality. This guide covers everything you need to run the simulator using Docker.
44

5-
**GitHub Repository**: [https://github.com/pmcilreavy/AzureEventGridSimulator](https://github.com/pmcilreavy/AzureEventGridSimulator)
5+
**GitHub Repository**: [https://github.com/pm7y/AzureEventGridSimulator](https://github.com/pm7y/AzureEventGridSimulator)
66

77
**Docker Hub**: [pmcilreavy/azureeventgridsimulator](https://hub.docker.com/r/pmcilreavy/azureeventgridsimulator)
88

@@ -820,7 +820,7 @@ For external endpoints, ensure the container can reach them (check DNS, firewall
820820

821821
## Additional Resources
822822

823-
- **GitHub Repository**: [https://github.com/pmcilreavy/AzureEventGridSimulator](https://github.com/pmcilreavy/AzureEventGridSimulator)
823+
- **GitHub Repository**: [https://github.com/pm7y/AzureEventGridSimulator](https://github.com/pm7y/AzureEventGridSimulator)
824824
- **Docker Hub**: [https://hub.docker.com/r/pmcilreavy/azureeventgridsimulator](https://hub.docker.com/r/pmcilreavy/azureeventgridsimulator)
825825
- **Azure Event Grid Documentation**: [https://docs.microsoft.com/azure/event-grid/](https://docs.microsoft.com/azure/event-grid/)
826826
- **CloudEvents Specification**: [https://cloudevents.io/](https://cloudevents.io/)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using Projects;
2+
3+
var builder = DistributedApplication.CreateBuilder(args);
4+
5+
// Path to simulator configuration file
6+
var configFile = Path.Combine(AzureEventGridSimulator_AppHost.ProjectPath, "simulator-config.json");
7+
8+
// Azure emulators for local development
9+
var storage = builder.AddAzureStorage("storage").RunAsEmulator();
10+
var queues = storage.AddQueues("queues");
11+
var blobs = storage.AddBlobs("blobs");
12+
13+
var serviceBus = builder.AddAzureServiceBus("servicebus").RunAsEmulator();
14+
var serviceBusQueue = serviceBus.AddServiceBusQueue("sb-events");
15+
16+
var eventHubs = builder.AddAzureEventHubs("eventhubs").RunAsEmulator();
17+
var eventHub = eventHubs.AddHub("eh-events");
18+
19+
var sql = builder.AddSqlServer("sql");
20+
21+
// Add the Event Grid Simulator
22+
// Use isProxied: false because the simulator listens on multiple ports (one per topic)
23+
// and Aspire's default reverse proxy doesn't support this scenario
24+
builder
25+
.AddProject<AzureEventGridSimulator>("simulator", launchProfileName: null)
26+
.WithHttpsEndpoint(60101, name: "default", isProxied: false)
27+
.WithReference(queues)
28+
.WithReference(blobs)
29+
.WithReference(serviceBusQueue)
30+
.WithReference(eventHub)
31+
.WithReference(sql)
32+
.WaitFor(storage)
33+
.WaitFor(serviceBus)
34+
.WaitFor(eventHubs)
35+
.WaitFor(sql)
36+
// Load topic/subscriber configuration from file
37+
.WithArgs($"--ConfigFile={configFile}")
38+
// Inject connection strings for Azure emulators (AEGS_ prefix required by simulator)
39+
.WithEnvironment(ctx =>
40+
{
41+
ctx.EnvironmentVariables["AEGS_topics__0__subscribers__storageQueue__0__connectionString"] =
42+
queues.Resource.ConnectionStringExpression;
43+
ctx.EnvironmentVariables["AEGS_topics__0__subscribers__serviceBus__0__connectionString"] =
44+
serviceBus.Resource.ConnectionStringExpression;
45+
ctx.EnvironmentVariables["AEGS_topics__0__subscribers__eventHub__0__connectionString"] =
46+
eventHubs.Resource.ConnectionStringExpression;
47+
});
48+
49+
builder.Build().Run();
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<Sdk Name="Aspire.AppHost.Sdk" Version="13.1.0" />
3+
4+
<PropertyGroup>
5+
<OutputType>Exe</OutputType>
6+
<TargetFramework>net10.0</TargetFramework>
7+
<ImplicitUsings>enable</ImplicitUsings>
8+
<Nullable>enable</Nullable>
9+
<IsAspireHost>true</IsAspireHost>
10+
<UserSecretsId>568b81ee-880c-4743-beb4-ca331e309492</UserSecretsId>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Aspire.Hosting.AppHost" />
15+
<PackageReference Include="Aspire.Hosting.Azure.Storage" />
16+
<PackageReference Include="Aspire.Hosting.Azure.ServiceBus" />
17+
<PackageReference Include="Aspire.Hosting.Azure.EventHubs" />
18+
<PackageReference Include="Aspire.Hosting.SqlServer" />
19+
</ItemGroup>
20+
21+
<!-- Set ASPIRE_ENABLED=true to include ServiceDefaults in the build -->
22+
<PropertyGroup>
23+
<ASPIRE_ENABLED>true</ASPIRE_ENABLED>
24+
</PropertyGroup>
25+
26+
<ItemGroup>
27+
<ProjectReference
28+
Include="..\AzureEventGridSimulator\AzureEventGridSimulator.csproj"
29+
SetTargetFramework="TargetFramework=net10.0"
30+
AdditionalProperties="ASPIRE_ENABLED=true"
31+
/>
32+
</ItemGroup>
33+
</Project>

0 commit comments

Comments
 (0)