public override async Task RunTaskAsync(string taskName, string taskSessionId) { using (var contextOutput = new DomainOutput()) { contextOutput.OnWrite += (text, color) => Output.Write(text, color); contextOutput.OnWriteLine += (text, color) => Output.WriteLine(text, color); contextOutput.OnWriteRaw += text => Output.WriteRaw(text); var packageClient = new DomainPackageClient(Packages.Boundary); var applicationClient = new ApplicationManagerClient(Applications.Boundary) { CurrentProjectId = Project.Id, CurrentDeploymentNumber = BuildNumber, // TODO: BuildTask should not have access }; var context = new AgentBuildContext { Project = Project, Agent = Agent, AssemblyFilename = AssemblyFilename, GitRefspec = GitRefspec, TaskName = taskName, WorkDirectory = WorkDirectory, ContentDirectory = ContentDirectory, BinDirectory = BinDirectory, BuildNumber = BuildNumber, Output = contextOutput, Packages = packageClient, ServerVariables = ServerVariables, AgentVariables = AgentVariables, Applications = applicationClient, CommitHash = CommitHash, CommitAuthor = CommitAuthor, CommitMessage = CommitMessage, }; var githubSource = Project?.Source as ProjectGithubSource; var notifyGithub = githubSource != null && githubSource.NotifyOrigin == NotifyOrigin.Agent; if (notifyGithub && SourceCommit != null) { await NotifyGithubStarted(githubSource); } try { var task = Task.Run(async() => { await Domain.RunBuildTask(context, TokenSource.Token); }); await taskList.AddOrUpdate(taskSessionId, id => task, (id, _) => task); await task.ContinueWith(t => { taskList.TryRemove(taskSessionId, out _); }); } catch (Exception error) { Exception = error; throw; } } }
public async Task RunBuildTask(AgentBuildContext context) { Sponsor.Register(context.Output); Sponsor.Register(context.Packages); try { var completeEvent = new RemoteTaskCompletionSource <object>(); Agent.RunBuildTask(context, completeEvent); await completeEvent.Task; } finally { Sponsor.Unregister(context.Packages); Sponsor.Unregister(context.Output); } }
public async Task RunBuildTask(AgentBuildContext context, CancellationToken token = default(CancellationToken)) { Log.Debug($"Running build Task '{context.TaskName}'..."); var completeEvent = new RemoteTaskCompletionSource(); token.Register(completeEvent.SetCancelled); try { Agent.RunBuildTask(context, completeEvent); await completeEvent.Task; Log.Info($"Build Task '{context.TaskName}' complete."); } catch (Exception error) { Log.Error($"Build Task '{context.TaskName}' failed!", error); throw; } }
public override async Task RunTaskAsync(string taskName, string taskSessionId) { var context = new AgentBuildContext { Project = Project, AssemblyFilename = AssemblyFilename, GitRefspec = GitRefspec, TaskName = taskName, WorkDirectory = WorkDirectory, ContentDirectory = ContentDirectory, BinDirectory = BinDirectory, BuildNumber = BuildNumber, Output = Output.Writer, Packages = PackageClient, ServerVariables = ServerVariables, AgentVariables = PhotonAgent.Instance.Variables, }; var githubSource = Project?.Source as ProjectGithubSource; var notifyGithub = githubSource != null && githubSource.NotifyOrigin == NotifyOrigin.Agent && Commit != null; CommitStatusUpdater su = null; if (notifyGithub) { su = new CommitStatusUpdater { Username = githubSource.Username, Password = githubSource.Password, StatusUrl = Commit.StatusesUrl, Sha = Commit.Sha, }; var status = new CommitStatus { State = CommitStates.Pending, Context = "Photon", Description = "Build in progress..." }; await su.Post(status); } var success = false; try { await Domain.RunBuildTask(context); success = true; } finally { if (notifyGithub) { var status = new CommitStatus { Context = "Photon", }; if (success) { status.State = CommitStates.Success; status.Description = "Build Successful."; } else { status.State = CommitStates.Failure; status.Description = "Build Failed!"; } await su.Post(status); } } }
public override async Task RunTaskAsync(string taskName, string taskSessionId) { using (var contextOutput = new DomainOutput()) { contextOutput.OnWrite += (text, color) => Output.Write(text, color); contextOutput.OnWriteLine += (text, color) => Output.WriteLine(text, color); contextOutput.OnWriteRaw += (text) => Output.WriteRaw(text); var context = new AgentBuildContext { Project = Project, Agent = Agent, AssemblyFilename = AssemblyFilename, GitRefspec = GitRefspec, TaskName = taskName, WorkDirectory = WorkDirectory, ContentDirectory = ContentDirectory, BinDirectory = BinDirectory, BuildNumber = BuildNumber, Output = contextOutput, Packages = PackageClient, ServerVariables = ServerVariables, AgentVariables = AgentVariables, }; var githubSource = Project?.Source as ProjectGithubSource; var notifyGithub = githubSource != null && githubSource.NotifyOrigin == NotifyOrigin.Agent && Commit != null; CommitStatusUpdater su = null; CommitStatus status; if (notifyGithub) { su = new CommitStatusUpdater { Username = githubSource.Username, Password = githubSource.Password, StatusUrl = Commit.StatusesUrl, Sha = Commit.Sha, }; status = new CommitStatus { State = CommitStates.Pending, Context = "Photon", Description = "Build in progress..." }; await su.Post(status); } status = new CommitStatus { Context = "Photon", }; try { await Domain.RunBuildTask(context, TokenSource.Token); if (notifyGithub) { status.State = CommitStates.Success; status.Description = "Build Successful."; await su.Post(status); } } catch (Exception error) { Exception = error; if (notifyGithub) { status.State = CommitStates.Failure; status.Description = "Build Failed!"; await su.Post(status); } throw; } } }