doc/v1-examples/Invoke-RepositoryDecision.ps1

#requires -Version 7.4
#requires -PSEdition Core
[CmdletBinding()]
param([Parameter(Mandatory)][string]$Repository,
      [string]$QuietCliRoot=(Join-Path $PSScriptRoot '..'),
      [ValidateRange(1024,65536)][int]$MaxOutputBytes=2048)
$ErrorActionPreference='Stop'
$QuietCliRoot=[IO.Path]::GetFullPath($QuietCliRoot)
Import-Module (Join-Path $QuietCliRoot 'FrenchExDev.QuietCli.PoSh.psd1') -ErrorAction Stop
$repo=[IO.Path]::GetFullPath($Repository)
# Reuse the supplied companion in a separate process. The outer task consumes its
# envelope as data, checks it, and records it as a step before using its fields.
$engine=(Get-Process -Id $PID).Path
$companion=Join-Path $QuietCliRoot 'examples/Generated-GitOverview.ps1'
Invoke-QuietTask -MaxOutputBytes $MaxOutputBytes -AsJson -ArgumentList @($repo,$engine,$companion) -ScriptBlock {
    param($repo,$engine,$companion)
    $capture=Invoke-QuietStep -Name 'execute-reused-companion' -ScriptBlock {
        Invoke-QuietCli -FilePath $engine -ArgumentList @('-NoLogo','-NoProfile','-File',$companion,'-Repository',$repo) `
            -WorkingDirectory $repo -TimeoutSeconds 60 -Parse {
                param($capture)
                ConvertFrom-Json -InputObject $capture.Stdout -ErrorAction Stop
            }
    }
    if ($capture.Outcome -ne 'Success') { return }
    $overview=Invoke-QuietStep -Name 'reused-domain-result' -ScriptBlock { $capture.Data }
    if ($overview.Outcome -ne 'Success' -or !$overview.Execution.AnalysisComplete -or !$overview.Data.AnswerComplete) { return }
    $head=Invoke-QuietStep -Name 'head' -ScriptBlock {
        Invoke-QuietCli -FilePath git -ArgumentList @('rev-parse','--verify','HEAD') -WorkingDirectory $repo -Parse {
            param($capture)
            if ($capture.ExitCode -ne 0) { return }
            $value=$capture.Stdout.Trim()
            if ($value -notmatch '^[0-9a-f]{40,64}$') { throw 'Unexpected Git object identifier.' }
            [pscustomobject]@{Commit=$value}
        }
    }
    if ($head.Outcome -ne 'Success') { return }
    [pscustomobject]@{
        Branch=$overview.Data.Branch;Head=$head.Data.Commit
        NeedsReview=(!$overview.Data.Clean);ChangedEntries=$overview.Data.Changed;UntrackedEntries=$overview.Data.Untracked
        Scope='Entire repository; Git --untracked-files=normal; two sequential observations, not an atomic snapshot'
        AnswerComplete=$true
    }
}