public async Task HandleMessage(CommandContext commandContext) { var channelName = commandContext.ChannelName; var topic = await _slackApiService.GetChannelTopic(channelName); var train = Train.Parse(topic); await _slackApiService.PostMessage(commandContext.ChannelName, $"Running the build pipeline..."); var messageToSelf = await _slackApiService.ReadLatestMessageToSelf(); var store = SlackMessageStorage.Parse(messageToSelf); var channel = store.FirstOrDefault(c => c.ChannelName == channelName); if (channel == null) { channel = new SlackMessageStorage { ChannelName = channelName, ShipUrl = "" }; messageToSelf = SlackMessageStorage.Stringify(store); await _slackApiService.PostMessage("@slackbot", messageToSelf); } try { await _externalBuildTrigger.TriggerBuild(channel); } catch (Exception ex) { var atDriver = await _slackApiService.FormatAtNotificationFromUserName(train.Carriages[0].Riders[0].Name); await _slackApiService.PostMessage(commandContext.ChannelName, $"Something went wrong with the build pipeline {atDriver}"); Console.WriteLine(ex.ToString()); } }
async Task AdvanceCarriage(Train train, string channelName) { // clear ready foreach (var rider in train.Carriages[0].Riders) { if (rider.Flairs.Flairs.Contains(RiderFlair.Ready)) { rider.Flairs.Flairs.Remove(RiderFlair.Ready); rider.Flairs.PostflairWhitepace = ""; } } train.Carriages[0].Riders[0].Flairs.Flairs.Remove(RiderFlair.EverReady); await HandlePhaseAdvancement(train, channelName); await _slackApiService.SetChannelTopic(channelName, train.ToString()); if (train.Phase == Phase.Testing) { var messageToSelf = await _slackApiService.ReadLatestMessageToSelf(); var store = SlackMessageStorage.Parse(messageToSelf); var channel = store.FirstOrDefault(c => c.ChannelName == channelName); if (channel == null) { channel = new SlackMessageStorage { ChannelName = channelName, ShipUrl = "" }; messageToSelf = SlackMessageStorage.Stringify(store); await _slackApiService.PostMessage("@slackbot", messageToSelf); } try { // trigger the build await _externalBuildTriggerService.TriggerBuild(channel); await _slackApiService.PostMessage(channelName, $"Starting the build..."); } catch (Exception ex) { var atHere = await _slackApiService.FormatAtHere(); await _slackApiService.PostMessage(channelName, $"Something went wrong triggering the build... {atHere}"); Console.WriteLine(ex.ToString()); } } string deploymentUrl = null; if (train.Phase == Phase.Production) { var messageToSelf = await _slackApiService.ReadLatestMessageToSelf(); var channels = SlackMessageStorage.Parse(messageToSelf); var channel = channels.FirstOrDefault(c => c.ChannelName == channelName); if (channel?.ShipUrl != null) { // link to deploy url in channel deploymentUrl = channel.ShipUrl; } else { deploymentUrl = "Isn't configured for some reason..."; } } if (train.Carriages.Count > 0) { await HandleBeginPhaseMessaging(train, channelName, deploymentUrl); } }