pkg.ps1 (109 lines of code) (raw):

#!/usr/bin/env pwsh # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. <# .SYNOPSIS Builds Traffic Control components. .DESCRIPTION A convenience script for generating RPM packages using Docker. If no projects are listed, all projects will be built. .PARAMETER q Quiet mode. Supresses output. .PARAMETER v Verbose mode. Lists all build output. .PARAMETER l List available projects. .EXAMPLE C:\Users\admin\go\src\github.com\apache\trafficcontrol> .\pkg.ps1 -l source traffic_monitor_build traffic_ops_build traffic_portal_build traffic_router_build traffic_stats_build grove_build grovetccfg_build weasel docs .NOTES Author: Apache Software Foundation Date: July 30, 2019 #> param( [switch]$q, [switch]$v, [switch]$l ) $DOCKER = (Get-Command docker).Source; if ($DOCKER -eq "") { Write-Error "docker is required for a docker build." -Category ObjectNotFound; exit 1; } Push-Location $PSScriptRoot; $COMPOSE_FILE = "./infrastructure/docker/build/docker-compose.yml"; $COMPOSE = (Get-Command docker compose).Source; $COMPOSE_ARGS = "" if ($COMPOSE -eq "") { & $DOCKER "inspect docker-compose:latest"; if ($? -eq $false) { & $DOCKER "pull docker-compose:latest"; if ($? -eq $false) { Write-Error "Couldn't pull docker compose - please connect to the internet or install docker-compose." -Category NotInstalled; exit 1; } } $USERHOME = $home; $COMPOSE = $DOCKER; $COMPOSE_ARGS = "run --rm '$env:COMPOSE_OPTIONS' -v '${PSScriptRoot}:$PSScriptRoot' -v '${USERHOME}:/root'"; } $PROJECTS = & $COMPOSE $COMPOSE_ARGS "-f" $COMPOSE_FILE "config" "--services" | Out-String; if ($l) { Write-Host $PROJECTS; exit 0; } if ($args.Length -eq 0) { $args = $PROJECTS.Split([Environment]::Newline); } $code=$true; for ($i=0; $i -lt $args.Length; $i++) { $PROJECT = $args[$i]; if ($PROJECT -eq "") { continue; } Write-Host "Building $PROJECT"; if ($v) { & $COMPOSE $COMPOSE_ARGS "-f" $COMPOSE_FILE "build" $PROJECT | Write-Verbose; if ($?) { & $COMPOSE $COMPOSE_ARGS "-f" $COMPOSE_FILE "run" "--rm" $PROJECT | Write-Verbose; if ($? -eq $false) { Write-Error "Failed to execute $PROJECT"; $code=$false; } } else { Write-Error "Failed to build $PROJECT"; $code=$false; } } else { & $COMPOSE $COMPOSE_ARGS "-f" $COMPOSE_FILE "build" $PROJECT | Out-Null; if ($?) { & $COMPOSE $COMPOSE_ARGS "-f" $COMPOSE_FILE "run" "--rm" $PROJECT | Out-Null; if ($? -eq $false) { Write-Error "Failed to execute $PROJECT"; $code=$false; } } else { Write-Error "Failed to build $PROJECT"; $code=$false; } } } exit $code;