Skip to content

Commit

Permalink
Playing around with parallelism -> sequentialism :)
Browse files Browse the repository at this point in the history
  • Loading branch information
MariusStorhaug committed Jan 29, 2025
1 parent 73cc337 commit 581ec05
Showing 1 changed file with 36 additions and 41 deletions.
77 changes: 36 additions & 41 deletions src/functions/public/Auth/Connect-GitHubApp.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -41,25 +41,19 @@
[CmdletBinding(DefaultParameterSetName = '__AllParameterSets')]
param(
# The user account to connect to.
[Parameter(
Mandatory,
ParameterSetName = 'User'
)]
[string] $User,
[Parameter()]
[SupportsWildcards()]
[string[]] $User = '*',

# The organization to connect to.
[Parameter(
Mandatory,
ParameterSetName = 'Organization'
)]
[string] $Organization,
[Parameter()]
[SupportsWildcards()]
[string[]] $Organization = '*',

# The enterprise to connect to.
[Parameter(
Mandatory,
ParameterSetName = 'Enterprise'
)]
[string] $Enterprise,
[Parameter()]
[SupportsWildcards()]
[string[]] $Enterprise = '*',

# Passes the context object to the pipeline.
[Parameter()]
Expand All @@ -86,38 +80,40 @@
$Context | Assert-GitHubContext -AuthType 'App'

$installations = Get-GitHubAppInstallation -Context $Context
$selectedInstallations = @()
Write-Verbose "Found [$($installations.Count)] installations."
switch ($PSCmdlet.ParameterSetName) {
'User' {
Write-Verbose "Filtering installations for user [$User]."
$installations = $installations | Where-Object { $_.target_type -eq 'User' -and $_.account.login -in $User }
}
'Organization' {
Write-Verbose "Filtering installations for organization [$Organization]."
$installations = $installations | Where-Object { $_.target_type -eq 'Organization' -and $_.account.login -in $Organization }
}
'Enterprise' {
Write-Verbose "Filtering installations for enterprise [$Enterprise]."
$installations = $installations | Where-Object { $_.target_type -eq 'Enterprise' -and $_.account.slug -in $Enterprise }
}
$User | ForEach-Object {
$userItem = $_
Write-Verbose "Adding installation based on user [$userItem]."
$selectedInstallations += $installations | Where-Object { $_.target_type -eq 'User' -and $_.account.login -like $userItem }
}
$Organization | ForEach-Object {
$organizationItem = $_
Write-Verbose "Filtering installations for organization [$organizationItem]."
$installations = $installations | Where-Object { $_.target_type -eq 'Organization' -and $_.account.login -in $organizationItem }
}
$Enterprise | ForEach-Object {
$enterpriseItem = $_
Write-Verbose "Filtering installations for enterprise [$enterpriseItem]."
$installations = $installations | Where-Object { $_.target_type -eq 'Enterprise' -and $_.account.slug -in $enterpriseItem }
}

Write-Verbose "Found [$($installations.Count)] installations for the target."
$installations | ForEach-Object {
$installations | ForEach-Object -ThrottleLimit ([Environment]::ProcessorCount * 2) -Parallel {
$installation = $_
Write-Verbose "Processing installation [$($installation.account.login)] [$($installation.id)]"
$token = New-GitHubAppInstallationAccessToken -Context $Context -InstallationID $installation.id
$token = New-GitHubAppInstallationAccessToken -Context $using:Context -InstallationID $installation.id

$contextParams = @{
AuthType = [string]'IAT'
TokenType = [string]'ghs'
DisplayName = [string]$Context.DisplayName
ApiBaseUri = [string]$Context.ApiBaseUri
ApiVersion = [string]$Context.ApiVersion
HostName = [string]$Context.HostName
HttpVersion = [string]$Context.HttpVersion
PerPage = [int]$Context.PerPage
ClientID = [string]$Context.ClientID
DisplayName = [string]$using:Context.DisplayName
ApiBaseUri = [string]$using:Context.ApiBaseUri
ApiVersion = [string]$using:Context.ApiVersion
HostName = [string]$using:Context.HostName
HttpVersion = [string]$using:Context.HttpVersion
PerPage = [int]$using:Context.PerPage
ClientID = [string]$using:Context.ClientID
InstallationID = [string]$installation.id
Permissions = [pscustomobject]$installation.permissions
Events = [string[]]$installation.events
Expand All @@ -140,9 +136,9 @@
$contextParams['Enterprise'] = [string]$installation.account.slug
}
}
Write-Verbose 'Logging in using a managed installation access token...'
Write-Verbose ($contextParams | Format-Table | Out-String)
$contextObj = [InstallationGitHubContext]::new((Set-GitHubContext -Context $contextParams.Clone() -PassThru -Default:$Default))
$contextParams
} | ForEach-Object {
$contextObj = [InstallationGitHubContext]::new((Set-GitHubContext -Context $_ -PassThru -Default:$Default))
Write-Verbose ($contextObj | Format-List | Out-String)
if (-not $Silent) {
$name = $contextObj.name
Expand All @@ -153,7 +149,6 @@
Write-Debug "Passing context [$contextObj] to the pipeline."
Write-Output $contextObj
}
$contextParams.Clear()
}
} catch {
Write-Error $_
Expand Down

0 comments on commit 581ec05

Please sign in to comment.