public void WaitForRequestShouldBlockUntilNewBuildIsRequested() { int processedRequests = 0; int processedForcedBuildRequests = 0; int processedModExistsRequests = 0; Thread spawningThread = new Thread(new ThreadStart(SpawnNewThreads)); spawningThread.Start(); completedThreads = 0; while (completedThreads < totalThreads) { processedRequests++; BuildCondition condition = queue.WaitForRequest(); if (condition == BuildCondition.ForceBuild) { processedForcedBuildRequests++; } else if (condition == BuildCondition.IfModificationExists) { processedModExistsRequests++; } else { Assert.Fail("Unexpected build request"); } } Assert.IsTrue(spawningThread.Join(30000), "Build request threads did not complete within 30 seconds."); Assert.AreEqual(totalThreads * 2, processedRequests, "Not all threads which started, completed."); Assert.AreEqual(totalThreads, processedForcedBuildRequests, "Not all force build requests were received."); Assert.AreEqual(totalThreads, processedModExistsRequests, "Not all modification exists requests were received."); }
private bool ShouldRunIntegration() { lock (syncCheck) { if (this.ShouldForceBuild) { this.ShouldForceBuild = false; this.IntegrationResult.BuildCondition = BuildCondition.ForceBuild; return(true); } BuildCondition ShouldIntegration = _trigger.ShouldRunIntegration(); if (ShouldIntegration != BuildCondition.NoBuild) { try { this.IntegrationResult = resultManager.StartNewIntegration(); this.IntegrationResult.BuildCondition = ShouldIntegration; return(true); } catch (Exception ex) { Log.Error(ex); return(false); } } return(false); } }
public BuildCondition ShouldRunIntegration() { BuildCondition buildCondition = InnerTrigger.ShouldRunIntegration(); if (buildCondition == BuildCondition.NoBuild) { return(buildCondition); } IntegrationCompleted(); // reset inner trigger try { ProjectStatus currentStatus = GetCurrentProjectStatus(); if (lastStatus == null) { lastStatus = currentStatus; return(BuildCondition.NoBuild); } if (currentStatus.LastBuildDate > lastStatus.LastBuildDate && currentStatus.BuildStatus == TriggerStatus) { lastStatus = currentStatus; return(buildCondition); } } catch (Exception ex) { } return(BuildCondition.NoBuild); }
/// <summary> /// Initialise a new <see cref="IntegrationRequest"/>. /// </summary> /// <param name="buildCondition"></param> /// <param name="source"></param> /// <param name="userName"></param> public IntegrationRequest(BuildCondition buildCondition, string source, string userName) { this.buildCondition = buildCondition; this.source = source; this.requestTime = DateTime.Now; UserName = userName; }
public void Build([FromBody] BuildCondition buildCondition) { if (buildCondition.PageCountLimit.HasValue) { buildCondition.PageCountLimit = DEFAULT_PAGE_COUNT_LIMIT; } }
private BuildCondition DetermineBuildCondition(BuildCondition buildCondition) { if (LastIntegrationResult.IsInitial()) { return BuildCondition.ForceBuild; } return buildCondition; }
private BuildCondition DetermineBuildCondition(BuildCondition buildCondition) { if (LastIntegrationResult.IsInitial()) { return(BuildCondition.ForceBuild); } return(buildCondition); }
/// <summary> /// Fires this instance. /// </summary> /// <returns></returns> /// <remarks></remarks> public virtual IntegrationRequest Fire() { BuildCondition buildCondition = ShouldRunIntegration(); if (buildCondition == BuildCondition.NoBuild) { return(null); } return(new IntegrationRequest(buildCondition, Name, null)); }
public void RequestBuild(BuildCondition condition) { lock (this) { if (request.IsHigherPriority(condition)) { request = new BuildRequest(condition); latch.Set(); } } }
public void TestShouldRunIntegrationInnerNoBuild() { ProjectTriggerFilter TestSubject = new ProjectTriggerFilter(); RecorderITrigger TriggerRecorder = new RecorderITrigger(); TriggerRecorder.Recordings.ShouldRunIntegrationRecording.ReturnValue = BuildCondition.NoBuild; TestSubject.InnerTrigger = TriggerRecorder; BuildCondition Condition = TestSubject.ShouldRunIntegration(); Assert.AreEqual(BuildCondition.NoBuild, Condition); }
public void TestShouldRunIntegrationBlockedByInclusionFilterCauseBuilding() { ProjectTriggerFilter TestSubject = new ProjectTriggerFilter(); RecorderITrigger TriggerRecorder = new RecorderITrigger(); TriggerRecorder.Recordings.ShouldRunIntegrationRecording.ReturnValue = BuildCondition.IfModificationExists; TestSubject.InnerTrigger = TriggerRecorder; TestSubject.ProjectFilters = new ProjectFilterList(); ProjectFilter Project = new ProjectFilter(); Project.Project = "TestProject"; Project.ServerUri = "TestUri"; Project.InclusionFilters.Activities = new ProjectActivity[1] { ProjectActivity.Sleeping }; Project.InclusionFilters.Conditions = new IntegrationStatus[1] { IntegrationStatus.Success }; RecorderIRemotingService RemotingRecorder = new RecorderIRemotingService(); RecorderICruiseManager CruiseRecorder = new RecorderICruiseManager(); ProjectStatus Stati = new ProjectStatus(); Stati.Name = "TestProject"; Stati.Activity = ProjectActivity.Building; Stati.BuildStatus = IntegrationStatus.Success; CruiseRecorder.Recordings.GetProjectStatusRecording.ReturnValue = new ProjectStatus[1] { Stati }; RemotingRecorder.Recordings.ConnectTypeStringRecording.ReturnValue = CruiseRecorder; Project.RemoteService = RemotingRecorder; TestSubject.ProjectFilters.Add(Project); BuildCondition Condition = TestSubject.ShouldRunIntegration(); Assert.IsTrue(RemotingRecorder.Recordings.ConnectTypeStringRecording.Called); Assert.AreEqual("TestUri", RemotingRecorder.Recordings.ConnectTypeStringRecording.PassedStringuri); Assert.AreEqual(typeof(ICruiseManager), RemotingRecorder.Recordings.ConnectTypeStringRecording.PassedTypeproxyType); Assert.IsTrue(CruiseRecorder.Recordings.GetProjectStatusRecording.Called); Assert.AreEqual(BuildCondition.NoBuild, Condition); }
public BuildCondition ShouldRunIntegration() { BuildCondition overallCondition = BuildCondition.NoBuild; foreach (ITrigger trigger in triggers) { // Assumes ordering of elements of enum BuildCondition condition = trigger.ShouldRunIntegration(); if (condition > overallCondition) { overallCondition = condition; } } return(overallCondition); }
public override BuildCondition ShouldRunIntegration() { BuildCondition condition = base.ShouldRunIntegration(); if (condition == BuildCondition.NoBuild) { return(condition); } Log.Debug(string.Format("More than {0} seconds since last integration, checking url.", IntervalSeconds)); if (HasUrlChanged()) { return(BuildCondition); } return(BuildCondition.NoBuild); }
public BuildCondition WaitForRequest() { if (!HasPendingRequests()) { latch.WaitOne(); } lock (this) { BuildCondition result = request.Condition; request = NoBuildRequested; latch.Reset(); Debug.Assert(result != BuildCondition.NoBuild); return(result); } }
public Card( string id, string name, CardType type, int age, BuildCondition buildCondition, string[] chainTo, int nPlayersPlayable ) { this.ID = id; this.Name = name; this.Type = type; this.Age = age; this.CardBuildCondition = buildCondition; this.ChainTo = chainTo; this.NPlayersPlayable = nPlayersPlayable; }
public BuildCondition ShouldRunIntegration() { BuildCondition ShouldRun = this.InnerTrigger.ShouldRunIntegration(); if (ShouldRun == BuildCondition.NoBuild) { return(BuildCondition.NoBuild); } foreach (ProjectFilter Project in this.ProjectFilters) { if (!Project.IsAllowed()) { return(BuildCondition.NoBuild); } } return(ShouldRun); }
private bool ShouldRunIntegration() { if (this.ShouldForceBuild) { this.ShouldForceBuild = false; this.IntegrationResult.BuildCondition = BuildCondition.ForceBuild; return(true); } BuildCondition ShouldIntegration = _trigger.ShouldRunIntegration(); if (ShouldIntegration != BuildCondition.NoBuild) { this.IntegrationResult = resultManager.StartNewIntegration(); this.IntegrationResult.BuildCondition = ShouldIntegration; return(true); } return(false); }
public ProjectStatus(ProjectIntegratorState status, IntegrationStatus buildStatus, ProjectActivity activity, string name, string webURL, DateTime lastBuildDate, TimeSpan lastBuildDuration, string lastBuildLabel, string lastSuccessfulBuildLabel, DateTime nextBuildTime, string forcee, Modification[] modifications, DateTime currentBuildStartTime, BuildCondition buildCondition) { this.status = status; this.buildStatus = buildStatus; this.activity = activity; this.name = name; this.webURL = webURL; this.lastBuildDate = lastBuildDate; this.lastBuildLabel = lastBuildLabel; this.lastSuccessfulBuildLabel = lastSuccessfulBuildLabel; this.nextBuildTime = nextBuildTime; this._Forcee = forcee; this._Modifications = modifications; this.currentBuildStartTime = currentBuildStartTime; this.buildCondition = buildCondition; this.lastBuildDuration = lastBuildDuration; }
public void TestIntegrationPropertyToString() { const int integer = 5; string integerString = integer.ToString(); const BuildCondition buildCondition = BuildCondition.ForceBuild; const IntegrationStatus integrationStatus = IntegrationStatus.Success; ArrayList arrayList = new ArrayList(); arrayList.Add("foo"); arrayList.Add("5"); arrayList.Add("bar"); const string customDelimiter = "-"; const string defaultConvertedArrayList = "\"foo" + StringUtil.DEFAULT_DELIMITER + "5" + StringUtil.DEFAULT_DELIMITER + "bar\""; const string customConvertedArrayList = "\"foo" + customDelimiter + "5" + customDelimiter + "bar\""; Assert.AreEqual(StringUtil.IntegrationPropertyToString(integer), integerString); Assert.AreEqual(StringUtil.IntegrationPropertyToString(integerString), integerString); Assert.AreEqual(StringUtil.IntegrationPropertyToString(buildCondition), buildCondition.ToString()); Assert.AreEqual(StringUtil.IntegrationPropertyToString(integrationStatus), integrationStatus.ToString()); Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList), defaultConvertedArrayList); Assert.AreEqual(StringUtil.IntegrationPropertyToString(integer, customDelimiter), integerString); Assert.AreEqual(StringUtil.IntegrationPropertyToString(integerString, customDelimiter), integerString); Assert.AreEqual(StringUtil.IntegrationPropertyToString(buildCondition, customDelimiter), buildCondition.ToString()); Assert.AreEqual(StringUtil.IntegrationPropertyToString(integrationStatus, customDelimiter), integrationStatus.ToString()); Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList, customDelimiter), customConvertedArrayList); Assert.AreEqual(StringUtil.IntegrationPropertyToString(null), null); ArrayList arrayList2 = new ArrayList(); arrayList2.Add("foo"); Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList2), "foo"); Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList2, customDelimiter), "foo"); }
public BuildCondition ShouldRunIntegration() { Log.Info(string.Format("{0}:Begin", System.Reflection.MethodBase.GetCurrentMethod().Name)); BuildCondition ShouldRun = this.InnerTrigger.ShouldRunIntegration(); if (ShouldRun == BuildCondition.NoBuild) { return(BuildCondition.NoBuild); } foreach (ProjectFilter Project in this.ProjectFilters) { if (!Project.IsAllowed()) { Log.Info(string.Format("{0}:this.InnerTrigger.IntegrationNotRun()", System.Reflection.MethodBase.GetCurrentMethod().Name)); this.InnerTrigger.IntegrationNotRun(); return(BuildCondition.NoBuild); } } Log.Info(string.Format("{0}:ShouldRun={1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ShouldRun.ToString())); return(ShouldRun); }
/// <summary> /// Forces a build for the named project with some parameters. /// </summary> /// <param name="projectName">project to force</param> /// <param name="parameters">The parameters.</param> /// <param name="condition">The condition.</param> public override void ForceBuild(string projectName, List <NameValuePair> parameters, BuildCondition condition) { if (string.IsNullOrEmpty(projectName)) { throw new ArgumentNullException("projectName"); } BuildIntegrationRequest request = new BuildIntegrationRequest(SessionToken, projectName); request.BuildCondition = condition; request.BuildValues = parameters; request.ServerName = TargetServer; request.DisplayName = this.DisplayName; var resp = this.connection.SendMessage("ForceBuild", request); ValidateResponse(resp); }
static void Main(string[] args) { OptionSet opts = new OptionSet(); opts.Add("h|?|help", "display this help screen", delegate(string v) { help = v != null; }) .Add("s|server=", "the CruiseControl.Net server to send the commands to (required for all actions except help)", delegate(string v) { server = v; }) .Add("t|target=", "the target server for all messages", delegate(string v) { target = v; }) .Add("p|project=", "the project to use (required for all actions except help and retrieve)", delegate(string v) { project = v; }) .Add("a|all", "lists all the projects (only valid for retrieve)", delegate(string v) { all = v != null; }) .Add("q|quiet", "run in quiet mode (do not print messages)", delegate(string v) { quiet = v != null; }) .Add("ime|ifmodificationexists", "only force the build if modification exist", delegate(string v) { condition = v != null ? BuildCondition.IfModificationExists : BuildCondition.ForceBuild; }) .Add("r|params=", "a semicolon separated list of name value pairs", delegate(string v) { string_params = v; }) .Add("f|params_file=", "the name of a XML file containing the parameters values to use when forcing a build. If specified at the same time as this flag, the values from the command line are ignored", delegate(string v) { params_filename = v; }) .Add("x|xml", "outputs the details in XML format instead of plain text (only valid for retrieve)", delegate(string v) { xml = v != null; }) .Add("user="******"the user of the user account to use", v => { userName = v; }) .Add("pwd=", "the password to use for the user", v => { password = v; }); try { extra = opts.Parse(args); } catch (OptionException e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); return; } if ((extra.Count == 1) && !help) { command = (CommandType)Enum.Parse(typeof(CommandType), extra[0], true); } else { DisplayHelp(opts); return; } try { switch (command) { case CommandType.Help: DisplayHelp(opts); break; case CommandType.Retrieve: RunRetrive(); break; case CommandType.ForceBuild: RunForceBuild(); break; case CommandType.AbortBuild: RunAbortBuild(); break; case CommandType.StartProject: RunStartProject(); break; case CommandType.StopProject: RunStopProject(); break; default: throw new CruiseControlException("Unknown action: " + command.ToString()); } } catch (Exception error) { WriteError("ERROR: An unknown error has occurred!", error); } }
/// <summary> /// Forces a build. /// </summary> /// <param name="condition">The condition.</param> public void ForceBuild(BuildCondition condition) { this.client.ForceBuild(this.Name, new List<NameValuePair>(), condition); }
public BuildRequest(BuildCondition condition) { this.condition = condition; }
/// <summary> /// Forces a build for the named project with some parameters. /// </summary> /// <param name="projectName">project to force</param> /// <param name="parameters">The parameters.</param> /// <param name="condition">The condition.</param> public virtual void ForceBuild(string projectName, List <NameValuePair> parameters, BuildCondition condition) { this.ForceBuild(projectName, parameters); }
public IntegrationRequest Request(BuildCondition buildCondition) { return new IntegrationRequest(buildCondition, Source, null); }
/// <summary> /// Forces a build. /// </summary> /// <param name="condition">The condition.</param> public void ForceBuild(BuildCondition condition) { this.client.ForceBuild(this.Name, new List <NameValuePair>(), condition); }
public IntegrationRequest Request(BuildCondition buildCondition) { return(new IntegrationRequest(buildCondition, Source, null)); }
static void Main(string[] args) { OptionSet opts = new OptionSet(); opts.Add("h|?|help", "display this help screen", delegate(string v) { help = v != null; }) .Add("s|server=", "the CruiseControl.Net server to send the commands to (required for all actions except help)", delegate(string v) { server = v; }) .Add("t|target=", "the target server for all messages", delegate(string v) { target = v; }) .Add("p|project=", "the project to use (required for all actions except help and retrieve)", delegate(string v) { project = v; }) .Add("a|all", "lists all the projects (only valid for retrieve)", delegate(string v) { all = v != null; }) .Add("q|quiet", "run in quiet mode (do not print messages)", delegate(string v) { quiet = v != null; }) .Add("ime|ifmodificationexists", "only force the build if modification exist", delegate(string v) { condition = v != null ? BuildCondition.IfModificationExists : BuildCondition.ForceBuild; }) .Add("r|params=", "a semicolon separated list of name value pairs", delegate(string v) { string_params = v; }) .Add("f|params_file=", "the name of a XML file containing the parameters values to use when forcing a build. If specified at the same time as this flag, the values from the command line are ignored", delegate(string v) { params_filename = v; }) .Add("x|xml", "outputs the details in XML format instead of plain text (only valid for retrieve)", delegate(string v) { xml = v != null; }) .Add("user="******"the user of the user account to use", v => { userName = v; }) .Add("pwd=", "the password to use for the user", v => { password = v;}) .Add("volunteer_name=", "the name to use when volunteering (defaults to Environment.UserName)", v => { volunteer_name = v; }); try { extra = opts.Parse(args); } catch (OptionException e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); return; } if((extra.Count == 1) && !help) { command = (CommandType) Enum.Parse(typeof(CommandType), extra[0], true); } else { DisplayHelp(opts); return; } try { switch (command) { case CommandType.Help: DisplayHelp(opts); break; case CommandType.Retrieve: RunRetrive(); break; case CommandType.ForceBuild: RunForceBuild(); break; case CommandType.AbortBuild: RunAbortBuild(); break; case CommandType.StartProject: RunStartProject(); break; case CommandType.StopProject: RunStopProject(); break; case CommandType.Volunteer: RunVolunteer(); break; default: throw new CruiseControlException("Unknown action: " + command.ToString()); } } catch (Exception error) { WriteError("ERROR: An unknown error has occurred!", error); } }
public bool IsHigherPriority(BuildCondition condition) { return this.condition < condition; }
/// <summary> /// Forces a build for the named project with some parameters. /// </summary> /// <param name="projectName">project to force</param> /// <param name="parameters">The parameters.</param> /// <param name="condition">The condition.</param> public override void ForceBuild(string projectName, List<NameValuePair> parameters, BuildCondition condition) { if (string.IsNullOrEmpty(projectName)) throw new ArgumentNullException("projectName"); BuildIntegrationRequest request = new BuildIntegrationRequest(SessionToken, projectName); request.BuildCondition = condition; request.BuildValues = parameters; request.ServerName = TargetServer; request.DisplayName = this.DisplayName; var resp = this.connection.SendMessage("ForceBuild", request); ValidateResponse(resp); }
public bool IsHigherPriority(BuildCondition condition) { return(this.condition < condition); }