X Tutup
The Wayback Machine - https://web.archive.org/web/20200913002210/https://github.com/ModuleBuild/ModuleBuild/issues/14
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
schittli opened this issue Apr 9, 2018 · 1 comment

Comments

@schittli
Copy link

@schittli schittli commented Apr 9, 2018

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.

@justin-p
Copy link
Collaborator

@justin-p justin-p commented Apr 24, 2020

Hi @schittli, do you have a branch somewhere that shows these changes in action ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.
X Tutup