-
Notifications
You must be signed in to change notification settings - Fork 0
/
GithubAPI.psm1
111 lines (92 loc) · 4.53 KB
/
GithubAPI.psm1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<#
.SYNOPSIS
A Powershell module for interacting with the GithubAPI. All 800 functions have been generated dynamically by scraping
the documentation webpage at https://docs.github.com/en/rest/reference. Most of these functions are untested. Believe it or not,
I haven't tested all 800. Please report any bugs and broken functions that you find so that I can fix the scraper.
.DESCRIPTION
Before importing this module, you need to either put your Github token in $ENV:AppData\github.token or you need to pass it into
the module as an argument.
.PARAMETER UseSections
Specify an array of sections that you want to import. Sections are taken from https://docs.github.com/en/rest/reference
Use ALL if you want to import all the functions.
.PARAMETER Regenerate
Set to true if you want to rescrape the function definitions before importing the code.
If UseSections are specified, it will only scrape the sections specified.
If set to FALSE, it imports whatever sections you've specified (assuming the sections have been scraped.)
.PARAMETER Token
Pass your github oauth token here.
By default, it'll try to read it from $ENV:APPDATA\github.token
#>
Param(
[Parameter(Mandatory=$FALSE)]
[ValidateSet(
"Actions", "Activity", "Apps",
"Billing", "Branches", "Checks",
"Codes of conduct", "Code scanning", "Codespaces",
"Collaborators", "Commits", "Dependabot",
"Dependency graph", "Deploy Keys", "Deployments",
"Emojis", "GitHub Enterprise administration", "Gists",
"Git database", "Gitignore", "Interactions",
"Issues", "Licenses", "Markdown",
"Meta", "Metrics", "Migrations",
"Organizations", "Packages", "Pages",
"Projects", "Pulls", "Rate limit",
"Reactions", "Releases", "Repositories",
"SCIM", "Search", "Secret scanning",
"Teams", "Users", "Webhooks",
"ALL"
)]
[String[]]$UseSections = @("ALL"),
[Parameter(Mandatory=$FALSE)][Bool]$Regenerate = $FALSE,
[Parameter(Mandatory=$FALSE)][String]$Token = (Get-Content $env:APPDATA\github.token)
)
$Global:GithubToken = $Token
# Alright, now go to lunch!
if ($Regenerate) {
. "$PSScriptRoot\Private\Start-Chrome.ps1"
. "$PSScriptRoot\Private\Get-Sections.ps1"
. "$PSScriptRoot\Private\Get-Endpoints.ps1"
# Create a new functions folder
New-Item -Path "$PSScriptRoot\Functions" -ItemType Directory -ErrorAction SilentlyContinue
# Create the driver if we don't have one already.
if ($NULL -eq $Driver) {
$Driver = Start-Chrome -StartUrl "https://docs.github.com/en/rest/reference" -Visible $FALSE -ErrorAction SilentlyContinue
if ($NULL -eq $Driver) {
throw "Failed to create web driver!"
}
}
try {
# Get a list of all the sections (Actions, Activity, Branches, Commits, etc)
$Sections = $Driver | Get-Sections
Foreach ($Section in $Sections) {
if ($UseSections -contains $Section.Name -or $UseSections -like "ALL") {
Write-Verbose "$($Section.Name)"
# Create a folder for this section if there isn't one already
New-Item -Path "$PSScriptRoot\Functions\$($Section.Name)" -ItemType Directory -ErrorAction SilentlyContinue
# Parse all functions from the section and save them to file.
Get-Endpoints -SectionURL $Section.Href -Verbose | Foreach-Object {
Set-Content -Path "$PSScriptRoot\Functions\$($Section.Name)\$($_.FunctionName).ps1" -Value $_.Code -Force
}
}
}
}
catch {
Write-Host $_
}
finally {
$Driver.Quit()
}
}
# Import all functions
Foreach ($Section in $UseSections) {
if ($Section -like "ALL") {
Get-ChildItem $PSScriptRoot/Functions -Recurse -File -Include *ps1 | Foreach-Object {
. $_.FullName
}
}
else {
Get-ChildItem $PSScriptRoot/Functions/$Section -Recurse -File -Include *ps1 | Foreach-Object {
. $_.FullName
}
}
}