-
-
Notifications
You must be signed in to change notification settings - Fork 60
Build Scripts in Projects
NOTE Consider naming build scripts like MyProject.build.ps1
instead of
.build.ps1
. The latter was historically used in some projects and was fine
for Windows. But PowerShell 6.0+ is cross-platform and on Unix like systems
"dot files" are treated as hidden by default.
These scripts are for pure PowerShell script projects. The following tasks are automated:
- Clean the project directory
- Run tests and compare results with expected
- Build the help file (PowerShell MAML format)
- Convert markdown files to HTML for packages
- Create packages
These scripts are examples of mixed build tools: Invoke-Build and MSBuild work together and call each other. See how the configuration parameter is passed in both directions.
The task Build calls MSBuild in order to build the C# project:
exec { MSBuild Src\Mdbc.csproj /t:Build /p:Configuration=$Configuration }
The task PostBuild is called by MSBuild as the post-build event, it copies the just built module and its satellite files to one of the PowerShell module directories, so that it is ready to use/debug after the build. The post-build command line is:
PowerShell.exe -NoProfile Invoke-Build PostBuild $(ProjectDir)\..\.build.ps1 -Configuration $(ConfigurationName)
Or even simpler with one of the ib commands:
ib PostBuild $(ProjectDir)\..\.build.ps1 -Configuration $(ConfigurationName)
Other tasks are typical: clean, test, build and test help, create packages. Both projects use Invoke-Build for testing, each test is represented by a task in a test build script.
This project is a collection of PowerShell issues described by markdown files, demo scripts, and test scripts. There is nothing to "build" here. The build script is for testing, generating the index, and other routine tasks.
This project maintains the complex build system where Invoke-Build and MSBuild work together in the hierarchy of projects with Invoke-Build scripts, MSBuild scripts (C++ and C# projects), and Visual Studio solutions.
Parent project scripts dispatch common tasks like Build, Install, Clean to child scripts, some of them dispatch these tasks further to their children.
One of the scripts in this hierarchy is a build task library which is imported
by other build scripts. Another point of interest is use of property
. It gets
parent script values in child scripts, parents do not have to specify them
explicitly on task dispatching.
This module replaces the command line editing experience of PowerShell for versions 3 and up.
PowerShell extension for Visual Studio Code.
PowerShellEditorServices.build.ps1
Common functionality across multiple editors.
PowerShell module designed for generating user interfaces from PowerShell modules.
A cross-platform PowerShell module (Windows, Linux, and MacOS) with commands to validate objects on the pipeline using PowerShell syntax.
PowerShell module to interact with Atlassian JIRA.
Some red-gate projects use Invoke-Build scripts:
zloeber/FormatPowershellCode/.build.ps1
It is one of the most evolved Invoke-Build scripts. It puts together a lot of typical project tasks with complex relations.
PowerShell module gathering PowerShell code quality and maintainability metrics.
- Concepts
- Script Tutorial
- Incremental Tasks
- Partial Incremental Tasks
- How Build Works
- Special Variables
- Build Failures
- Build Analysis
- Parallel Builds
- Persistent Builds
- Portable Build Scripts
- Using for Test Automation
- Debugging Tips
- VSCode Tips
Helpers
- Invoke Task from VSCode
- Generate VSCode Tasks
- Invoke Task from ISE
- Resolve MSBuild
- Show Build Trees
- Show Build Graph
- Argument Completers
- Invoke-Build.template
Appendix