mirror of
				https://github.com/actions/node-versions.git
				synced 2025-10-26 07:16:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
| <#
 | |
| .SYNOPSIS
 | |
| The module that contains a bunch of methods to interact with GitHub API V3
 | |
| #>
 | |
| class GitHubApi
 | |
| {
 | |
|     [string] $BaseUrl
 | |
|     [string] $RepoOwner
 | |
|     [object] $AuthHeader
 | |
| 
 | |
|     GitHubApi(
 | |
|         [string] $AccountName,
 | |
|         [string] $ProjectName,
 | |
|         [string] $AccessToken
 | |
|     ) {
 | |
|         $this.BaseUrl = $this.BuildBaseUrl($AccountName, $ProjectName)
 | |
|         $this.AuthHeader = $this.BuildAuth($AccessToken)
 | |
|     }
 | |
| 
 | |
|     [object] hidden BuildAuth([string]$AccessToken) {
 | |
|         if ([string]::IsNullOrEmpty($AccessToken)) {
 | |
|             return $null
 | |
|         }
 | |
|         $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("'':${AccessToken}"))
 | |
|         return @{
 | |
|             Authorization = "Basic ${base64AuthInfo}"
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [string] hidden BuildBaseUrl([string]$RepositoryOwner, [string]$RepositoryName) {
 | |
|         return "https://api.github.com/repos/$RepositoryOwner/$RepositoryName"
 | |
|     }
 | |
| 
 | |
|     [object] CreateNewPullRequest([string]$Title, [string]$Body, [string]$BranchName){
 | |
|         $requestBody = @{
 | |
|             title = $Title
 | |
|             body = $Body
 | |
|             head = $BranchName
 | |
|             base = "master"
 | |
|         } | ConvertTo-Json
 | |
| 
 | |
|         $url = "pulls"
 | |
|         return $this.InvokeRestMethod($url, 'Post', $null, $requestBody)
 | |
|     }
 | |
| 
 | |
|     [object] GetPullRequest([string]$BranchName, [string]$RepositoryOwner){
 | |
|         $url = "pulls"
 | |
|         return $this.InvokeRestMethod($url, 'GET', "head=${RepositoryOwner}:$BranchName&base=master", $null)
 | |
|     }
 | |
| 
 | |
|     [object] UpdatePullRequest([string]$Title, [string]$Body, [string]$BranchName, [string]$PullRequestNumber){
 | |
|         $requestBody = @{
 | |
|             title = $Title
 | |
|             body = $Body
 | |
|             head = $BranchName
 | |
|             base = "master"
 | |
|         } | ConvertTo-Json
 | |
| 
 | |
|         $url = "pulls/$PullRequestNumber"
 | |
|         return $this.InvokeRestMethod($url, 'Post', $null, $requestBody)
 | |
|     }
 | |
| 
 | |
|     [array] GetReleases(){
 | |
|         $url = "releases"
 | |
|         $releases = @()
 | |
|         $pageNumber = 1
 | |
|         $releaseNumberLimit = 10000
 | |
| 
 | |
|         while ($releases.Count -le $releaseNumberLimit)
 | |
|         {
 | |
|             $requestParams = "page=${pageNumber}&per_page=100"
 | |
|             [array] $response = $this.InvokeRestMethod($url, 'GET', $requestParams, $null)
 | |
|             
 | |
|             if ($response.Count -eq 0) {
 | |
|                 break
 | |
|             } else {
 | |
|                 $releases += $response
 | |
|                 $pageNumber++
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $releases
 | |
|     }
 | |
| 
 | |
|     [string] hidden BuildUrl([string]$Url, [string]$RequestParams) {
 | |
|         if ([string]::IsNullOrEmpty($RequestParams)) {
 | |
|             return "$($this.BaseUrl)/$($Url)"
 | |
|         } else {
 | |
|             return "$($this.BaseUrl)/$($Url)?$($RequestParams)"
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     [object] hidden InvokeRestMethod(
 | |
|         [string] $Url,
 | |
|         [string] $Method,
 | |
|         [string] $RequestParams,
 | |
|         [string] $Body
 | |
|     ) {
 | |
|         $requestUrl = $this.BuildUrl($Url, $RequestParams)
 | |
|         $params = @{
 | |
|             Method = $Method
 | |
|             ContentType = "application/json"
 | |
|             Uri = $requestUrl
 | |
|             Headers = @{}
 | |
|         }
 | |
|         if ($this.AuthHeader) {
 | |
|             $params.Headers += $this.AuthHeader
 | |
|         }
 | |
|         if (![string]::IsNullOrEmpty($Body)) {
 | |
|             $params.Body = $Body
 | |
|         }
 | |
| 
 | |
|         return Invoke-RestMethod @params
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| function Get-GitHubApi {
 | |
|     param (
 | |
|         [string] $AccountName,
 | |
|         [string] $ProjectName,
 | |
|         [string] $AccessToken
 | |
|     )
 | |
| 
 | |
|     return [GitHubApi]::New($AccountName, $ProjectName, $AccessToken)
 | |
| } |