Skip to content

Instantly share code, notes, and snippets.

@michaelnoonan
Created May 9, 2016 01:12
Show Gist options
  • Save michaelnoonan/c1430b6c97b72c73d37d2da2288ea4d6 to your computer and use it in GitHub Desktop.
Save michaelnoonan/c1430b6c97b72c73d37d2da2288ea4d6 to your computer and use it in GitHub Desktop.
Configuration example: ReleaseBot
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