Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Secret Scanning Alerts migration - update to new location types #1306

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

theztefan
Copy link

@theztefan theztefan commented Nov 26, 2024

PR implements #1305

  • Did you write/update appropriate tests
  • Release notes updated (if appropriate)
  • Appropriate logging output
  • Issue linked
  • Docs updated (or issue created)
  • New package licenses are added to ThirdPartyNotices.txt (if applicable)

Summary of code changes

  • Updated related models src/Octoshift/Models/GithubSecretScanningAlert.cs
    • GithubSecretScanningAlert to include resolution comment
    • GithubSecretScanningAlertLocation to include types of location and related info
  • Updated src/Octoshift/Services/GithubApi.cs to work with new model definition
    • to populate new fields objects when fetching alerts
    • to include resolution_comment when updating alert
  • Refactored src/Octoshift/Services/SecretScanningAlertService.cs in regards to matching the locations of alerts criteria to include the new location types; and the algorithm for matching alerts between source and target repositories.
    Instead of iterating thru all alerts in a list to match an alert from source and target we now use dictionary for the lookup. We use this lookup to match all locations on all alerts; The criteria for matching alerts follows the similar structure as before but included couple of guards/pre-flight checks to further speed up the matching process. Performance optimization has benefits when migrating repositories with big number of alerts.

Copy link

github-actions bot commented Nov 26, 2024

Unit Test Results

856 tests   856 ✅  20s ⏱️
  1 suites    0 💤
  1 files      0 ❌

Results for commit 5b07255.

♻️ This comment has been updated with latest results.

@theztefan theztefan marked this pull request as ready for review November 27, 2024 14:06
Copy link
Collaborator

@ArinGhazarian ArinGhazarian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I am not super familiar with secret scanning, the code changes looks good my main concern is there is a bit of a logic changes do we have enough unit test coverage?

@@ -1 +1 @@

- Updated Secret Scanning Alerts migration command to match on all location types. Now includes: issues, pull requests, issues.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Updated Secret Scanning Alerts migration command to match on all location types. Now includes: issues, pull requests, issues.
- Updated Secret Scanning Alerts migration (`gh gei migrate-secret-alerts`) command to match on all location types. Now includes: issues, pull requests, issues.

Comment on lines +124 to +126
//"discussion_title" => sourceLocation.DiscussionTitleUrl == targetLocation.DiscussionTitleUrl,
//"discussion_body" => sourceLocation.DiscussionBodyUrl == targetLocation.DiscussionBodyUrl,
//"discussion_comment" => sourceLocation.DiscussionCommentUrl == targetLocation.DiscussionCommentUrl,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove the commented code

Suggested change
//"discussion_title" => sourceLocation.DiscussionTitleUrl == targetLocation.DiscussionTitleUrl,
//"discussion_body" => sourceLocation.DiscussionBodyUrl == targetLocation.DiscussionBodyUrl,
//"discussion_comment" => sourceLocation.DiscussionCommentUrl == targetLocation.DiscussionCommentUrl,

// and value List of AlertWithLocations
// This method is used to get alerts from both source and target repositories
private async Task<Dictionary<(string SecretType, string Secret), List<AlertWithLocations>>>
GetAlertsWithLocationsDict(GithubApi api, string org, string repo)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: not a biggie but generally speaking adding a returned type suffix is discouraged in method and variable names so I would still use the previous name.

Comment on lines +36 to +38
foreach (var sourceKey in sourceAlertsDict.Keys)
{
_log.LogInformation($"Processing source secret {alert.Alert.Number}");

if (SecretScanningAlert.IsOpen(alert.Alert.State))
foreach (var sourceAlert in sourceAlertsDict[sourceKey])
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These two foreach statements can be combined into one:

foreach (var kvp in sourceAlertsDict)
{
    // if you wish to use the variable names, I wish C# supported deconstruction syntax in foreach loops!
    var sourceKey = kvp.Key;
    var sourceAlert = kvp.Value;
}

Copy link

Code Coverage

Package Line Rate Branch Rate Complexity Health
gei 81% 72% 592
ado2gh 84% 78% 631
Octoshift 87% 74% 1401
bbs2gh 79% 74% 692
Summary 84% (7189 / 8587) 74% (1671 / 2246) 3316

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants