private static async Task SetupContextAsync(BuildContext context, BuildRequest buildRequest)
        {
            // Setup XmlContext
            context.XmlContext.AddVariable(Constants.ContextData.IncrementalBuild, buildRequest.IsIncremental);

            if (buildRequest.ContextParams == null || buildRequest.ContextParams.Count == 0)
            {
                TraceEx.TraceWarning(LogMessage.FormatMessage(LogCode.PipelineStartsWithoutContextParameter, BuildActionMapper.GetPipelineName(buildRequest.ActionName)));
            }
            else
            {
                foreach (var contextParam in buildRequest.ContextParams.Where(kvp => !string.IsNullOrEmpty(kvp.Key)))
                {
                    context.XmlContext.AddVariable(contextParam.Key, contextParam.Value ?? string.Empty);
                }
            }

            // TODO: refactor this into a separate component
            if (buildRequest.EntityIdentifier != null)
            {
                context.XmlContext.AddVariable(Constants.EntityIdentifier, buildRequest.EntityIdentifier.ToString());
            }

            if (EnvironmentConfiguration.Environment.Value != null)
            {
                context.XmlContext.AddVariable(
                    Constants.Service.ContentService,
                    EnvironmentConfiguration.Environment.Value.GetValue <string>(Constants.Service.ContentServiceEndpoint).TrimEnd('/'));
            }

            if (CommonServiceConfiguration.PreviewContainerUrl.Value != null)
            {
                context.XmlContext.AddVariable(
                    Constants.PreviewContainerUrl,
                    CommonServiceConfiguration.PreviewContainerUrl.Value.TrimEnd('/'));
            }

            if (CommonServiceConfiguration.CollectionContainerUrl.Value != null)
            {
                context.XmlContext.AddVariable(
                    Constants.CollectionContainerUrl,
                    CommonServiceConfiguration.CollectionContainerUrl.Value.TrimEnd('/'));
            }

            // apply build config
            var buildConfigName = BuildActionMapper.GetBuildConfig(buildRequest.ActionName);

            if (buildRequest.EntityIdentifier != null && buildConfigName != null)
            {
                var organizationId = await context.GetOrganizationIdFromProjectAsync(buildRequest.EntityIdentifier.ProjectId);

                var buildConfig = await EntityAccessor.GetBuildConfigAsync(organizationId, buildConfigName);

                if (buildConfig != null)
                {
                    foreach (var config in buildConfig)
                    {
                        context.XmlContext.AddVariable(config.Key, config.Value);
                    }
                }
            }

            // Setup SharedObject
            if (buildRequest.SharedObject != null)
            {
                foreach (var sharedObject in buildRequest.SharedObject.Where(kvp => !string.IsNullOrEmpty(kvp.Key)))
                {
                    context.SetSharedObject(sharedObject.Key, sharedObject.Value);
                }
            }

            if (buildRequest.QueueInfo != null)
            {
                context.QueueInfo = buildRequest.QueueInfo;
            }
        }