Skip to content

Question about ModuleBuild-Extension: <Modulename>.build.ps1: less Join-Path statements #14

Open
@schittli

Description

@schittli

Good evening Zachary

In <Modulename>.build.ps1 you naturally have a lot of Join-Path statements. I tried to understand your code (to extend it) and had to fight a lot :-).
Therefore, I created one function which calculates all used Path- and File-Names. This Function is called at the beginning of almost every task to that it has all Path- and File-Names. It looks like this:

# Calculates all Directories used in a build
Function Get-Buid-Directories {
  $Dirs = ([ordered] @{
    # Applied Config Variables
    BuildReportsFolder              = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BuildReportsFolder)
    BuildToolPath                   = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BuildToolFolder)
    TranscriptLog                   = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BuildToolFolder, $Script:BuildEnv.OptionTranscriptLogFile)
    CodeHealthScanPathPublic        = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.PublicFunctionSource)
    CodeHealthScanPathPrivate       = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.PrivateFunctionSource)
    ReleasePath                     = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BaseReleaseFolder)
    CurrentReleasePath              = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BaseReleaseFolder, $Script:BuildEnv.ModuleToBuild)
    ThisReleasePath                 = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BaseReleaseFolder, $Script:BuildEnv.ModuleVersion)
    # Other Files and Dirs
    BuildTools                      = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BuildToolFolder, 'dotSource')
    ModuleManifestFileName          = [IO.Path]::Combine($BuildRoot, "$($Script:BuildEnv.ModuleToBuild).psd1")
    ScriptModuleFileName            = [IO.Path]::Combine($BuildRoot, "$($Script:BuildEnv.ModuleToBuild).psm1")
    CodeHealthReportPublic          = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BuildReportsFolder, 'CodeHealthReport-Public.html')
    CodeHealthReportPrivate         = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BuildReportsFolder, 'CodeHealthReport-Private.html')
    RootDocsPath                    = [IO.Path]::Combine($BuildRoot, 'docs')
    RootDocsFunctionsPath           = [IO.Path]::Combine($BuildRoot, 'docs', 'Functions')
    BuildDocsPath                   = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BuildToolFolder, 'docs')
    CurrentModuleManifestFile       = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.BaseReleaseFolder, $Script:BuildEnv.ModuleToBuild, "$($Script:BuildEnv.ModuleToBuild).psd1")
    # Staging Dirs
    StagePath                       = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder)
    StagePathEnUs                   = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, 'en-US')
    StageReleasePath                = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, $Script:BuildEnv.BaseReleaseFolder)
    StagePSD1OutputFile             = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, $Script:BuildEnv.BaseReleaseFolder, "$($Script:BuildEnv.ModuleToBuild).psd1")
    StageReleaseModul               = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, $Script:BuildEnv.BaseReleaseFolder, "$($Script:BuildEnv.ModuleToBuild).psm1")
    StagePreloadFilePath            = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, "$($Script:BuildEnv.OtherModuleSource)", 'PreLoad.ps1')
    StagePrivateFunctionSourceFiles = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, "$($Script:BuildEnv.PrivateFunctionSource)", '*.ps1')
    StagePublicFunctionSourceFiles  = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, "$($Script:BuildEnv.PublicFunctionSource)", '*.ps1')
    StagePostLoadFileName           = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, "$($Script:BuildEnv.OtherModuleSource)", 'PostLoad.ps1')
    StageOtherModuleSourceDir       = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, $Script:BuildEnv.OtherModuleSource)
    StagePrivateFunctionSourceDir   = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, $Script:BuildEnv.PrivateFunctionSource)
    StagePublicFunctionSourceDir    = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, $Script:BuildEnv.PublicFunctionSource)
    StageModuleToBuildDir           = [IO.Path]::Combine($BuildRoot, $Script:BuildEnv.ScratchFolder, $Script:BuildEnv.ModuleToBuild)
  })
  # Return a Object
  $oDirs = New-Object PSObject -Property $Dirs
  $oDirs
}

I guess the Hashtable could be sorted better, but for contributors like myself, this helps a lot to just get an overview of all used path- and filenames and to undestand what's happening.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions