Ejemplo n.º 1
0
        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;
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
        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);
                }
            }
        }
Ejemplo n.º 5
0
        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;
                }
            }
        }