Forge
csharp3407750f
1using AgentForge.Abstractions;
2using AgentForge.Plugin.Releases.Pages;
3using Microsoft.AspNetCore.Builder;
4using Microsoft.Extensions.Configuration;
5using Microsoft.Extensions.DependencyInjection;
6
7namespace AgentForge.Plugin.Releases;
8
9public sealed class ReleasesForgePlugin : IForgePlugin
10{
11 public string Id => "releases";
12
13 public string DisplayName => "Releases";
14
15 public string Tier => "extended";
16
17 public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
18 {
19 }
20
21 public void MapEndpoints(WebApplication app) => ForgeReleaseViewEndpoints.Map(app);
22
23 public void RegisterFeatures(ForgeFeatureRegistry registry) => registry.Add("releases");
24
25 public void RegisterViewContributors(ForgeViewContributorRegistry registry)
26 {
27 registry.Add(new ForgeViewContributor
28 {
29 TabId = "releases",
30 Label = "Releases",
31 RoutePrefix = $"/view/repos/{{name}}/releases",
32 Order = 40,
33 PluginId = Id,
34 });
35 }
36
37 public void RegisterRepoTabBodies(ForgeRepoTabBodyRegistry registry) =>
38 registry.Add("releases", ctx =>
39 {
40 var grouping = ctx.Services.GetService<IForgeReleaseListGrouping>();
41 var listBasePath = $"/view/repos/{ForgeRepoNames.ToUrlPath(ctx.RepoName)}/releases";
42 var stack = grouping?.ParseGroupStack(null) ?? [];
43 var context = new ForgeReleaseListViewContext(ctx.RepoName, listBasePath, stack);
44 var releases = ForgeReleaseSource.List(ctx.RepoName);
45 return ForgeReleaseListPage.Render(ctx.RepoName, releases, grouping, context);
46 });
47}
48
View only · write via MCP/CIDE