Skip to content

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

@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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions