public void BuildDropProcessor_should_write_a_row_to_SQL()
        {
            var calculator = Substitute.For<IFolderSizeCalculator>();
            calculator.Calculate(null).ReturnsForAnyArgs(new FolderSizeResult());

            var interupt = Substitute.For<IWarehouseInterupt>();
            var context = Substitute.For<IWarehouseContext>();
            var buildServer = Substitute.For<ITeamFoundationBuildService>();

            var dac = Substitute.For<IWarehouseDataAccessComponent>();
            context.CreateWarehouseDataAccessComponent().Returns(dac);

            var queryResult = new BuildQueryResult();
            var reader = new TeamFoundationDataReader(new object[] {new[] {queryResult}});
            var buildDetail = new BuildDetail {DropLocation = @"\\foo\bar", Uri = "vstfs:///Build/Build/1"};
            queryResult.Builds.Add(buildDetail);
            buildServer.QueryBuilds(null).ReturnsForAnyArgs(reader);

            var processor = new BuildDropProcessor(interupt, context, buildServer, calculator);
            var collectionId = Guid.NewGuid();

            processor.ProcessBuildDrops(collectionId);

            dac.ReceivedWithAnyArgs().ExecuteNonQuery(CommandType.Text, null, null);
        }
Example #2
0
        private BuildDetail ConstructBuildDetails(string buildDetailsString)
        {
            var details = JObject.Parse(buildDetailsString);

            var buildDetails = new BuildDetail();

            buildDetails.CommitHash     = details["vcsRevisionKey"].Value <string>();
            buildDetails.Successful     = details["successful"].Value <bool>();
            buildDetails.BuildResultKey = details["buildResultKey"].Value <string>();
            buildDetails.PlanResultKey  = details["planResultKey"]["key"].Value <string>();

            var commitDetails = JObject.Parse(this.bitbucketApi.GetCommitDetails(buildDetails.CommitHash).Result);
            var errorMessage  = commitDetails["errors"]?[0]["message"]?.Value <string>();

            if (errorMessage != null)
            {
                throw new InvalidOperationException(errorMessage);
            }

            buildDetails.JiraIssue          = commitDetails["properties"]?["jira-key"].Values <string>().Aggregate((s1, s2) => s1 + ", " + s2);
            buildDetails.AuthorEmailAddress = commitDetails["author"]["emailAddress"].Value <string>();
            buildDetails.AuthorName         = commitDetails["author"]["name"].Value <string>();
            buildDetails.AuthorDisplayName  = commitDetails["author"]["displayName"]?.Value <string>() ?? buildDetails.AuthorName;
            return(buildDetails);
        }
Example #3
0
        public void OutOfProcessPowerShellDeployAgent_should_serialize_build_detail_across_processes()
        {
            DeployAgentResult result;

            using (var scriptFile = new TemporaryFile(".ps1", "'Description:' + $TfsDeployerBuildDetail.BuildDefinition.Process.Description"))
            {
                var buildDetail = new BuildDetail {
                    BuildDefinition = { Process = { Description = "My Process Template" } }
                };

                var mapping = new Mapping
                {
                    NewQuality       = "Released",
                    OriginalQuality  = null,
                    ScriptParameters = new ScriptParameter[0],
                    Script           = scriptFile.FileInfo.Name
                };

                var buildStatusChangeEvent = new BuildStatusChangeEvent {
                    StatusChange = new Change()
                };

                var testDeployData = (new DeployAgentDataFactory()).Create(scriptFile.FileInfo.DirectoryName, mapping, buildDetail, buildStatusChangeEvent);

                var agent = new OutOfProcessPowerShellDeployAgent(null, ClrVersion.Version2);

                // Act
                result = agent.Deploy(testDeployData);
            }

            // Assert
            StringAssert.Contains(result.Output, "Description:My Process Template");
        }
Example #4
0
        private IEnumerable <IBuildDetail> GetBuildsAcrossBranches(
            BuildDetail earliestBuild,
            BuildDetail latestBuild,
            string projectName,
            TfsConnection collection)
        {
            var buildServer          = collection.GetService <IBuildServer>();
            var versionControlServer = collection.GetService <VersionControlServer>();
            var targetBranch         = versionControlServer.QueryBranchObjects(new ItemIdentifier(latestBuild.BranchRoot),
                                                                               RecursionType.None);

            //All builds up until the branch
            var searchSpec = buildServer.CreateBuildDetailSpec(projectName, earliestBuild.Definition);

            searchSpec.MinFinishTime      = earliestBuild.Date;
            searchSpec.MaxFinishTime      = targetBranch.First().DateCreated;
            searchSpec.QueryDeletedOption = QueryDeletedOption.IncludeDeleted;
            var firstResultSet = buildServer.QueryBuilds(searchSpec);

            //Builds until last build on the target branch
            searchSpec = buildServer.CreateBuildDetailSpec(projectName, latestBuild.Definition);
            searchSpec.MaxFinishTime      = latestBuild.Date;
            searchSpec.QueryDeletedOption = QueryDeletedOption.IncludeDeleted;
            var secondResultSet = buildServer.QueryBuilds(searchSpec);

            var builds = firstResultSet.Builds.Union(secondResultSet.Builds);

            return(builds);
        }
Example #5
0
        public void Deployer_should_pass_build_definition_name_to_configuration_reader()
        {
            // Arrange
            BuildDetail buildDetail = null;

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };
            var mappingProcessor = MockRepository.GenerateStub <IMappingProcessor>();

            var tfsBuildDetail = new StubBuildDetail {
                BuildDefinition = { Name = "foo" }
            };
            var buildServer = MockRepository.GenerateStub <IBuildServer>();

            buildServer.Stub(o => o.GetBuild(null, null, null, QueryOptions.None))
            .IgnoreArguments()
            .Return(tfsBuildDetail);

            var reader = MockRepository.GenerateStub <IConfigurationReader>();

            reader.Stub(o => o.ReadMappings(Arg <BuildDetail> .Is.Anything)).WhenCalled(m => buildDetail = (BuildDetail)m.Arguments[0]);

            Func <BuildDetail, IBuildDetail, IPostDeployAction> postDeployActionFactory = (a, b) => MockRepository.GenerateStub <IPostDeployAction>();

            var deployer = new Deployer(reader, buildServer, mappingProcessor, postDeployActionFactory);

            // Act
            deployer.ExecuteDeploymentProcess(statusChanged, 0);

            // Assert
            Assert.AreEqual("foo", buildDetail.BuildDefinition.Name);
        }
Example #6
0
        protected override IEnumerable <INotification> CreateNotifications(TeamFoundationRequestContext requestContext, BuildCompletionNotificationEvent buildNotification, int maxLines)
        {
            BuildDetail build           = buildNotification.Build;
            var         locationService = requestContext.GetService <ILocationService>();
            var         buildService    = requestContext.GetService <TeamFoundationBuildService>();

            using (var buildReader = buildService.QueryQueuedBuildsById(requestContext, build.QueueIds, new[] { "*" }, QueryOptions.None))
            {
                var         result   = buildReader.Current <BuildQueueQueryResult>();
                QueuedBuild qb       = result.QueuedBuilds.FirstOrDefault();
                string      buildUrl = string.Format("{0}/{1}/{2}/_build#_a=summary&buildId={3}",
                                                     locationService.GetAccessMapping(requestContext, "PublicAccessMapping").AccessPoint,
                                                     requestContext.ServiceHost.Name, build.TeamProject, qb.BuildId);

                var notification = new BuildCompletionNotification()
                {
                    TeamProjectCollection = requestContext.ServiceHost.Name,
                    BuildUrl                = buildUrl,
                    ProjectName             = build.TeamProject,
                    BuildNumber             = build.BuildNumber,
                    BuildStatus             = build.Status,
                    BuildReason             = build.Reason,
                    StartTime               = build.StartTime,
                    FinishTime              = build.FinishTime,
                    RequestedForUniqueName  = qb.RequestedFor,
                    RequestedForDisplayName = qb.RequestedForDisplayName,
                    BuildDefinition         = build.Definition.Name,
                    DropLocation            = build.DropLocation,
                    TeamNames               = GetUserTeamsByProjectName(requestContext, build.TeamProject, qb.RequestedFor)
                };

                yield return(notification);
            }
        }
Example #7
0
        public void Execute(BuildStatusChangeEvent statusChanged, BuildDetail buildDetail, Mapping mapping, IPostDeployAction postDeployAction, int deploymentId)
        {
            lock (_namedLockSet.GetLockObject(mapping.Queue))
            {
                _deploymentEventRecorder.RecordStarted(deploymentId);

                var deployAgent = _deployAgentProvider.GetDeployAgent(mapping);

                // default to "happy; did nothing" if there's no deployment agent.
                var deployResult = new DeployAgentResult {
                    HasErrors = false, Output = string.Empty
                };

                if (deployAgent != null)
                {
                    using (var workingDirectory = new WorkingDirectory())
                    {
                        var deployAgentDataFactory = new DeployAgentDataFactory();
                        var deployData             = deployAgentDataFactory.Create(workingDirectory.DirectoryInfo.FullName,
                                                                                   mapping, buildDetail, statusChanged);
                        deployData.DeploymentId = deploymentId;

                        _deploymentFolderSource.DownloadDeploymentFolder(deployData.TfsBuildDetail, workingDirectory.DirectoryInfo.FullName);
                        deployResult = deployAgent.Deploy(deployData);
                    }
                }

                postDeployAction.DeploymentFinished(mapping, deployResult);

                _deploymentEventRecorder.RecordFinished(deploymentId, deployResult.HasErrors, deployResult.Output);
            }
        }
Example #8
0
    protected override void OnInit()
    {
        this.contentPane = UIPackage.CreateObject("UIMain", "BuildWindow").asCom;
        this.Center();
        this.modal = true;

        _list  = this.contentPane.GetChild("list").asList;
        _close = this.contentPane.GetChild("close").asLoader;
        _close.onClick.Add(delegate(EventContext context) {
            this.Hide();
        });
        _list.onClickItem.Add(__clickItem);
        //_list.itemRenderer = RenderListItem;
        _list.EnsureBoundsCorrect();
        _detail         = (BuildDetail)this.contentPane.GetChild("detail").asCom;
        _detail.visible = false;

        _confirmButton = this.contentPane.GetChild("confirm").asCom;
        _confirmButton.onTouchBegin.Add(buildConfirm);


        foreach (TowerTemplate tt in BattleManager.getInstance().buildableTowers)
        {
            BuildItem item = (BuildItem)_list.AddItemFromPool("ui://UIMain/BuildItem");
            item.setTowerInfo(tt);
        }
        float interval = 300 / (_list.numChildren > 8?8:_list.numChildren);

        _list.columnGap = (int)interval;

        //_list.numItems = 3;
    }
Example #9
0
        public void MappingProcessor_should_record_mapped_event_for_applicable_mappings()
        {
            // Arrange
            const int eventId                       = 7;
            var       mappingEvaluator              = MockRepository.GenerateStub <IMappingEvaluator>();
            var       deploymentEventRecorder       = MockRepository.GenerateStub <IDeploymentEventRecorder>();
            var       mappingExecutor               = MockRepository.GenerateStub <IMappingExecutor>();
            Func <IMappingExecutor> executorFactory = () => mappingExecutor;

            var mappingProcessor = new MappingProcessor(mappingEvaluator, deploymentEventRecorder, executorFactory);
            var postDeployAction = MockRepository.GenerateStub <IPostDeployAction>();

            var buildDetail = new BuildDetail();

            var mappings = new[] { new Mapping {
                                       Script = "AScript.ps1", Queue = "AQueue"
                                   } };

            mappingEvaluator.Stub(o => o.DoesMappingApply(null, null, null))
            .IgnoreArguments()
            .Return(true);

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            // Act
            mappingProcessor.ProcessMappings(mappings, statusChanged, buildDetail, postDeployAction, eventId);

            // Assert
            deploymentEventRecorder.AssertWasCalled(o => o.RecordQueued(eventId, mappings[0].Script, mappings[0].Queue));
        }
Example #10
0
        public void PostDeployAction_should_set_KeepForever_and_save_build_when_RetainBuild_is_specified()
        {
            // Arrange
            var alert       = MockRepository.GenerateStub <IAlert>();
            var buildServer = MockRepository.GenerateStub <IBuildServer>();

            var buildDetail = new BuildDetail();

            var tfsBuildDetail = new StubBuildDetail();

            ((IBuildDetail)tfsBuildDetail).KeepForever = false;
            buildServer.Stub(o => o.GetBuild(null, null, null, QueryOptions.None))
            .IgnoreArguments()
            .Return(tfsBuildDetail);

            var mapping = new Mapping {
                RetainBuildSpecified = true, RetainBuild = true
            };

            var result = new DeployAgentResult {
                HasErrors = false, Output = string.Empty
            };

            var postDeployAction = new PostDeployAction(buildDetail, tfsBuildDetail, alert);

            // Act
            postDeployAction.DeploymentFinished(mapping, result);

            // Assert
            Assert.AreEqual(true, ((IBuildDetail)tfsBuildDetail).KeepForever, "KeepForever");
            Assert.AreEqual(1, tfsBuildDetail.SaveCount, "Save()");
        }
        public void AgentShouldKillScriptsThatExceedTimeoutConstraints()
        {
            // Arrange
            var          agent = new BatchFileDeployAgent();
            const string deployScriptFilename  = "SlowDeployment.bat";
            var          deployScriptDirectory = Directory.GetCurrentDirectory();

            File.WriteAllText(deployScriptFilename, @"ping -n 10 127.0.0.1");    // script that just takes about nn seconds to execute

            // required because the deploy agent builds its own parameter list
            var tfsBuildDetail = new BuildDetail
            {
                DropLocation = string.Empty,
                BuildNumber  = string.Empty,
            };

            var deployAgentData = new DeployAgentData
            {
                DeployScriptRoot       = deployScriptDirectory,
                DeployScriptFile       = deployScriptFilename,
                Timeout                = TimeSpan.FromSeconds(2),
                TfsBuildDetail         = tfsBuildDetail,
                DeployScriptParameters = Enumerable.Empty <DeployScriptParameter>().ToList(),
            };

            // Act
            var deployAgentResult = agent.Deploy(deployAgentData);

            // Assert
            Assert.IsTrue(deployAgentResult.Output.Contains(@"Pinging 127.0.0.1"));
            Assert.IsFalse(deployAgentResult.Output.Contains(@"Ping statistics"));

            // Clean up
            File.Delete(deployScriptFilename);
        }
Example #12
0
        public void MappingExecutor_should_call_post_deploy_action_when_script_not_specified()
        {
            // Arrange
            var deployAgentProvider     = MockRepository.GenerateStub <IDeployAgentProvider>();
            var deploymentFolderSource  = MockRepository.GenerateStub <IDeploymentFolderSource>();
            var deploymentEventRecorder = MockRepository.GenerateStub <IDeploymentEventRecorder>();
            var namedLockSet            = new NamedLockSet();
            var mappingExecutor         = new MappingExecutor(deploymentEventRecorder, deployAgentProvider, deploymentFolderSource, namedLockSet);
            var postDeployAction        = MockRepository.GenerateStub <IPostDeployAction>();

            var buildDetail = new BuildDetail();

            var mapping = new Mapping {
                RetainBuildSpecified = true, RetainBuild = true
            };

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            // Act
            mappingExecutor.Execute(statusChanged, buildDetail, mapping, postDeployAction, 0);

            // Assert
            postDeployAction.AssertWasCalled(o => o.DeploymentFinished(
                                                 Arg <Mapping> .Is.Equal(mapping),
                                                 Arg <DeployAgentResult> .Matches(result => !result.HasErrors))
                                             );
        }
Example #13
0
        public void MappingExecutor_should_record_started_time()
        {
            // Arrange
            const int eventId                = 7;
            const int deploymentId           = 23;
            var       deployAgentProvider    = MockRepository.GenerateStub <IDeployAgentProvider>();
            var       deploymentFolderSource = MockRepository.GenerateStub <IDeploymentFolderSource>();

            var mapping = new Mapping();

            var deploymentEventRecorder = MockRepository.GenerateStub <IDeploymentEventRecorder>();

            deploymentEventRecorder.Stub(o => o.RecordQueued(eventId, mapping.Script, mapping.Queue))
            .Return(deploymentId);

            var namedLockSet = new NamedLockSet();

            var postDeployAction = MockRepository.GenerateStub <IPostDeployAction>();
            var buildDetail      = new BuildDetail();
            var statusChanged    = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            var mappingExecutor = new MappingExecutor(deploymentEventRecorder, deployAgentProvider, deploymentFolderSource, namedLockSet);

            // Act
            mappingExecutor.Execute(statusChanged, buildDetail, mapping, postDeployAction, deploymentId);

            // Assert
            deploymentEventRecorder.AssertWasCalled(o => o.RecordStarted(deploymentId));
        }
Example #14
0
        private void ProcessMapping(BuildStatusChangeEvent statusChanged, BuildDetail buildDetail, Mapping mapping, IPostDeployAction postDeployAction)
        {
            lock (GetLockObject(mapping))
            {
                var deployAgent = _deployAgentProvider.GetDeployAgent(mapping);

                // default to "happy; did nothing" if there's no deployment agent.
                var deployResult = new DeployAgentResult {
                    HasErrors = false, Output = string.Empty
                };

                if (deployAgent != null)
                {
                    using (var workingDirectory = new WorkingDirectory())
                    {
                        var deployAgentDataFactory = new DeployAgentDataFactory();
                        var deployData             = deployAgentDataFactory.Create(workingDirectory.DirectoryInfo.FullName,
                                                                                   mapping, buildDetail, statusChanged);

                        _deploymentFolderSource.DownloadDeploymentFolder(deployData.TfsBuildDetail, workingDirectory.DirectoryInfo.FullName);
                        deployResult = deployAgent.Deploy(deployData);
                    }
                }

                postDeployAction.DeploymentFinished(mapping, deployResult);
            }
        }
Example #15
0
        public void LocalPowerShellDeployAgent_should_marshal_build_detail_across_AppDomains()
        {
            // Arrange
            var deploymentEventRecorder = MockRepository.GenerateStub <IDeploymentEventRecorder>();

            DeployAgentResult result;

            using (var scriptFile = new TemporaryFile(".ps1", "$TfsDeployerBuildDetail | Format-List"))
            {
                var buildDetail = new BuildDetail();

                var mapping = new Mapping
                {
                    NewQuality       = "Released",
                    OriginalQuality  = null,
                    ScriptParameters = new ScriptParameter[0],
                    Script           = scriptFile.FileInfo.Name
                };

                var buildStatusChangeEvent = new BuildStatusChangeEvent {
                    StatusChange = new Change()
                };

                var testDeployData = (new DeployAgentDataFactory()).Create(scriptFile.FileInfo.DirectoryName, mapping, buildDetail, buildStatusChangeEvent);

                var agent = new LocalPowerShellDeployAgent(deploymentEventRecorder);

                // Act
                result = agent.Deploy(testDeployData);
            }

            // Assert
            Assert.IsFalse(result.HasErrors, "Test script failed.");
        }
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
            {
                return(null);
            }
            string imageName = string.Empty;

            if (value is SourceControlItem)
            {
                SourceControlItem srcItem = (SourceControlItem)value;
                imageName = srcItem.Item.ItemType.ToString().ToLower();
                if (srcItem.Item.IsBranch)
                {
                    imageName = "branch";
                }
                if (srcItem.Item.DeletionId > 0)
                {
                    imageName += "_deleted";
                }
            }
            else if (value is BuildDetail)
            {
                BuildDetail build = (BuildDetail)value;
                imageName = build.Build.Status.ToString();
            }

            return(new BitmapImage(new Uri("/TFSCleaner;component/Images/" + imageName + ".png", UriKind.RelativeOrAbsolute)));
        }
        public void MappingProcessor_should_call_post_deploy_action_when_script_not_specified()
        {
            // Arrange
            var deployAgentProvider    = new DeployAgentProvider();
            var deploymentFolderSource = MockRepository.GenerateStub <IDeploymentFolderSource>();
            var mappingEvaluator       = MockRepository.GenerateStub <IMappingEvaluator>();
            var mappingProcessor       = new MappingProcessor(deployAgentProvider, deploymentFolderSource, mappingEvaluator);
            var postDeployAction       = MockRepository.GenerateStub <IPostDeployAction>();

            var buildDetail = new BuildDetail();

            var mappings = new[] { new Mapping {
                                       RetainBuildSpecified = true, RetainBuild = true
                                   } };

            mappingEvaluator.Stub(o => o.DoesMappingApply(null, null, null))
            .IgnoreArguments()
            .Return(true);

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };

            // Act
            mappingProcessor.ProcessMappings(mappings, statusChanged, buildDetail, postDeployAction);

            // Assert
            postDeployAction.AssertWasCalled(o => o.DeploymentFinished(
                                                 Arg <Mapping> .Is.Equal(mappings[0]),
                                                 Arg <DeployAgentResult> .Matches(result => !result.HasErrors))
                                             );
        }
Example #18
0
        public IEnumerable <Mapping> ReadMappings(BuildDetail buildDetail)
        {
            TraceHelper.TraceInformation(TraceSwitches.TfsDeployer, "Reading Configuration for Team Project: {0} Team Build: {1}", buildDetail.TeamProject, buildDetail.BuildDefinition.Name);

            DeploymentMappings configuration = null;

            using (var stream = _deploymentFileSource.DownloadDeploymentFile(buildDetail))
            {
                if (stream != null)
                {
                    configuration = Read(stream);
                }
            }

            if (configuration == null)
            {
                TraceHelper.TraceWarning(TraceSwitches.TfsDeployer, "No configuration found for this team project.");
                return(Enumerable.Empty <Mapping>());
            }

            if (configuration.Mappings == null || configuration.Mappings.Length == 0)
            {
                TraceHelper.TraceWarning(TraceSwitches.TfsDeployer, "Configuration did not contain any Mappings.");
                return(Enumerable.Empty <Mapping>());
            }

            return(configuration.Mappings
                   .Where(m => string.IsNullOrEmpty(m.BuildDefinitionPattern) ||
                          Regex.IsMatch(buildDetail.BuildDefinition.Name, m.BuildDefinitionPattern))
                   .ToArray());
        }
Example #19
0
        public void Deployer_should_pass_build_status_to_mapping_processor()
        {
            // Arrange
            BuildDetail buildDetail = null;

            var statusChanged = new BuildStatusChangeEvent {
                StatusChange = new Change()
            };
            var reader = MockRepository.GenerateStub <IConfigurationReader>();

            var tfsBuildDetail = new StubBuildDetail {
                Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.PartiallySucceeded
            };
            var buildServer = MockRepository.GenerateStub <IBuildServer>();

            buildServer.Stub(o => o.GetBuild(null, null, null, QueryOptions.None))
            .IgnoreArguments()
            .Return(tfsBuildDetail);

            var mappingProcessor = MockRepository.GenerateStub <IMappingProcessor>();

            mappingProcessor.Stub(o => o.ProcessMappings(null, null, null, null, 0))
            .IgnoreArguments()
            .WhenCalled(m => buildDetail = (BuildDetail)m.Arguments[2]);

            Func <BuildDetail, IBuildDetail, IPostDeployAction> postDeployActionFactory = (a, b) => MockRepository.GenerateStub <IPostDeployAction>();

            var deployer = new Deployer(reader, buildServer, mappingProcessor, postDeployActionFactory);

            // Act
            deployer.ExecuteDeploymentProcess(statusChanged, 0);

            // Assert
            Assert.AreEqual(global::TfsDeployer.TeamFoundation.BuildStatus.PartiallySucceeded, buildDetail.Status);
        }
        public void DeployAgentDataFactory_should_expose_event_qualities()
        {
            const string oldQuality = "QA";
            const string newQuality = "Production";

            // Arrange
            var deployScriptRoot = Path.GetTempPath();
            var mapping          = new Mapping();
            var buildDetail      = new BuildDetail();
            var changeEvent      = new BuildStatusChangeEvent
            {
                StatusChange = new Change {
                    OldValue = oldQuality, NewValue = newQuality
                }
            };

            var factory = new DeployAgentDataFactory();

            // Act
            var data = factory.Create(deployScriptRoot, mapping, buildDetail, changeEvent);

            // Assert
            Assert.AreEqual(oldQuality, data.OriginalQuality, "OriginalQuality");
            Assert.AreEqual(newQuality, data.NewQuality, "NewQuality");
        }
Example #21
0
        public BuildDetail CreateBuildDetail()
        {
            var buildDetail = new BuildDetail {
                BuildNumber = "test_build_number"
            };

            return(buildDetail);
        }
Example #22
0
        public Stream DownloadDeploymentFile(BuildDetail buildDetail)
        {
            var stream = new MemoryStream();
            var bytes  = Encoding.UTF8.GetBytes(_configurationXml);

            stream.Write(bytes, 0, bytes.Length);
            stream.Seek(0, SeekOrigin.Begin);
            return(stream);
        }
Example #23
0
        private static string GetSubject(Mapping map, BuildDetail build, DeployAgentResult deployAgentResult)
        {
            var errorMessage = "Success: ";

            if (deployAgentResult.HasErrors)
            {
                errorMessage = "Failed: ";
            }

            return(string.Format("{0} TfsDeployer Ran Script {1} on Machine {2} for {3}/{4}/{5}", errorMessage, map.Script, map.Computer, build.TeamProject, build.BuildDefinition.Name, build.BuildNumber));
        }
Example #24
0
        public void DownloadDeploymentFolder(BuildDetail buildDetail, string destination)
        {
            var serverPath = VersionControlPath.GetDeploymentFolderServerPath(buildDetail);

            TraceHelper.TraceInformation(TraceSwitches.TfsDeployer, "Getting files from {0} to {1}", serverPath, destination);

            var serverItemSpec = new ItemSpec(serverPath, RecursionType.Full);
            var request        = new[] { new GetRequest(serverItemSpec, VersionSpec.Latest) };

            GetLatestFromSourceCodeControl(serverPath, destination, request);
        }
        protected static IEnumerable <Mapping> ReadMappings(string buildDefinitionName, string configurationXml)
        {
            var buildDetail = new BuildDetail
            {
                BuildDefinition = { Name = buildDefinitionName }
            };

            var deploymentFileSource = new StubDeploymentFileSource(configurationXml);
            var configReader         = new ConfigurationReader(deploymentFileSource, string.Empty);

            return(configReader.ReadMappings(buildDetail));
        }
        public Stream DownloadDeploymentFile(BuildDetail buildDetail)
        {
            var deploymentFile = GetDeploymentMappingsFileServerPath(buildDetail);
            var itemSpec       = new ItemSpec(deploymentFile, RecursionType.None);
            var itemSet        = _versionControlServer.GetItems(itemSpec, VersionSpec.Latest, DeletedState.NonDeleted, ItemType.File, GetItemsOptions.Download);

            if (itemSet.Items.Length == 0)
            {
                TraceHelper.TraceWarning(TraceSwitches.TfsDeployer, "Could not download file {0} from version control.", deploymentFile);
                return(null);
            }
            return(itemSet.Items[0].DownloadFile());
        }
Example #27
0
        private static string GetBody(Mapping map, BuildDetail build, DeployAgentResult deployAgentResult)
        {
            var builder = new StringBuilder();

            builder.AppendLine(string.Format("Team Project/Build: {0} to {1}", build.TeamProject, build.BuildDefinition.Name));
            builder.AppendLine(string.Format("Quality Change: {0} to {1}", map.OriginalQuality, map.NewQuality));
            builder.AppendLine(string.Format("Drop Location: {0}", build.DropLocation));
            builder.AppendLine(string.Format("Build Uri: {0}", build.Uri));
            builder.AppendLine(string.Format("Script: {0}", map.Script));
            builder.AppendLine(string.Format("Executed on Machine: {0}", map.Computer));
            builder.AppendLine("Output:");
            builder.AppendLine(deployAgentResult.Output);
            return(builder.ToString());
        }
        public void VersionControlDeploymentFileSource_should_return_null_if_file_does_not_exist()
        {
            // Arrange
            var buildDetail = new BuildDetail {
                BuildDefinition = { Process = { ServerPath = "$/TfsDeployer/path_does_not_exist/build.xaml" } }
            };
            var tfsCollection        = new TfsTeamProjectCollection(new Uri("https://tfs.codeplex.com/tfs/tfs06"));
            var versionControlServer = tfsCollection.GetService <VersionControlServer>();
            var source = new VersionControlDeploymentFileSource(versionControlServer);

            // Act
            var stream = source.DownloadDeploymentFile(buildDetail);

            // Assert
            Assert.IsNull(stream);
        }
Example #29
0
        public void EmailAlerter_should_return_silently_if_mapping_notification_address_is_blank()
        {
            // Arrange
            var mapping           = new Mapping();
            var build             = new BuildDetail();
            var deployAgentResult = new DeployAgentResult();
            var emailAlerter      = new EmailAlerter();

            mapping.NotificationAddress = string.Empty;

            // Act
            emailAlerter.Alert(mapping, build, deployAgentResult);

            // Assert
            // no exception
        }
Example #30
0
        public IEnumerable <WorkItem> Execute(BuildDetail earliestBuild, BuildDetail latestBuild, Uri serverUri, string projectName)
        {
            if (earliestBuild == null || latestBuild == null)
            {
                return(new WorkItem[] {});
            }

            using (var collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(serverUri))
            {
                var builds = earliestBuild.BranchRoot.Equals(latestBuild.BranchRoot, StringComparison.InvariantCultureIgnoreCase) ?
                             GetBuildsFromOneBranch(earliestBuild, latestBuild, projectName, collection) :
                             GetBuildsAcrossBranches(earliestBuild, latestBuild, projectName, collection);

                return(GetWorkItemsForBuilds(builds, collection, projectName));
            }
        }
        public DeployAgentData Create(string deployScriptRoot, Mapping mapping, BuildDetail buildDetail, BuildStatusChangeEvent buildStatusChangeEvent)
        {
            var data = new DeployAgentData
            {
                NewQuality             = buildStatusChangeEvent.StatusChange.NewValue,
                OriginalQuality        = buildStatusChangeEvent.StatusChange.OldValue,
                DeployServer           = mapping.Computer,
                DeployScriptFile       = mapping.Script,
                DeployScriptRoot       = deployScriptRoot,
                DeployScriptParameters = CreateParameters(mapping.ScriptParameters),
                Timeout        = mapping.TimeoutSeconds == 0 ? TimeSpan.MaxValue : TimeSpan.FromSeconds(mapping.TimeoutSeconds),
                TfsBuildDetail = buildDetail
            };

            return(data);
        }
 private void UpdateLight(BuildDetail buildDetail)
 {
     switch (buildDetail.Status)
     {
         case BuildStatus.Failed:
             buildStatusLight.SignalBuildFailed();
             break;
         case BuildStatus.InProgress:
             buildStatusLight.SignalBuildInProgress();
             break;
         case BuildStatus.NotStarted:
             buildStatusLight.DisableLight();
             break;
         case BuildStatus.PartiallySucceeded:
             buildStatusLight.SignalBuildPartiallySucceeded();
             break;
         case BuildStatus.Stopped:
             buildStatusLight.DisableLight();
             break;
         case BuildStatus.Succeeded:
             buildStatusLight.SignalBuildSucceeded();
             break;
         default:
             buildStatusLight.DisableLight();
             break;
     }
 }
        private BuildDetail GetLatestBuildStatus()
        {
            using (var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(updaterConfiguration.TeamProjectCollectionUri)))
            {
                BuildDetail result = null;

                IBuildServer buildServer = tfs.GetService(typeof(IBuildServer)) as IBuildServer;

                if (buildServer == null)
                {
                    throw new NullReferenceException("Reference to build server is null.");
                }

                IBuildDetailSpec buildDetailSpec = buildServer.CreateBuildDetailSpec(updaterConfiguration.TeamProject, updaterConfiguration.BuildDefinitionName);
                buildDetailSpec.MaxBuildsPerDefinition = 1;
                buildDetailSpec.QueryOrder = BuildQueryOrder.FinishTimeDescending;

                IBuildQueryResult buildQueryResult = buildServer.QueryBuilds(buildDetailSpec);

                if (buildQueryResult.Failures.Length == 0 && buildQueryResult.Builds.Length == 1)
                {
                    IBuildDetail buildDetail = buildQueryResult.Builds[0];

                    result = new BuildDetail()
                    {
                        BuildNumber = buildDetail.BuildNumber,
                        RequestedBy = buildDetail.RequestedBy,
                        RequestedFor = buildDetail.RequestedFor,
                        Status = buildDetail.Status
                    };
                }

                return result;
            }
        }