mirror of
https://github.com/PowerShell/PowerShell.git
synced 2024-11-24 02:04:07 +08:00
Update rest demo (#1854)
This commit is contained in:
parent
1509c1f311
commit
338035be93
@ -1,20 +0,0 @@
|
||||
# EQ Linux
|
||||
|
||||
# get the json from the repo api and assign it to the txt file
|
||||
|
||||
# This grads the json file from the API
|
||||
curl -u <insert GitHub PAT token> <insert GitHub repo URL> > outputtest.txt
|
||||
|
||||
# Reformats the json block to proper json (removes the newlines)
|
||||
string=$(cat temp.txt)
|
||||
|
||||
# Replace the "private" value to false
|
||||
find='"private": true'
|
||||
replace='"private": false'
|
||||
string2=${string/$find/$replace}
|
||||
|
||||
# push the json block into a txt file
|
||||
echo $string2 > output.txt
|
||||
|
||||
# Post the updated JSON data to the repo
|
||||
curl -u <insert GitHub PAT token> <insert GitHub repo URL> --data @output.txt
|
@ -1,13 +1,7 @@
|
||||
This demo shows interacting with the Github API via Invoke-RestMethod.
|
||||
NOTE: A repo URL must be specified in these scripts and a Github PAT token with access to the repo must be generated and specified
|
||||
## Rest demo
|
||||
|
||||
This demo shows interacting with the Github API via Invoke-WebRequest.
|
||||
|
||||
rest.ps1:
|
||||
Invoke-RestMethod is used to get the json of a repo as a PowerShell object,
|
||||
the object is then manipulated and the "private" parameter is changed to 'false'.
|
||||
The object is converted back to json formating and Posted back to the repo API
|
||||
|
||||
The benefit of PowerShell is shown at the end of the script with PS objects.
|
||||
Enabling users to get info on multiple repos and then sort that data as objects.
|
||||
|
||||
curlDemo.txt:
|
||||
This shows the equavilent bash commmands to change the private status of a Github repo
|
||||
Invoke-WebRequest and ConvertFrom-Json are used to get the issues of a repo.
|
||||
The issues are processed as objects to find the most commented on issues.
|
||||
|
@ -1,46 +1,43 @@
|
||||
# NOTE: This demo is still in progress and needs validation in Linux
|
||||
# ------------------------------------
|
||||
|
||||
#region Setup the credentials for use in HTTP header
|
||||
$user = '<insert GitHub PAT token>'
|
||||
$pass= ""
|
||||
$pair = "${user}:${pass}"
|
||||
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
|
||||
$base64 = [System.Convert]::ToBase64String($bytes)
|
||||
$basicAuthValue = "Basic $base64"
|
||||
$headers = @{ Authorization = $basicAuthValue }
|
||||
#endregion
|
||||
|
||||
# Changing the status of a Private GitHub repository to Public
|
||||
|
||||
# URL to PowerShell Github Repo
|
||||
$PowerShellGithubUri = '<insert GitHub repo URL>'
|
||||
|
||||
# Get the blob from the Github API as a PS object
|
||||
$JsonBlock = Invoke-RestMethod -Uri $PowerShellGithubUri -Headers $headers
|
||||
|
||||
# Explore the object (Notice that it is a private repo)
|
||||
$JsonBlock
|
||||
|
||||
# Given it is an object, you can explore and interact with it
|
||||
# Change the private value to false
|
||||
$JsonBlock.private = 'false'
|
||||
|
||||
# Convert the object back to a json
|
||||
$Json = ConvertTo-Json $JsonBlock
|
||||
|
||||
# Post the updated json block back to the GitHub
|
||||
Invoke-RestMethod -Uri $PowerShellGithubUri -Headers $headers -Method Post -Body $Json
|
||||
|
||||
|
||||
# --------------
|
||||
|
||||
# We can also use the PS objects to sort the different repos on github
|
||||
|
||||
# If we grab the json from the PowerShell github
|
||||
Invoke-RestMethod https://api.github.com/users/powershell/repos | sv repoData
|
||||
|
||||
# We can sort it based on the number of forks each repo has
|
||||
$repoData | Sort-Object -Property forks_count -Descending | ft -f id,name,stargazers_count,forks_count
|
||||
|
||||
$repoData | Sort-Object -Property stargazers_count -Descending | ft -f id,name,stargazers_count,forks_count
|
||||
|
||||
#-----------------
|
||||
|
||||
function Get-Issues
|
||||
{
|
||||
param([string]$UserName,
|
||||
[string]$Repo,
|
||||
[ValidateRange(1,100)][int]$PerPage = 100)
|
||||
|
||||
$body = @{
|
||||
per_page = $PerPage
|
||||
}
|
||||
|
||||
$uri = "https://api.github.com/repos/$UserName/$Repo/issues"
|
||||
while ($uri)
|
||||
{
|
||||
$response = Invoke-WebRequest -Uri $uri -Body $body
|
||||
$response.Content | ConvertFrom-Json | Write-Output
|
||||
|
||||
$uri = $null
|
||||
foreach ($link in $response.Headers.Link -split ',')
|
||||
{
|
||||
if ($link -match '\s*<(.*)>;\s+rel="next"')
|
||||
{
|
||||
$uri = $matches[1]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$issues = Get-Issues -UserName lzybkr -Repo PSReadline
|
||||
|
||||
$issues.Count
|
||||
|
||||
$issues | Sort-Object -Descending comments | Select-Object -First 15 | ft number,comments,title
|
||||
|
||||
foreach ($issue in $issues)
|
||||
{
|
||||
if ($issue.labels.name -contains 'bug' -and $issue.labels.name -contains 'vi mode')
|
||||
{
|
||||
"{0} is a vi mode bug" -f $issue.url
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user