Scripts/Operations/New-PipelinesFromStarterKit.ps1 (89 lines of code) (raw):
<#
.SYNOPSIS
Copy pipelines and templates from starter kit to new folder
.DESCRIPTION
This script copies pipelines and templates from the starter kit to a new folder. The script prompts for the type of pipeline to create, the branching flow to implement, and the type of script to use.
.PARAMETER StarterKitFolder
Starter kit folder
.PARAMETER PipelinesFolder
New pipeline folder
.PARAMETER PipelineType
Type of DevOps pipeline to create AzureDevOps or GitHubActions?
.PARAMETER BranchingFlow
Implementing branching flow Release or GitHub
.PARAMETER ScriptType
Using Powershell module or script?
#>
[CmdletBinding()]
param (
[Parameter(Mandatory = $false, HelpMessage = "Starter kit folder")]
[string] $StarterKitFolder = "./StarterKit",
[Parameter(Mandatory = $false, HelpMessage = "New pipeline folder")]
[string] $PipelinesFolder = "",
[Parameter(Mandatory = $false, HelpMessage = "Type of DevOps pipeline to create AzureDevOps or GitHubActions?")]
[ValidateSet("AzureDevOps", "GitHubActions")]
# [string] $PipelineType = "AzureDevOps",
[string] $PipelineType = "GitHubActions",
[Parameter(Mandatory = $false, HelpMessage = "Implementing branching flow Release or GitHub")]
[ValidateSet("Release", "GitHub")]
[string] $BranchingFlow = "Release",
[Parameter(Mandatory = $false, HelpMessage = "Using Powershell module or script?")]
[ValidateSet("Module", "Scripts")]
[string] $ScriptType = "Module"
)
if (!(Test-Path $StarterKitFolder)) {
Write-Error "Starter kit folder not found"
return
}
$starterPipelinesFolder = ""
$starterPipelinesSubfolder = ""
$starterTemplatesSubfolder = ""
$templatesFolder = ""
$pipelineTypeText = ""
$templateTypeText = ""
switch ($PipelineType) {
AzureDevOps {
if ($PipelinesFolder -eq "") {
$PipelinesFolder = "./Pipelines"
}
$templatesFolder = "$PipelinesFolder/templates"
$starterPipelinesFolder = "$StarterKitFolder/Pipelines/AzureDevOps"
$pipelineTypeText = "Azure DevOps pipelines"
$templateTypeText = "Azure DevOps templates"
}
GitHubActions {
if ($PipelinesFolder -eq "") {
$PipelinesFolder = "./.github/workflows"
}
$templatesFolder = $PipelinesFolder
$starterPipelinesFolder = "$StarterKitFolder/Pipelines/GitHubActions"
$pipelineTypeText = "GitHub Actions workflows"
$templateTypeText = "GitHub Actions reusable workflows"
}
}
switch ($BranchingFlow) {
Release {
$starterPipelinesSubfolder = "Release-Flow"
}
GitHub {
$starterPipelinesSubfolder = "GitHub-Flow"
}
}
$starterPipelinesPath = "$starterPipelinesFolder/$starterPipelinesSubfolder/*.yml"
switch ($ScriptType) {
Module {
$starterTemplatesSubfolder = "templates-ps1-module"
}
Scripts {
$starterTemplatesSubfolder = "templates-ps1-scripts"
}
}
$starterTemplatesPath = "$starterPipelinesFolder/$starterTemplatesSubfolder/*.yml"
if (!(Test-Path $templatesFolder)) {
$null = New-Item -ItemType Directory -Name $templatesFolder
}
Write-Information "Copying starter kit $pipelineTypeText ($starterPipelinesSubfolder) from '$starterPipelinesPath' to $PipelinesFolder" -InformationAction Continue
Write-Information "Copying starter kit $templateTypeText (use $ScriptType) from '$starterTemplatesPath' to $templatesFolder" -InformationAction Continue
Read-Host "Press Enter to continue"
Copy-Item -Path $starterPipelinesPath -Destination $PipelinesFolder
Copy-Item -Path $starterTemplatesPath -Destination $templatesFolder