Exemple #1
0
        public override async Task RunAsync()
        {
            var context = new ServerBuildContext {
                BuildNumber       = BuildNumber,
                Agents            = PhotonServer.Instance.Agents.All.ToArray(),
                Project           = Project,
                AssemblyFilename  = AssemblyFilename,
                PreBuild          = PreBuild,
                TaskName          = TaskName,
                WorkDirectory     = WorkDirectory,
                ContentDirectory  = ContentDirectory,
                BinDirectory      = BinDirectory,
                Packages          = PackageClient,
                ConnectionFactory = ConnectionFactory,
                Output            = Output,
                ServerVariables   = Variables,
                //Commit = Commit,
            };

            using (var sessionHandle = context.RegisterAgents.Any(Roles)) {
                try {
                    await sessionHandle.BeginAsync(TokenSource.Token);

                    await sessionHandle.RunTaskAsync(TaskName, TokenSource.Token);
                }
                finally {
                    await sessionHandle.ReleaseAsync(TokenSource.Token);
                }
            }
        }
Exemple #2
0
        public override async Task RunAsync()
        {
            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 ServerBuildContext {
                BuildNumber       = Build.Number,
                Agents            = PhotonServer.Instance.Agents.All.ToArray(),
                Project           = Project,
                AssemblyFilename  = AssemblyFilename,
                PreBuild          = PreBuild,
                TaskName          = TaskName,
                WorkDirectory     = WorkDirectory,
                ContentDirectory  = ContentDirectory,
                BinDirectory      = BinDirectory,
                Packages          = PackageClient,
                ConnectionFactory = ConnectionFactory,
                Output            = contextOutput,
                ServerVariables   = Variables,
                Commit            = Commit,
            };

            try {
                switch (Mode)
                {
                case AgentStartModes.All:
                    await RunAll(context);

                    break;

                case AgentStartModes.Any:
                    await RunAny(context);

                    break;
                }

                Build.IsSuccess = true;
            }
            catch (OperationCanceledException) {
                Build.IsCancelled = true;
                throw;
            }
            catch (Exception error) {
                Build.Exception = error.UnfoldMessages();
                throw;
            }
            finally {
                Build.IsComplete      = true;
                Build.Duration        = DateTime.UtcNow - Build.Created;
                Build.ProjectPackages = PushedProjectPackages.ToArray();
                Build.Save();

                await Build.SetOutput(Output.GetString());

                // TODO: Save alternate version with ansi characters removed
            }
        }
Exemple #3
0
        private async Task RunAny(ServerBuildContext context)
        {
            using (var sessionHandle = context.RegisterAgents.Any(Roles)) {
                try {
                    await sessionHandle.BeginAsync(TokenSource.Token);

                    await sessionHandle.RunTaskAsync(TaskName, TokenSource.Token);
                }
                finally {
                    await sessionHandle.ReleaseAsync(TokenSource.Token);
                }
            }
        }
Exemple #4
0
        private async Task RunAll(ServerBuildContext context)
        {
            var sessionHandleCollection = context.RegisterAgents.All(Roles);

            try {
                await sessionHandleCollection.InitializeAsync(TokenSource.Token);

                await sessionHandleCollection.RunTasksAsync(new [] { TaskName }, TokenSource.Token);
            }
            finally {
                await sessionHandleCollection.ReleaseAllAsync(TokenSource.Token);
            }
        }