// ReSharper disable once UnusedMember.Global
        public async Task PublishReleaseFiles(
            [QueueTrigger(PublishReleaseFilesQueue)]
            PublishReleaseFilesMessage message,
            ExecutionContext executionContext,
            ILogger logger)
        {
            logger.LogInformation($"{executionContext.FunctionName} triggered: {message}");

            var immediate = await IsImmediate(message);

            var published = new List <(Guid ReleaseId, Guid ReleaseStatusId)>();

            foreach (var(releaseId, releaseStatusId) in message.Releases)
            {
                await UpdateStage(releaseId, releaseStatusId, Started);

                try
                {
                    _publishingService.PublishReleaseFilesAsync(releaseId).Wait();
                    published.Add((releaseId, releaseStatusId));
                }
                catch (Exception e)
                {
                    logger.LogError(e, $"Exception occured while executing {executionContext.FunctionName}");
                    logger.LogError(e.StackTrace);

                    await UpdateStage(releaseId, releaseStatusId, Failed,
                                      new ReleaseStatusLogMessage($"Exception in files stage: {e.Message}"));
                }
            }

            try
            {
                if (immediate)
                {
                    await _queueService.QueuePublishReleaseDataMessagesAsync(published);
                }
                else
                {
                    await _queueService.QueueGenerateReleaseContentMessageAsync(published);
                }

                foreach (var(releaseId, releaseStatusId) in published)
                {
                    await UpdateStage(releaseId, releaseStatusId, Complete);
                }
            }
            catch (Exception e)
            {
                logger.LogError(e, $"Exception occured while executing {executionContext.FunctionName}");
                logger.LogError(e.StackTrace);
            }

            logger.LogInformation($"{executionContext.FunctionName} completed");
        }
        private async Task <bool> IsImmediate(PublishReleaseFilesMessage message)
        {
            if (message.Releases.Count() > 1)
            {
                // If there's more than one Release this invocation couldn't have been triggered for immediate publishing
                return(false);
            }

            var(releaseId, releaseStatusId) = message.Releases.Single();
            return(await _releaseStatusService.IsImmediate(releaseId, releaseStatusId));
        }