public async Task CreatesCheckSuiteWithRepositoryId() { using (var repoContext = await _github.CreateRepositoryContext(new NewRepository(Helper.MakeNameWithTimestamp("public-repo")) { AutoInit = true })) { // Turn off auto creation of check suite for this repo var preference = new CheckSuitePreferences(new[] { new CheckSuitePreferenceAutoTrigger(Helper.GitHubAppId, false) }); await _githubAppInstallation.Check.Suite.UpdatePreferences(repoContext.RepositoryId, preference); // Create a new feature branch var headCommit = await _github.Repository.Commit.Get(repoContext.RepositoryId, "master"); var featureBranch = await Helper.CreateFeatureBranch(repoContext.RepositoryOwner, repoContext.RepositoryName, headCommit.Sha, "my-feature"); // Create a check suite for the feature branch var newCheckSuite = new NewCheckSuite(featureBranch.Object.Sha); var result = await _githubAppInstallation.Check.Suite.Create(repoContext.RepositoryId, newCheckSuite); // Check result Assert.NotNull(result); Assert.Equal(featureBranch.Object.Sha, result.HeadSha); } }
/// <summary> /// Creates a new Check Suite /// </summary> /// <remarks> /// See the <a href="https://developer.github.com/v3/checks/suites/#create-a-check-suite">Check Suites API documentation</a> for more information. /// </remarks> /// <param name="owner">The owner of the repository</param> /// <param name="name">The name of the repository</param> /// <param name="newCheckSuite">Details of the Check Suite to create</param> public IObservable <CheckSuite> Create(string owner, string name, NewCheckSuite newCheckSuite) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(newCheckSuite, nameof(newCheckSuite)); return(_client.Create(owner, name, newCheckSuite).ToObservable()); }
public async Task EnsuresNonEmptyArguments() { var gitHubClient = Substitute.For <IGitHubClient>(); var client = new ObservableCheckSuitesClient(gitHubClient); var newCheckSuite = new NewCheckSuite("123abc"); Assert.Throws <ArgumentException>(() => client.Create("", "repo", newCheckSuite)); Assert.Throws <ArgumentException>(() => client.Create("fake", "", newCheckSuite)); }
public async Task RequestsCorrectUrlWithRepositoryId() { var gitHubClient = Substitute.For <IGitHubClient>(); var client = new ObservableCheckSuitesClient(gitHubClient); var newCheckSuite = new NewCheckSuite("123abc"); client.Create(1, newCheckSuite); gitHubClient.Check.Suite.Received().Create(1, newCheckSuite); }
public async Task EnsuresNonEmptyArguments() { var connection = Substitute.For <IApiConnection>(); var client = new CheckSuitesClient(connection); var newCheckSuite = new NewCheckSuite("123abc"); await Assert.ThrowsAsync <ArgumentException>(() => client.Create("", "repo", newCheckSuite)); await Assert.ThrowsAsync <ArgumentException>(() => client.Create("fake", "", newCheckSuite)); }
public async Task RequestsCorrectUrlWithRepositoryId() { var connection = Substitute.For <IApiConnection>(); var client = new CheckSuitesClient(connection); var newCheckSuite = new NewCheckSuite("123abc"); await client.Create(1, newCheckSuite); connection.Received().Post <CheckSuite>( Arg.Is <Uri>(u => u.ToString() == "repositories/1/check-suites"), newCheckSuite, "application/vnd.github.antiope-preview+json"); }
/// <inheritdoc/> protected override async Task <object> CallGitHubApi(DialogContext dc, Octokit.GitHubClient gitHubClient, CancellationToken cancellationToken = default(CancellationToken)) { if (Owner != null && Name != null && NewCheckSuite != null) { var ownerValue = Owner.GetValue(dc.State); var nameValue = Name.GetValue(dc.State); var newCheckSuiteValue = NewCheckSuite.GetValue(dc.State); return(await gitHubClient.Check.Suite.Create(ownerValue, nameValue, newCheckSuiteValue).ConfigureAwait(false)); } if (RepositoryId != null && NewCheckSuite != null) { var repositoryIdValue = RepositoryId.GetValue(dc.State); var newCheckSuiteValue = NewCheckSuite.GetValue(dc.State); return(await gitHubClient.Check.Suite.Create((Int64)repositoryIdValue, newCheckSuiteValue).ConfigureAwait(false)); } throw new ArgumentNullException("Required [newCheckSuite] arguments missing for GitHubClient.Check.Suite.Create"); }
/// <summary> /// Creates a new Check Suite /// </summary> /// <remarks> /// See the <a href="https://developer.github.com/v3/checks/suites/#create-a-check-suite">Check Suites API documentation</a> for more information. /// </remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="newCheckSuite">Details of the Check Suite to create</param> public IObservable <CheckSuite> Create(long repositoryId, NewCheckSuite newCheckSuite) { Ensure.ArgumentNotNull(newCheckSuite, nameof(newCheckSuite)); return(_client.Create(repositoryId, newCheckSuite).ToObservable()); }
private async Task StartExecution() { IReadOnlyList <Installation> installations = await this.gitHubAppClient.GitHubApps.GetAllInstallationsForCurrent().ConfigureAwait(false); try { if (!this.IsGitHubInstallationClientValid()) { throw new InvalidOperationException("Error: gitHubInstallationClient is invalid."); } if (IsPullRequest) { ICheckSuitesClient checkSuiteClient = gitHubInstallationClient.Check.Suite; CheckSuitesResponse x = await checkSuiteClient.GetAllForReference(CurrentRepository.Id, CommitSha).ConfigureAwait(false); if (x.TotalCount > 0) { long checkSuiteId = x.CheckSuites.FirstOrDefault().Id; bool res = await checkSuiteClient.Rerequest(CurrentRepository.Id, checkSuiteId); } else { var newCheckSuite = new NewCheckSuite(CommitSha); try { CheckSuite suite = await checkSuiteClient.Create( CurrentRepository.Owner.Login, CurrentRepository.Name, newCheckSuite) .ConfigureAwait(false); } catch (Exception ex) { } } return; } ICheckRunsClient checkRunClient = gitHubInstallationClient.Check.Run; // Create a new heckRun in GitHub var newCheckRun = new NewCheckRun("ScanX", CommitSha) { Status = CheckStatus.Queued, }; CheckRun checkRun = await checkRunClient.Create( CurrentRepository.Owner.Login, CurrentRepository.Name, newCheckRun) .ConfigureAwait(false); // --- Downoad a ZIP --- byte[] buffer = await ScanHelper.DownloadRepoZip(gitHubInstallationClient, CurrentRepository.Id, CommitSha).ConfigureAwait(false); int size = buffer.Length; // Upload ZIP to a storage blob string blobName = $"{RequestId.ToString()}"; string blobUri = await ScanHelper.UploadBufferToStorage(buffer, blobName); // Update check's status to "in progress" CheckRunUpdate checkRunUpdate = new CheckRunUpdate { Status = CheckStatus.InProgress, Name = checkRun.Name }; checkRun = await checkRunClient.Update(CurrentRepository.Id, checkRun.Id, checkRunUpdate).ConfigureAwait(false); // --- Start a scan --- // Simulate sending of a message to a SB queue // Create worker notification message MalwareDeterminationRequest scanRequest = new MalwareDeterminationRequest(); scanRequest.ClientId = "GitHubScanX"; scanRequest.FileName = $"{RequestId.ToString()}.zip"; scanRequest.FileSizeInBytes = 1000; //dummy scanRequest.RequestId = RequestId; scanRequest.Uri = new Uri(blobUri); // Notify worker (aka put the notification message to a queue) ScanXMock mock = new ScanXMock(); await mock.SendScanRequest(scanRequest).ConfigureAwait(false); // --- Poll for a scan completion --- MalwareDeterminationResult scanResult; do { await Task.Delay(500).ConfigureAwait(false); if (await mock.TryGetResult(RequestId)) { scanResult = await mock.GetResult(RequestId).ConfigureAwait(false); break; } }while (true); //!!!! for POC only checkRunUpdate.Status = CheckStatus.Completed; checkRunUpdate.CompletedAt = DateTime.UtcNow; checkRunUpdate.Conclusion = scanResult.WorkStatus == WorkStatus.Clean ? CheckConclusion.Success : CheckConclusion.Failure; if (checkRunUpdate.Conclusion == CheckConclusion.Failure) { checkRunUpdate.Output = new NewCheckRunOutput( "Scan Report", $"GitScan detected {scanResult.ConfirmedMalwares.Count()} infected files. See details below."); checkRunUpdate.Output.Text = "| File Path| Malware Type| AV Engines|\n"; checkRunUpdate.Output.Text += "|:---|:---|:---|\n"; foreach (var entry in scanResult.ConfirmedMalwares) { checkRunUpdate.Output.Text += $"|{entry.FileName}|{entry.MalwareInfo}|{string.Join(",", entry.AvEngines.ToArray())}"; } } checkRun = await checkRunClient.Update(CurrentRepository.Id, checkRun.Id, checkRunUpdate).ConfigureAwait(false); } catch (Exception ex) { Console.WriteLine($"Exception: {ex.Message}"); } }