PSRule.Rules.GitHub.psm1

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

#
# PSRule.Rules.GitHub module
#

Set-StrictMode -Version latest;

[PSRule.Rules.GitHub.Configuration.PSRuleOption]::UseExecutionContext($ExecutionContext);

#
# Localization
#

#
# Public functions
#

#region Public functions

# .ExternalHelp PSRule.Rules.GitHub-help.xml
function Export-GitHubRuleData {
    [CmdletBinding()]
    [OutputType([System.IO.FileInfo])]
    [OutputType([PSObject])]
    param (
        [Parameter(Position = 0, Mandatory = $False)]
        [String]$OutputPath = $PWD,

        # Filter by Repository
        [Parameter(Mandatory = $False)]
        [Alias('R')]
        [String[]]$Repository,

        [Parameter(Mandatory = $False)]
        [PSCredential]$Credential,

        [Parameter(Mandatory = $False)]
        [Switch]$UseGitHubToken
    )
    begin {
        Write-Verbose -Message "[Export-GitHubRuleData] BEGIN::";

        $option = [PSRule.Rules.GitHub.Configuration.PSRuleOption]::new();
        $option.Output.Path = $OutputPath;

        # Build the pipeline
        $builder = [PSRule.Rules.GitHub.Pipeline.PipelineBuilder]::Export($option);
        $builder.Repository($Repository);
        $builder.UseGitHubToken($UseGitHubToken);
        $builder.Credential($Credential);
        $builder.UseCommandRuntime($PSCmdlet);
        $builder.UseExecutionContext($ExecutionContext);
        $pipeline = $builder.Build();
        if ($Null -ne (Get-Variable -Name pipeline -ErrorAction SilentlyContinue)) {
            try {
                $pipeline.Begin();
            }
            catch {
                $pipeline.Dispose();
                throw;
            }
        }
    }
    end {
        if ($Null -ne (Get-Variable -Name pipeline -ErrorAction SilentlyContinue)) {
            try {
                $pipeline.End();
            }
            finally {
                $pipeline.Dispose();
            }
        }
        Write-Verbose -Message "[Export-GitHubRuleData] END::";
    }
}

#endregion Public functions

#
# Export module
#

Export-ModuleMember -Function @(
    'Export-GitHubRuleData'
);