buildovanie cez task a verzia na jednom mieste
This commit is contained in:
74
scripts/publish-devcontainer-image.ps1
Normal file
74
scripts/publish-devcontainer-image.ps1
Normal file
@@ -0,0 +1,74 @@
|
||||
param(
|
||||
[switch]$Push,
|
||||
[string]$EnvFile = ".devcontainer/.env",
|
||||
[string]$Dockerfile = ".devcontainer/Dockerfile"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
if (!(Test-Path $EnvFile)) {
|
||||
throw "Env file not found: $EnvFile"
|
||||
}
|
||||
|
||||
$vars = @{}
|
||||
Get-Content $EnvFile | ForEach-Object {
|
||||
$line = $_.Trim()
|
||||
if ($line -and -not $line.StartsWith("#")) {
|
||||
$pair = $line -split "=", 2
|
||||
if ($pair.Count -eq 2) {
|
||||
$vars[$pair[0].Trim()] = $pair[1].Trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$required = @("PYTHON_BASE", "DEVCONTAINER_IMAGE_PUSH_REPO", "DEVCONTAINER_IMAGE_REV")
|
||||
foreach ($key in $required) {
|
||||
if (-not $vars.ContainsKey($key) -or [string]::IsNullOrWhiteSpace($vars[$key])) {
|
||||
throw "Missing required key '$key' in $EnvFile"
|
||||
}
|
||||
}
|
||||
|
||||
$pythonBase = $vars["PYTHON_BASE"]
|
||||
$pushRepo = $vars["DEVCONTAINER_IMAGE_PUSH_REPO"]
|
||||
$rev = $vars["DEVCONTAINER_IMAGE_REV"]
|
||||
|
||||
$versionTag = "${pushRepo}:${pythonBase}-${rev}-devcontainer"
|
||||
$channelTag = "${pushRepo}:${pythonBase}-devcontainer"
|
||||
$registry = ($pushRepo -split "/", 2)[0]
|
||||
|
||||
function Invoke-DockerPushWithLoginFallback {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Tag,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Registry
|
||||
)
|
||||
|
||||
Write-Host "Pushing $Tag"
|
||||
docker push $Tag
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
return
|
||||
}
|
||||
|
||||
Write-Warning "docker push failed for $Tag. Trying docker login to $Registry and retrying once."
|
||||
docker login $Registry
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "docker login failed for $Registry"
|
||||
}
|
||||
|
||||
docker push $Tag
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "docker push failed for $Tag after login fallback"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Building $versionTag"
|
||||
docker build -f $Dockerfile --build-arg "PYTHON_VERSION=$pythonBase" -t $versionTag -t $channelTag .
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "docker build failed"
|
||||
}
|
||||
|
||||
if ($Push) {
|
||||
Invoke-DockerPushWithLoginFallback -Tag $versionTag -Registry $registry
|
||||
Invoke-DockerPushWithLoginFallback -Tag $channelTag -Registry $registry
|
||||
}
|
||||
Reference in New Issue
Block a user