0

I am trying to get names of PS scripts in ci folder on GitHub, pass it out as strings and then check if that script name exists in a list of workflow yaml files.

# Get contents of ci folder [Done]
# pass names of ps1 files to a single array [Done]
# get contents of .gtihub/workflow and .github/actions folders 
# Pass File contents to an object/variable 
# Check if array items are contained in each workflow files and then action files. 
# if file is found in workflow/action file, output true else output false. 

param (
    [string]$PAT = '[securestring]', # This token MUST have admin rights
    [string]$OrgName = '[string}'
)

$headers = @{ Accept = "application/vnd.github.v3+json"; Authorization = "token $PAT"; sha = "" } 

$Yamls = @()
$Cis = @()

#Get contents of workflows files in .github/workflows folder
$WorkflowFiles = Invoke-RestMethod "https://api.github.com/repos/$($OrgName)/bct-bbti-kpi/contents/.github/workflows" -Method Get -Headers $headers -ErrorAction SilentlyContinue

foreach ($WorkflowFile in $WorkflowFiles) {
    
    $Yamlfile = Invoke-RestMethod $WorkflowFile.url -Method Get -Headers $headers

    $Yamlfilecontents = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($Yamlfile.content))

    $Yamls += $Yamlfilecontents
}

#Get names of PowerShell Scripts in CI folder 
$Cicontents = Invoke-RestMethod "https://api.github.com/repos/$($OrgName)/bct-bbti-kpi/contents/ci" -Method Get -Headers $headers -ErrorAction SilentlyContinue

$cis += $Cicontents
Write-Host CI folder contents
Write-Host ""
#$ci.name

foreach ($item in $cis.name) {

    foreach ($WorkflowFile in $WorkflowFiles.name) {

        if ($Yaml.ToString() -contains $item1.ToString()) {
            Write-Host 'True'
        }
        else {
            Write-Host 'False'
        }
    }
}

Please I need help on how to successfully check if each item in $cis.name(as a string) exists in the workflows files inside .github/workflows folder.

Mathias R. Jessen
  • 157,619
  • 12
  • 148
  • 206

0 Answers0