Fix Windows deploy remote script line endings

This commit is contained in:
2026-05-18 21:13:50 +02:00
parent 66607e51eb
commit 8e730af85d

View File

@@ -24,6 +24,14 @@ function Invoke-NativeCommand {
} }
} }
function ConvertTo-LinuxLineEnding {
param(
[Parameter(Mandatory = $true)][string]$Value
)
return $Value.Replace("`r`n", "`n").Replace("`r", "`n")
}
function Get-RemoteScript { function Get-RemoteScript {
param( param(
[Parameter(Mandatory = $true)][string]$RemoteReleaseDir, [Parameter(Mandatory = $true)][string]$RemoteReleaseDir,
@@ -76,7 +84,7 @@ if ! docker run -d \
fi fi
'@ '@
return $script. $script = $script.
Replace("__REMOTE_RELEASE_DIR__", $RemoteReleaseDir). Replace("__REMOTE_RELEASE_DIR__", $RemoteReleaseDir).
Replace("__REMOTE_CURRENT_LINK__", $RemoteCurrentLink). Replace("__REMOTE_CURRENT_LINK__", $RemoteCurrentLink).
Replace("__CONTAINER_NAME__", $ContainerName). Replace("__CONTAINER_NAME__", $ContainerName).
@@ -85,6 +93,8 @@ fi
Replace("__REMOTE_DATA_DIR__", $RemoteDataDir). Replace("__REMOTE_DATA_DIR__", $RemoteDataDir).
Replace("__CONTAINER_PORT__", $ContainerPort). Replace("__CONTAINER_PORT__", $ContainerPort).
Replace("__HOST_PORT__", $HostPort) Replace("__HOST_PORT__", $HostPort)
return ConvertTo-LinuxLineEnding -Value $script
} }
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
@@ -119,7 +129,7 @@ try {
dotnet publish $projectPath -c Release -o $localPublishDir dotnet publish $projectPath -c Release -o $localPublishDir
} }
@' $dockerfile = @'
FROM mcr.microsoft.com/dotnet/aspnet:10.0 FROM mcr.microsoft.com/dotnet/aspnet:10.0
WORKDIR /app WORKDIR /app
ENV ASPNETCORE_URLS=http://+:8080 ENV ASPNETCORE_URLS=http://+:8080
@@ -128,21 +138,10 @@ EXPOSE 8080
COPY publish/ ./ COPY publish/ ./
RUN mkdir -p /app/data RUN mkdir -p /app/data
ENTRYPOINT ["dotnet", "RpgRoller.dll"] ENTRYPOINT ["dotnet", "RpgRoller.dll"]
'@ | Set-Content -Path (Join-Path $localStageDir "Dockerfile") -NoNewline '@
Invoke-NativeCommand -Name "2) Preparing remote release directory..." -Action { ConvertTo-LinuxLineEnding -Value $dockerfile |
ssh $remoteHost "mkdir -p '$remoteReleasesDir' '$remoteDataDir' && test ! -e '$remoteReleaseDir' && mkdir -p '$remoteReleaseDir'" Set-Content -Path (Join-Path $localStageDir "Dockerfile") -NoNewline
}
Invoke-NativeCommand -Name "3) Uploading release payload..." -Action {
Push-Location $localStageDir
try {
scp -r "Dockerfile" "publish" "${remoteHost}:$remoteReleaseDir/"
}
finally {
Pop-Location
}
}
$remoteScript = Get-RemoteScript ` $remoteScript = Get-RemoteScript `
-RemoteReleaseDir $remoteReleaseDir ` -RemoteReleaseDir $remoteReleaseDir `
@@ -154,8 +153,25 @@ ENTRYPOINT ["dotnet", "RpgRoller.dll"]
-ContainerPort $containerPort ` -ContainerPort $containerPort `
-HostPort $hostPort -HostPort $hostPort
ConvertTo-LinuxLineEnding -Value $remoteScript |
Set-Content -Path (Join-Path $localStageDir "deploy-remote.sh") -NoNewline
Invoke-NativeCommand -Name "2) Preparing remote release directory..." -Action {
ssh $remoteHost "mkdir -p '$remoteReleasesDir' '$remoteDataDir' && test ! -e '$remoteReleaseDir' && mkdir -p '$remoteReleaseDir'"
}
Invoke-NativeCommand -Name "3) Uploading release payload..." -Action {
Push-Location $localStageDir
try {
scp -r "Dockerfile" "deploy-remote.sh" "publish" "${remoteHost}:$remoteReleaseDir/"
}
finally {
Pop-Location
}
}
Invoke-NativeCommand -Name "4) Building image and restarting container on remote host..." -Action { Invoke-NativeCommand -Name "4) Building image and restarting container on remote host..." -Action {
$remoteScript | ssh $remoteHost "bash -se" ssh $remoteHost "bash '$remoteReleaseDir/deploy-remote.sh'"
} }
Write-Host "5) Deployment complete." Write-Host "5) Deployment complete."