tasks/container.tasks.ps1
# ContainersToBuild must be an array of hashtables of the following structure: # @( # @{ # Dockerfile = "<path-to-dockerfile>" # ImageName = "<container-image-name-without-tag>" # ContextDir = "<path-to-docker-build-context-dir>" # } # ) $ContainersToBuild = @() # Allows any containers to be built with a custom version tag, rather than the default SemVer provided by GitVersion $ContainerImageVersionOverride = $null $ContainerPublishTag = $null # Synopsis: Build Container Images task BuildContainerImages -If {!$SkipContainerImages -and $ContainersToBuild} GenerateContainerBuildTag,{ foreach ($buildInfo in $ContainersToBuild) { $contextDir = $buildInfo.ContainsKey("ContextDir") ? $buildInfo.ContextDir : (Split-Path -Parent $buildInfo.Dockerfile) exec { docker build ` -t ("{0}:{1}" -f $buildInfo.ImageName, $containerBuildTag) ` -f $buildInfo.Dockerfile ` $contextDir } } } # Synopsis: Set the container image version task GenerateContainerBuildTag GitVersion,{ if ($ContainerImageVersionOverride) { Write-Host "Overriding default container image version tag: $ContainerImageVersionOverride" $script:containerBuildTag = $ContainerImageVersionOverride } else { $script:containerBuildTag = ($script:GitVersion).SemVer } } # Synopsis: Publish Container Images to GHCR task PublishContainerImagesToGhcr GenerateContainerBuildTag,{ foreach ($buildInfo in $ContainersToBuild) { $buildTag = "{0}:{1}" -f $buildInfo.ImageName, $containerBuildTag $publishTag = $ContainerPublishTag ? ` "docker.pkg.github.com/$ContainerPublishTag/$buildTag" : ` "docker.pkg.github.com/$(gh repo view --json nameWithOwner | ConvertFrom-Json | Select-Object -ExpandProperty nameWithOwner)/$buildTag" Write-Host "Publishing Container: $publishTag" exec { docker tag $buildTag $publishTag docker push $publishTag } } } |