Created
May 9, 2016 01:12
-
-
Save michaelnoonan/c1430b6c97b72c73d37d2da2288ea4d6 to your computer and use it in GitHub Desktop.
Configuration example: ReleaseBot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Configuration; | |
using System.Linq; | |
using Autofac; | |
using ReleaseBot.Core.Configuration; | |
using ReleaseBot.Core.Integration.AzureStorage; | |
using ReleaseBot.Core.Integration.GitHub; | |
using ReleaseBot.Core.Integration.Octofront; | |
using ReleaseBot.Core.Integration.Octopus; | |
namespace ReleaseBot.SlackLink | |
{ | |
public class ConfigurationAutofacModule : Module | |
{ | |
protected override void Load(ContainerBuilder builder) | |
{ | |
var isDevelopment = BuildReleaseBotEnvironmentConfiguration().IsDevelopment; | |
var developmentSlackConfiguration = isDevelopment | |
? SlackDevelopmentEnvironmentInitializer.InitializeDevelopmentEnvironmentIfRequired() | |
: null; | |
var developmentOctopusConfiguration = isDevelopment | |
? OctopusDevelopmentEnvironmentInitializer.InitializeLocalOctopusServerIfRequired() | |
: null; | |
var developmentPublicUrl = isDevelopment | |
? NgrokDevelopmentEnvironmentInitializer.InitializeNgrokForWebHooksIfDesired(BuildReleaseBotRootUrlConfiguration()) | |
: null; | |
builder.Register(cc => BuildReleaseBotEnvironmentConfiguration()).AsSelf(); | |
builder.Register(cc => BuildReleaseBotRootUrlConfiguration(developmentPublicUrl)).AsSelf(); | |
builder.Register(cc => BuildSeqConfiguration()).AsSelf(); | |
builder.Register(cc => BuildGitHubAccountConfiguration()).AsSelf(); | |
builder.Register(cc => BuildSlackBotConfiguration(developmentSlackConfiguration)).AsSelf(); | |
builder.Register(cc => BuildAzureStorageConfiguration(cc.Resolve<ReleaseBotEnvironmentConfiguration>())).AsSelf().SingleInstance(); | |
builder.Register(cc => BuildOctopusConfiguration(developmentOctopusConfiguration)).AsSelf().SingleInstance(); | |
builder.Register(cc => BuildOctofrontConfiguration()).AsSelf().SingleInstance(); | |
} | |
public static ReleaseBotEnvironmentConfiguration BuildReleaseBotEnvironmentConfiguration() | |
{ | |
return new ReleaseBotEnvironmentConfiguration(GetAppSetting("releasebot-environment")); | |
} | |
public static ReleaseBotRootUrlConfiguration BuildReleaseBotRootUrlConfiguration(string overrideRootUrl = null) | |
{ | |
return new ReleaseBotRootUrlConfiguration(overrideRootUrl ?? GetAppSetting("releasebot-uri")); | |
} | |
public static SeqConfiguration BuildSeqConfiguration() | |
{ | |
return new SeqConfiguration(GetAppSetting("seq-uri"), GetAppSetting("seq-apikey")); | |
} | |
private static GitHubAccountConfiguration BuildGitHubAccountConfiguration() | |
{ | |
return new GitHubAccountConfiguration(GetAppSetting("github-account-username"), GetAppSetting("github-account-token")); | |
} | |
public static SlackBotConfiguration BuildSlackBotConfiguration(SlackBotConfiguration overrideConfiguration = null) | |
{ | |
return overrideConfiguration ?? new SlackBotConfiguration(GetAppSetting("slack-bot-token"), GetAppSetting("slack-bot-default-announcements-channel", defaultValue: "releasebot-announcements")); | |
} | |
public static AzureStorageConfiguration BuildAzureStorageConfiguration(ReleaseBotEnvironmentConfiguration releaseBotEnvironmentConfiguration) | |
{ | |
return new AzureStorageConfiguration(GetConnectionString("AzureWebJobsStorage"), releaseBotEnvironmentConfiguration.InstanceName); | |
} | |
public static OctopusConfiguration BuildOctopusConfiguration(OctopusConfiguration overrideConfiguration = null) | |
{ | |
return overrideConfiguration ?? new OctopusConfiguration(GetAppSetting("octopus-uri"), GetAppSetting("octopus-apikey")); | |
} | |
public static OctofrontConfiguration BuildOctofrontConfiguration() | |
{ | |
return new OctofrontConfiguration(GetAppSetting("octofront-uri"), GetAppSetting("octofront-token")); | |
} | |
static string GetAppSetting(string key, string defaultValue = null) | |
{ | |
if (ConfigurationManager.AppSettings.AllKeys.Any(x => x == key)) | |
{ | |
return ConfigurationManager.AppSettings[key]; | |
} | |
if (defaultValue != null) | |
return defaultValue; | |
throw new ConfigurationErrorsException($"There is no AppSetting with the key '{key}'"); | |
} | |
static string GetConnectionString(string name, string defaultValue = null) | |
{ | |
var match = ConfigurationManager.ConnectionStrings.OfType<ConnectionStringSettings>().FirstOrDefault(x => x.Name == name); | |
if (match != null) | |
{ | |
return match.ConnectionString; | |
} | |
if (defaultValue != null) | |
return defaultValue; | |
throw new ConfigurationErrorsException($"There is no ConnectionString with the name '{name}'"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment