Initial import: Music_Server, MusicFree, catalog-sync
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$RemoteHost,
|
||||
[int]$Port = 22,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$User,
|
||||
[string]$RootDir = "/volume4/Music_Cloud"
|
||||
)
|
||||
|
||||
function Quote-RemotePathForPosixShell {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Path
|
||||
)
|
||||
|
||||
$EscapedPath = $Path.Replace("'", "'\''")
|
||||
return "'$EscapedPath'"
|
||||
}
|
||||
|
||||
function New-ScpRemoteTarget {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Remote,
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Path
|
||||
)
|
||||
|
||||
return "${Remote}:$(Quote-RemotePathForPosixShell -Path $Path)"
|
||||
}
|
||||
|
||||
$AppHome = "$RootDir/catalogsync"
|
||||
$RemoteDirs = @(
|
||||
$RootDir,
|
||||
"$RootDir/library",
|
||||
"$AppHome/app",
|
||||
"$AppHome/bin",
|
||||
"$AppHome/config",
|
||||
"$AppHome/data",
|
||||
"$AppHome/inputs",
|
||||
"$AppHome/logs"
|
||||
)
|
||||
|
||||
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$ProjectRoot = Resolve-Path (Join-Path $ScriptDir "..\..")
|
||||
$Remote = "$User@$RemoteHost"
|
||||
|
||||
$QuotedDirs = $RemoteDirs | ForEach-Object { Quote-RemotePathForPosixShell -Path $_ }
|
||||
$RemoteMkdirCommand = "mkdir -p " + ($QuotedDirs -join " ")
|
||||
ssh -p $Port $Remote $RemoteMkdirCommand
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Failed to create remote directories."
|
||||
}
|
||||
|
||||
$AppSources = @(
|
||||
(Join-Path $ProjectRoot "musicdl"),
|
||||
(Join-Path $ProjectRoot "setup.py"),
|
||||
(Join-Path $ProjectRoot "README.md"),
|
||||
(Join-Path $ProjectRoot "LICENSE"),
|
||||
(Join-Path $ProjectRoot "requirements.txt"),
|
||||
(Join-Path $ProjectRoot "requirements-optional.txt")
|
||||
)
|
||||
$RemoteAppDirTarget = New-ScpRemoteTarget -Remote $Remote -Path "$AppHome/app/"
|
||||
foreach ($Source in $AppSources) {
|
||||
scp -P $Port -r $Source $RemoteAppDirTarget
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Failed to copy app source: $Source"
|
||||
}
|
||||
}
|
||||
|
||||
$BinTemplates = @(
|
||||
(Join-Path $ScriptDir "templates\download_all.sh"),
|
||||
(Join-Path $ScriptDir "templates\download_from_file.sh"),
|
||||
(Join-Path $ScriptDir "templates\upload_all.sh"),
|
||||
(Join-Path $ScriptDir "templates\install_runtime.sh"),
|
||||
(Join-Path $ScriptDir "templates\serve_console.sh"),
|
||||
(Join-Path $ScriptDir "templates\deploy_and_restart.sh")
|
||||
)
|
||||
$RemoteBinDirTarget = New-ScpRemoteTarget -Remote $Remote -Path "$AppHome/bin/"
|
||||
foreach ($Template in $BinTemplates) {
|
||||
scp -P $Port $Template $RemoteBinDirTarget
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Failed to copy bin template: $Template"
|
||||
}
|
||||
}
|
||||
|
||||
$RemoteEnvExample = "$AppHome/config/catalogsync.env.example"
|
||||
$LocalEnvExample = Join-Path $ScriptDir "templates\catalogsync.env.example"
|
||||
$RemoteEnvExampleTarget = New-ScpRemoteTarget -Remote $Remote -Path $RemoteEnvExample
|
||||
scp -P $Port $LocalEnvExample $RemoteEnvExampleTarget
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Failed to copy catalogsync.env.example."
|
||||
}
|
||||
Reference in New Issue
Block a user