Functions/Public/Repositories/New-GitHubRepository.ps1
function New-GitHubRepository { <# .Synopsis Creates a new GitHub Repository, with the specified name. .Parameter Organization The name of the organization in that the GitHub repository will be created. If not given, will create a repository for the current user. .Parameter Name The name of the new GitHub repository that will be created. This is the only required parameter in order to instantiate a new GitHub Repository. The other parameters are optional, but recommended. .Parameter Description A user-friendly "plain English" description to help people understand the purpose of the GitHub repository. .Parameter Homepage The home page for the product or service that the project belongs to (eg. https://mycoolsoftwareproject.com). .Parameter IncludeReadme Indicates that a stub README.MD Markdown file should be generated when the repository is created. .Parameter DisableIssues If this parameter is present, then the GitHub Issue Tracker will be disable for the new GitHub Repository. .Parameter Private If this switch parameter is present, then the repository will be created as a Private (non-public) repository. .Notes Created by Trevor Sullivan <trevor@trevorsullivan.net> #> [CmdletBinding(DefaultParameterSetName = 'User')] [OutputType('PSGitHub.Repository')] param ( [Parameter(Mandatory, ParameterSetName = 'Org')] [string] $Organization, # The id of the team that will be granted access to this repository. # This is only valid when creating a repository in an organization. [Parameter(ParameterSetName = 'Org')] [int] $TeamId, [Parameter(Mandatory, Position = 0)] [string] $Name, [string] $Description, [string] $Homepage, [switch] $Private, [switch] $IncludeReadme, [string] $GitIgnoreTemplate, [string] $LicenseTemplate, [switch] $DisableIssues, [switch] $DisableProjects, [switch] $DisableWiki, [switch] $DisableSquashMerge, [switch] $DisableMergeCommit, [switch] $DisableRebaseMerge, [switch] $DeleteBranchOnMerge, [switch] $IsTemplate, # Optional base URL of the GitHub API, for example "https://ghe.mycompany.com/api/v3/" (including the trailing slash). # Defaults to "https://api.github.com" [Uri] $BaseUri = [Uri]::new('https://api.github.com'), [Security.SecureString] $Token = (Get-GitHubToken) ) $Body = @{ name = $Name description = $Description homepage = $Homepage private = [bool]$Private auto_init = [bool]$IncludeReadme gitignore_template = $GitIgnoreTemplate license_template = $LicenseTemplate has_wiki = -not $DisableWiki has_issues = -not $DisableIssues allow_squash_merge = -not $DisableSquashMerge allow_merge_commit = -not $DisableMergeCommit allow_rebase_merge = -not $DisableRebaseMerge delete_branch_on_merge = [bool]$DeleteBranchOnMerge is_template = [bool]$IsTemplate } if ($DisableProjects) { $Body.has_projects = -not $DisableProjects } if ($TeamId) { $Body.team_id = $TeamId } $uri = if ($Organization) { "orgs/$Organization/repos" } else { "user/repos" } $templatePreview = 'application/vnd.github.baptiste-preview+json' Invoke-GitHubApi -Method POST $uri -Body ($Body | ConvertTo-Json) -Accept $templatePreview -BaseUri $BaseUri -Token $Token | ForEach-Object { $_.PSTypeNames.Insert(0, 'PSGitHub.Repository') $_.Owner.Insert(0, 'PSGitHub.User') $_ } } |