This directory contains package starters - pre-built task collections for specific toolchains and workflows. Package starters provide ready-to-use task templates that you can install into your project's .build/ directory.
Python application development tasks for formatting, linting, testing, and building with Docker fallback support.
Included Tasks:
format- Formats Python files usingblack(alias:fmt)lint- Validates Python code usingrufftest- Runs tests usingpytestbuild- Installs dependencies and validates package structure (depends on format, lint, test)
Requirements:
- Python 3.8+ (3.12 recommended): https://www.python.org/downloads/
- OR Docker Engine: https://docs.docker.com/get-docker/ (automatic fallback)
- Tasks automatically use Docker if Python is not installed
Installation:
Option 1: Download from GitHub Releases (recommended)
# Interactive script to download and install starter packages
irm https://raw.githubusercontent.com/motowilliams/bolt/main/Download-Starter.ps1 | iexOption 2: Manual copy from source (for development)
# From your project root
Copy-Item -Path "packages/.build-python/Invoke-*.ps1" -Destination ".build/" -ForceUsage:
# Format all Python files
.\bolt.ps1 format
# Lint Python code
.\bolt.ps1 lint
# Run tests
.\bolt.ps1 test
# Full build pipeline (format → lint → test → build)
.\bolt.ps1 buildDocker Fallback: If Python is not installed, tasks automatically use Docker:
# No local Python? No problem!
.\bolt.ps1 format # Uses Docker: python:3.12-slim
.\bolt.ps1 build # Automatically falls back to DockerTesting: The Python starter package includes comprehensive tests:
packages/.build-python/tests/Tasks.Tests.ps1- Task structure validationpackages/.build-python/tests/Integration.Tests.ps1- End-to-end integration testspackages/.build-python/tests/app/- Example Python application with pytest tests
Run tests with: Invoke-Pester -Tag Python-Tasks
Go application development tasks for building, testing, and formatting Go code with Docker fallback support.
Included Tasks:
format- Formats Go files usinggo fmt(alias:fmt)lint- Validates Go code usinggo vettest- Runs Go tests usinggo testbuild- Builds Go application (depends on format, lint, test)
Requirements:
- Go 1.21+ CLI: https://go.dev/doc/install
- OR Docker Engine: https://docs.docker.com/get-docker/ (automatic fallback)
- Tasks automatically use Docker if Go is not installed
Installation:
Option 1: Download from GitHub Releases (recommended)
# Interactive script to download and install starter packages
irm https://raw.githubusercontent.com/motowilliams/bolt/main/Download-Starter.ps1 | iexOption 2: Manual copy from source (for development)
# From your project root
Copy-Item -Path "packages/.build-golang/Invoke-*.ps1" -Destination ".build/" -ForceUsage:
# Format all Go files
.\bolt.ps1 format
# Lint Go code
.\bolt.ps1 lint
# Run tests
.\bolt.ps1 test
# Full build pipeline (format → lint → test → build)
.\bolt.ps1 buildTesting: The Golang starter package includes comprehensive tests:
packages/.build-golang/tests/Tasks.Tests.ps1- Task structure validationpackages/.build-golang/tests/Integration.Tests.ps1- End-to-end integration testspackages/.build-golang/tests/app/- Example Go application
Run tests with: Invoke-Pester -Tag Golang-Tasks
TypeScript/JavaScript application development tasks for building, testing, linting, and formatting with Docker fallback support.
Included Tasks:
format- Formats TypeScript files using Prettier (alias:fmt)lint- Validates TypeScript code using ESLinttest- Runs tests using Jest test runnerbuild- Compiles TypeScript to JavaScript (depends on format, lint, test)
Requirements:
- Node.js 18+ with npm: https://nodejs.org/
- OR Docker Engine: https://docs.docker.com/get-docker/ (automatic fallback)
- Tasks automatically use Docker if Node.js/npm is not installed
Installation:
Option 1: Download from GitHub Releases (recommended)
# Interactive script to download and install starter packages
irm https://raw.githubusercontent.com/motowilliams/bolt/main/Download-Starter.ps1 | iexOption 2: Manual copy from source (for development)
# From your project root
Copy-Item -Path "packages/.build-typescript/Invoke-*.ps1" -Destination ".build/" -ForceUsage:
# Format all TypeScript files
.\bolt.ps1 format
# Lint TypeScript code
.\bolt.ps1 lint
# Run tests
.\bolt.ps1 test
# Full build pipeline (format → lint → test → build)
.\bolt.ps1 buildDocker Fallback: If Node.js/npm is not installed, tasks automatically use Docker:
# No local Node.js? No problem!
.\bolt.ps1 format # Uses Docker: node:22-alpine
.\bolt.ps1 build # Automatically falls back to DockerTesting: The TypeScript starter package includes comprehensive tests:
packages/.build-typescript/tests/Tasks.Tests.ps1- Task structure validationpackages/.build-typescript/tests/Integration.Tests.ps1- End-to-end integration testspackages/.build-typescript/tests/app/- Example TypeScript application with Jest tests
Run tests with: Invoke-Pester -Tag TypeScript-Tasks
dotnet/C# application development tasks for building, testing, formatting, and restoring packages with Docker fallback support.
Included Tasks:
format- Formats C# files usingdotnet format(alias:fmt)restore- Restores NuGet packages usingdotnet restoretest- Runs dotnet tests usingdotnet testbuild- Builds dotnet projects (depends on format, restore, test)
Requirements:
- .NET SDK 6.0+ (8.0+ recommended): https://dotnet.microsoft.com/download
- OR Docker Engine: https://docs.docker.com/get-docker/ (automatic fallback)
- Tasks automatically use Docker if dotnet SDK is not installed
Installation:
Option 1: Download from GitHub Releases (recommended)
# Interactive script to download and install starter packages
irm https://raw.githubusercontent.com/motowilliams/bolt/main/Download-Starter.ps1 | iexOption 2: Manual copy from source (for development)
# From your project root
Copy-Item -Path "packages/.build-dotnet/Invoke-*.ps1" -Destination ".build/" -ForceUsage:
# Format all C# files
.\bolt.ps1 format
# Restore NuGet packages
.\bolt.ps1 restore
# Run tests
.\bolt.ps1 test
# Full build pipeline (format → restore → test → build)
.\bolt.ps1 buildDocker Fallback: If dotnet SDK is not installed, tasks automatically use Docker:
# No local dotnet SDK? No problem!
.\bolt.ps1 format # Uses Docker: mcr.microsoft.com/dotnet/sdk:10.0
.\bolt.ps1 build # Automatically falls back to DockerTesting: The dotnet starter package includes comprehensive tests:
packages/.build-dotnet/tests/Tasks.Tests.ps1- Task structure validationpackages/.build-dotnet/tests/Integration.Tests.ps1- End-to-end integration testspackages/.build-dotnet/tests/app/- Example dotnet application with xUnit tests
Run tests with: Invoke-Pester -Tag DotNet-Tasks
Infrastructure-as-Code tasks for Terraform workflows with Docker fallback support.
Included Tasks:
format- Formats Terraform files usingterraform fmt(alias:fmt)validate- Validates Terraform configuration syntaxplan- Generates Terraform execution planapply- Applies Terraform changes (alias:deploy)
Requirements:
- Terraform 1.0+ CLI: https://developer.hashicorp.com/terraform/downloads
- OR Docker Engine: https://docs.docker.com/get-docker/ (automatic fallback)
- Tasks automatically use Docker if Terraform CLI is not installed
Installation:
Option 1: Download from GitHub Releases (recommended)
# Interactive script to download and install starter packages
irm https://raw.githubusercontent.com/motowilliams/bolt/main/Download-Starter.ps1 | iexOption 2: Manual copy from source (for development)
# From your project root
Copy-Item -Path "packages/.build-terraform/Invoke-*.ps1" -Destination ".build/" -ForceUsage:
# Format all Terraform files
.\bolt.ps1 format
# Validate Terraform configuration
.\bolt.ps1 validate
# Generate execution plan
.\bolt.ps1 plan
# Full apply pipeline (format → validate → plan → apply)
.\bolt.ps1 applyDocker Fallback: If Terraform CLI is not installed, tasks automatically use Docker:
# No local Terraform? No problem!
.\bolt.ps1 format # Uses Docker: hashicorp/terraform:latest
.\bolt.ps1 validate # Automatically falls back to DockerTesting: The Terraform starter package includes comprehensive tests:
packages/.build-terraform/tests/Tasks.Tests.ps1- Task structure validationpackages/.build-terraform/tests/Integration.Tests.ps1- End-to-end integration testspackages/.build-terraform/tests/tf/- Example Terraform configuration
Run tests with: Invoke-Pester -Tag Terraform-Tasks
Infrastructure-as-Code tasks for Azure Bicep workflows.
Included Tasks:
format- Formats Bicep files usingbicep formatlint- Validates Bicep syntax usingbicep lintbuild- Compiles Bicep files to ARM JSON templates
Requirements:
- Azure Bicep CLI:
winget install Microsoft.Bicep(Windows) or https://aka.ms/bicep-install
Installation:
Option 1: Download from GitHub Releases (recommended)
# Interactive script to download and install starter packages
irm https://raw.githubusercontent.com/motowilliams/bolt/main/Download-Starter.ps1 | iexOption 2: Manual copy from source (for development)
# From your project root
Copy-Item -Path "packages/.build-bicep/Invoke-*.ps1" -Destination ".build/" -ForceUsage:
# Format all Bicep files
.\bolt.ps1 format
# Validate Bicep syntax
.\bolt.ps1 lint
# Full build pipeline (format → lint → build)
.\bolt.ps1 buildTesting: The Bicep starter package includes comprehensive tests:
packages/.build-bicep/tests/Tasks.Tests.ps1- Task structure validationpackages/.build-bicep/tests/Integration.Tests.ps1- End-to-end integration testspackages/.build-bicep/tests/iac/- Example infrastructure templates
Run tests with: Invoke-Pester -Tag Bicep-Tasks
New in Bolt v0.6.0: You can install multiple package starters simultaneously by organizing them as namespace subdirectories under .build/.
Instead of copying tasks directly to .build/, create namespace subdirectories:
# Create namespace subdirectories
New-Item -ItemType Directory -Path ".build/bicep" -Force
New-Item -ItemType Directory -Path ".build/golang" -Force
# Install Bicep package starter
Copy-Item -Path "packages/.build-bicep/Invoke-*.ps1" -Destination ".build/bicep/" -Force
# Install Golang package starter
Copy-Item -Path "packages/.build-golang/Invoke-*.ps1" -Destination ".build/golang/" -ForceTasks in namespace subdirectories are automatically prefixed:
Directory structure:
.build/
├── bicep/
│ ├── Invoke-Lint.ps1 (TASK: lint)
│ ├── Invoke-Format.ps1 (TASK: format)
│ └── Invoke-Build.ps1 (TASK: build)
└── golang/
├── Invoke-Lint.ps1 (TASK: lint)
├── Invoke-Test.ps1 (TASK: test)
└── Invoke-Build.ps1 (TASK: build)
Task names in Bolt:
bicep-lint,bicep-format,bicep-build(from.build/bicep/)golang-lint,golang-test,golang-build(from.build/golang/)
# List all tasks (shows both namespaces)
.\bolt.ps1 -ListTasks
# Run Bicep tasks
.\bolt.ps1 bicep-lint
.\bolt.ps1 bicep-build
# Run Golang tasks
.\bolt.ps1 golang-test
.\bolt.ps1 golang-build
# Create new namespaced tasks
.\bolt.ps1 -NewTask bicep-deploy # Creates .build/bicep/Invoke-Deploy.ps1
.\bolt.ps1 -NewTask golang-benchmark # Creates .build/golang/Invoke-Benchmark.ps1- ✅ No Conflicts: Each namespace has its own tasks (no
lintcollision between Bicep and Golang) - ✅ Clear Organization: Related tasks grouped by toolchain
- ✅ Easy Management: Add/remove toolchains by managing subdirectories
- ✅ Smart Task Creation:
-NewTaskautomatically detects namespace from task name
Tasks in the root .build/ directory (not in subdirectories) continue to work as before without namespace prefixes. This maintains full backward compatibility with existing projects.
Want to contribute a package starter? We provide comprehensive guidance:
For AI-assisted development, use the package starter creation prompt:
See: .github/prompts/create-package-starter.prompt.md
For complete developer guidelines, patterns, and requirements:
See: .github/instructions/package-starter-development.instructions.md
This comprehensive guide covers:
- Directory structure and file organization
- Task file requirements and metadata format
- Cross-platform compatibility requirements
- Testing patterns (structure and integration tests)
- Release script conventions
- Output formatting standards
- Common patterns and examples
- Create a directory:
packages/.build-<toolchain>/ - Add task files: Follow the
Invoke-<TaskName>.ps1naming convention - Include metadata: Add comment-based metadata (
# TASK:,# DESCRIPTION:,# DEPENDS:) - Add tests: Include
tests/directory with Pester tests - Document requirements: Specify external tool dependencies
- Add examples: Include sample files for testing
- Create release script: Add
Create-Release.ps1for automatic release packaging
See existing package starters as examples:
.build-bicep/- Infrastructure-as-Code tasks for Azure Bicep.build-golang/- Go application development tasks
To include your package starter in GitHub releases, add a Create-Release.ps1 script:
#Requires -Version 7.0
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$Version,
[Parameter(Mandatory = $false)]
[string]$OutputDirectory = "release"
)
# Package task files into zip
# Generate SHA256 checksum
# Exit 0 on success, 1 on failureRequirements:
- Accept
-Versionand-OutputDirectoryparameters - Create archive:
bolt-starter-{toolchain}-{version}.zip - Generate checksum:
bolt-starter-{toolchain}-{version}.zip.sha256 - Exit with 0 on success, 1 on failure
Example: See packages/.build-bicep/Create-Release.ps1
When present, your package will be automatically built and included in GitHub releases with the same version as the main Bolt module.
-
Package Starters (this directory): Reusable task collections for specific toolchains
- Installed by copying to your project
- Tested independently
- Tool-specific (requires external CLI tools)
-
Project Tasks (
.build/in project root): Your custom tasks- Project-specific automation
- Can use package starter tasks as dependencies
- Can override package starter tasks
Package starters should check for required external tools before executing:
# Example: Check for external CLI tool
$toolCmd = Get-Command <tool-name> -ErrorAction SilentlyContinue
if (-not $toolCmd) {
Write-Error "<Tool> CLI not found. Please install: <installation-instructions>"
exit 1
}See packages/.build-bicep/Invoke-Build.ps1 for a real-world example of this pattern.
We welcome contributions! If you've created a package starter for a popular toolchain:
- Fork the repository
- Create a new package starter directory under
packages/ - Follow the development guidelines: .github/instructions/package-starter-development.instructions.md
- Add comprehensive tests (structure and integration)
- Update this README with your package starter
- Submit a pull request
For general contribution guidelines, see CONTRIBUTING.md
For AI-assisted development, use: .github/prompts/create-package-starter.prompt.md