예제 #1
0
        private void DisplayCommitSignatureStatus(CommitStatus commitStatus)
        {
            /* COMMIT section */
            switch (commitStatus)
            {
            case CommitStatus.GoodSignature:
                commitSignPicture.Image   = Properties.Resources.commit_ok;
                commitSignPicture.Visible = true;
                break;

            case CommitStatus.MissingPublicKey:
                commitSignPicture.Image   = Properties.Resources.commit_warning;
                commitSignPicture.Visible = true;
                break;

            case CommitStatus.SignatureError:
                commitSignPicture.Image   = Properties.Resources.commit_error;
                commitSignPicture.Visible = true;
                break;

            case CommitStatus.NoSignature:
            default:
                commitSignPicture.Visible = false;
                break;
            }
        }
예제 #2
0
 public Package(Product product, CombinedCommitStatus commit, CommitStatus status)
 {
     Product   = product;
     Commit    = commit;
     Status    = status;
     TargetUri = new Uri(status.TargetUrl);
 }
 public GpgInfo(CommitStatus commitStatus, string commitVerificationMessage, TagStatus tagStatus, string tagVerificationMessage)
 {
     CommitStatus = commitStatus;
     CommitVerificationMessage = commitVerificationMessage;
     TagStatus = tagStatus;
     TagVerificationMessage = tagVerificationMessage;
 }
예제 #4
0
        private async Task NotifyGithubComplete(ProjectGithubSource githubSource)
        {
            if (SourceCommit == null)
            {
                Log.Error("Unable to send GitHub notification! Commit is undefined!");
                return;
            }

            var status = new CommitStatus {
                Context = "Photon",
            };

            if (Exception != null)
            {
                status.State       = CommitStates.Failure;
                status.Description = "Build Failed!";
            }
            else
            {
                status.State       = CommitStates.Success;
                status.Description = "Build Successful.";
            }

            await GetStatusUpdater(githubSource).Post(status);
        }
예제 #5
0
 public void ReceiveCommitStatus(string commitSha, CommitStatus status)
 {
     if (commitStatus.ContainsKey(commitSha))
     {
         commitStatus.AddOrUpdate(commitSha,
                                  ImmutableList <CommitStatus> .Empty, // We already checked the key; should not hit this "add".
                                  (_, oldValue) => oldValue.Where(s => s.Key != status.Key).Append(status).ToImmutableList());
     }
 }
        public async Task Validate_GetRevisionCommitSignatureStatusAsync(CommitStatus expected, string gitCmdReturn)
        {
            var guid = Guid.NewGuid().ToString("N");

            GitRevision revision = new GitRevision(guid);

            _module().RunGitCmd($"log --pretty=\"format:%G?\" -1 {revision.Guid}").Returns(gitCmdReturn);

            var actual = await _gpgController.GetRevisionCommitSignatureStatusAsync(revision);

            Assert.AreEqual(expected, actual);
        }
예제 #7
0
        public async Task Validate_GetRevisionCommitSignatureStatusAsync(CommitStatus expected, string gitCmdReturn)
        {
            var objectId = ObjectId.Random();

            var revision = new GitRevision(objectId);

            _module().RunGitCmd($"log --pretty=\"format:%G?\" -1 {revision.Guid}").Returns(gitCmdReturn);

            var actual = await _gpgController.GetRevisionCommitSignatureStatusAsync(revision);

            Assert.AreEqual(expected, actual);
        }
예제 #8
0
 public virtual async Task SetCommitStatus(int projectId, CommitStatus status)
 {
     await new RestRequest($"/projects/{projectId}/statuses/{status.Commit}", Method.POST)
     .AddJsonBody(new
     {
         state       = status.State.ToString().ToLower(),
         name        = status.Name,
         target_url  = status.TargetUrl,
         description = status.Description
     })
     .Execute(_client);
 }
예제 #9
0
        private async Task NotifyGithubStarted(ProjectGithubSource githubSource)
        {
            if (SourceCommit == null)
            {
                Log.Error("Unable to send GitHub notification! Commit is undefined!");
                return;
            }

            var status = new CommitStatus {
                State       = CommitStates.Pending,
                Context     = "Photon",
                Description = "Build in progress..."
            };

            await GetStatusUpdater(githubSource).Post(status);
        }
예제 #10
0
        public async Task Validate_GetRevisionCommitSignatureStatusAsync(CommitStatus expected, string gitCmdReturn)
        {
            var objectId = ObjectId.Random();

            var revision = new GitRevision(objectId);
            var args     = new GitArgumentBuilder("log")
            {
                "--pretty=\"format:%G?\"",
                "-1",
                revision.Guid
            };

            using var _ = _executable.StageOutput(args.ToString(), gitCmdReturn);

            var actual = await _gpgController.GetRevisionCommitSignatureStatusAsync(revision);

            Assert.AreEqual(expected, actual);
        }
예제 #11
0
        internal override CommitStatus Commit()
        {
            EnsureLoaded();

            CommitStatus status = CommitStatus.Continue;

            if (m_removedElements != null)
            {
                // Iterate through all removed elements first.

                foreach (Element element in m_removedElements.Values)
                {
                    status = element.CommitImpl();
                    if (status == CommitStatus.Discontinue)
                    {
                        break;
                    }
                }
            }

            if (m_elements != null)
            {
                // Iterate through all real elements now.

                if (status != CommitStatus.Discontinue)
                {
                    foreach (Element element in m_elements)
                    {
                        status = element.CommitImpl();
                        if (status == CommitStatus.Discontinue)
                        {
                            break;
                        }
                    }
                }
            }

            // Clean out the removed elements now that everything is done.

            m_removedElements = null;

            return(status);
        }
예제 #12
0
        public async Task Validate_GetRevisionCommitSignatureStatusAsync(CommitStatus expected, string gitCmdReturn)
        {
            var objectId = ObjectId.Random();

            var revision = new GitRevision(objectId);
            var args     = new GitArgumentBuilder("log")
            {
                "--pretty=\"format:%G?\"",
                "-1",
                revision.Guid
            };

            _module().GitExecutable.GetOutput(Arg.Is <ArgumentString>(arg => arg.ToString().Equals(args.ToString())))
            .Returns(x => gitCmdReturn);

            var actual = await _gpgController.GetRevisionCommitSignatureStatusAsync(revision);

            Assert.AreEqual(expected, actual);
        }
예제 #13
0
        private void ApplyGithubNotification(ServerBuildSession session, ProjectGithubSource source, GithubCommit commit)
        {
            var su = new CommitStatusUpdater {
                Username  = source.Username,
                Password  = source.Password,
                StatusUrl = commit.StatusesUrl,
                Sha       = commit.Sha,
            };

            session.PreBuildEvent += (o, e) => {
                var status = new CommitStatus {
                    State       = CommitStates.Pending,
                    Context     = "Photon",
                    Description = "Build in progress..."
                };

                su.Post(status).GetAwaiter().GetResult();
            };

            session.PostBuildEvent += (o, e) => {
                var status = new CommitStatus {
                    Context = "Photon",
                };

                if (session.Result.Cancelled)
                {
                    status.State       = CommitStates.Error;
                    status.Description = "The build was cancelled.";
                }
                else if (session.Result.Successful)
                {
                    status.State       = CommitStates.Success;
                    status.Description = $"Build Successful. {session.Result.Message}";
                }
                else
                {
                    status.State       = CommitStates.Failure;
                    status.Description = $"Build Failed! {session.Result.Message}";
                }

                su.Post(status).GetAwaiter().GetResult();
            };
        }
예제 #14
0
파일: Source.cs 프로젝트: formist/LinkMe
        protected override CommitStatus Update()
        {
            ICatalogueConnection connection = Catalogue.CatalogueConnection;
            CommitStatus         status     = connection.Update(this);

            // Send a notification if any events have been enabled or disabled.

            if (_eventStatusChanged)
            {
                var catalogueUpdate = connection as ICatalogueUpdate;
                if (catalogueUpdate != null)
                {
                    catalogueUpdate.EventStatusChanged(CatalogueElements.Source, FullyQualifiedReference);
                }

                _eventStatusChanged = false;
            }

            return(status);
        }
예제 #15
0
        private static IDisposable StatusColor(CommitStatus commitStatus)
        {
            switch (commitStatus)
            {
            case CommitStatus.Default:
                return(new ColoredBlock(ConsoleColor.Green, _defaultBackgroundColor));

            case CommitStatus.Local:
                return(new ColoredBlock(ConsoleColor.Red, _defaultBackgroundColor));

            case CommitStatus.Behind:
                return(new ColoredBlock(ConsoleColor.Yellow, _defaultBackgroundColor));

            case CommitStatus.Ahead:
                return(new ColoredBlock(ConsoleColor.Green, _defaultBackgroundColor));

            default:
                throw new ArgumentOutOfRangeException(nameof(commitStatus), commitStatus, null);
            }
        }
예제 #16
0
        public async Task Status(DateTimeOffset eventDate, StatusPayload payload)
        {
            var updater = new DataUpdater(_contextFactory, _mapper);

            await updater.UpdateRepositories(eventDate, new[] { payload.Repository });

            // Since we only do this here there's no need to add a mapping
            var status = new CommitStatus()
            {
                Context     = payload.Context,
                CreatedAt   = payload.CreatedAt,
                Description = payload.Description,
                Id          = payload.Id,
                State       = payload.State,
                TargetUrl   = payload.TargetUrl,
                UpdatedAt   = payload.UpdatedAt,
            };
            await updater.UpdateCommitStatuses(payload.Repository.Id, payload.Sha, new[] { status });

            await updater.Changes.Submit(_queueClient);
        }
예제 #17
0
파일: Namespace.cs 프로젝트: formist/LinkMe
        protected override CommitStatus Update()
        {
            CheckEventOverlap();

            ICatalogueConnection connection = Catalogue.CatalogueConnection;
            CommitStatus         status     = connection.Update(this);

            // Send a notification if any events have been enabled or disabled.

            if (_eventStatusChanged)
            {
                var catalogueUpdate = connection as ICatalogueUpdate;
                if (catalogueUpdate != null)
                {
                    catalogueUpdate.EventStatusChanged(CatalogueElements.Namespace, FullName);
                }

                _eventStatusChanged = false;
            }

            return(status);
        }
예제 #18
0
파일: Element.cs 프로젝트: formist/LinkMe
        protected internal virtual CommitStatus CommitImpl()
        {
            CommitStatus status = CommitStatus.Continue;

            // Act based on the current state.

            switch (m_state)
            {
            case ElementState.Added:
                status = Create();
                break;

            case ElementState.Dirty:
                status = Update();
                break;

            case ElementState.Removed:
                DeleteChildren();
                status = Delete();
                break;

            case ElementState.Clean:
            case ElementState.Created:
                break;

            default:
                Debug.Fail("Unexpected value of m_state: " + m_state.ToString());
                break;
            }

            // If needed do the children.

            if (status == CommitStatus.Continue)
            {
                status = m_collections.Commit();
            }
            return(status);
        }
예제 #19
0
        public CommitStatus Commit()
        {
            CommitStatus status = CommitStatus.Continue;

            if (m_collections != null)
            {
                // Iterate through all collections.

                for (int index = 0; index < m_collections.Length; index++)
                {
                    Collection col = (Collection)m_collections[index];
                    if (col != null)
                    {
                        status = col.Commit();
                        if (status == CommitStatus.Discontinue)
                        {
                            return(status);
                        }
                    }
                }
            }

            return(status);
        }
        public async Task <bool> SetCommitStatus(string qualifiedRepoName, string sha, CommitStatus state,
                                                 string buildStatusUrl, string description, string contextSuffix)
        {
            if (!CheckIsConfigured() || client == null)
            {
                return(false);
            }

            string context = $"DevCenter:{contextSuffix}";

            var response = await client.PostAsJsonAsync(
                $"https://api.github.com/repos/{qualifiedRepoName}/statuses/{sha}",
                new CommitStatusSetRequest()
            {
                State       = state,
                TargetUrl   = buildStatusUrl,
                Description = description,
                Context     = context,
            });

            if (!response.IsSuccessStatusCode)
            {
                await ReportFailedRequest(response);

                return(false);
            }

            return(true);
        }
        private async Task <string> GetFailureResultsAsync(IMcrStatusClient statusClient, CommitStatus commitStatus)
        {
            CommitResultDetailed result = await statusClient.GetCommitResultDetailedAsync(Options.CommitDigest, commitStatus.OnboardingRequestId);

            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine($"Failure for commit digest '{Options.CommitDigest}':");
            stringBuilder.AppendLine($"\tID: {result.OnboardingRequestId}");
            stringBuilder.AppendLine($"\tBranch: {result.Branch}");
            result.ContentFiles.ForEach(file => stringBuilder.AppendLine($"\t\t{file}"));
            stringBuilder.Append(result.Substatus.ToString("\t"));
            return(stringBuilder.ToString());
        }
예제 #22
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;
                }
            }
        }
예제 #23
0
 /// <summary>
 /// Checks if a given <paramref name="commitStatus"/> is for Travis-CI
 /// </summary>
 /// <param name="commitStatus">The <see cref="CommitStatus"/> to check</param>
 /// <returns><see langword="true"/> if the <paramref name="commitStatus"/> is for Travis-CI, <see langword="false"/> otherwise</returns>
 static bool IsTravisStatus(CommitStatus commitStatus)
 {
     return(commitStatus.TargetUrl.StartsWith("https://travis-ci.org/", StringComparison.InvariantCultureIgnoreCase));
 }
예제 #24
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);
                }
            }
        }
예제 #25
0
 public override async Task SetCommitStatus(int projectId, CommitStatus status)
 {
     await NotAllowed();
 }