feat(release): prepare 1.1.0 candidate

This commit is contained in:
Yun Chan 2026-08-29 18:33:45 +09:00
parent 5a34f66981
commit 5205dcdfa9
736 changed files with 115667 additions and 12203 deletions

View file

@ -91,18 +91,57 @@ Write-Host "`n[3/4] Packaging NAS deployment files..." -ForegroundColor Yellow
# Copy docker-compose.nas.yml as docker-compose.yml in package
Copy-Item (Join-Path $PSScriptRoot "..\docker-compose.nas.yml") (Join-Path $nasPkgDir "docker-compose.yml") -Force
# Copy or generate .env in package
if (Test-Path $rootEnvFile) {
Copy-Item $rootEnvFile (Join-Path $nasPkgDir ".env") -Force
} else {
$envContent = @"
# Generate an allowlisted deployment environment. Never copy the repository
# .env because it can also contain Git, SSH, and NAS credentials.
$requiredDeploymentSecrets = @(
"JWT_SECRET",
"JWT_ISSUER",
"JWT_AUDIENCE",
"ADMIN_BOOTSTRAP_TOKEN",
"D3RO_API_TOKEN",
"ADMIN_SESSION_SECRET",
"API_SERVER_URL",
"CORS_ALLOWED_ORIGINS",
"ALLOWED_HOSTS"
)
$deploymentSecrets = @{}
foreach ($name in $requiredDeploymentSecrets) {
$value = if ($envDict.ContainsKey($name)) { $envDict[$name] } else { [Environment]::GetEnvironmentVariable($name) }
if ([string]::IsNullOrWhiteSpace($value)) {
throw "$name is required for a NAS deployment package."
}
if ($value.Contains("`r") -or $value.Contains("`n")) {
throw "$name must be a single-line value."
}
$deploymentSecrets[$name] = $value
}
if ([Text.Encoding]::UTF8.GetByteCount($deploymentSecrets["D3RO_API_TOKEN"]) -lt 32) {
throw "D3RO_API_TOKEN must contain at least 32 UTF-8 bytes."
}
$envContent = @"
PORT=$Port
DATA_PATH=./data
JWT_SECRET=D3ROVoice_Super_Secure_Secret_Key_2026_Key!
JWT_SECRET=$($deploymentSecrets["JWT_SECRET"])
JWT_ISSUER=$($deploymentSecrets["JWT_ISSUER"])
JWT_AUDIENCE=$($deploymentSecrets["JWT_AUDIENCE"])
ADMIN_BOOTSTRAP_TOKEN=$($deploymentSecrets["ADMIN_BOOTSTRAP_TOKEN"])
D3RO_API_TOKEN=$($deploymentSecrets["D3RO_API_TOKEN"])
ADMIN_SESSION_SECRET=$($deploymentSecrets["ADMIN_SESSION_SECRET"])
API_SERVER_URL=$($deploymentSecrets["API_SERVER_URL"])
CORS_ALLOWED_ORIGINS=$($deploymentSecrets["CORS_ALLOWED_ORIGINS"])
ALLOWED_HOSTS=$($deploymentSecrets["ALLOWED_HOSTS"])
TZ=Asia/Seoul
"@
Set-Content -Path (Join-Path $nasPkgDir ".env") -Value $envContent -Encoding UTF8
}
$deploymentEnvPath = Join-Path $nasPkgDir ".env"
Set-Content -Path $deploymentEnvPath -Value $envContent -Encoding UTF8
$deploymentEnvAcl = Get-Acl -LiteralPath $deploymentEnvPath
$deploymentEnvAcl.SetAccessRuleProtection($true, $false)
$deploymentEnvAcl.AddAccessRule([System.Security.AccessControl.FileSystemAccessRule]::new(
[System.Security.Principal.WindowsIdentity]::GetCurrent().Name,
[System.Security.AccessControl.FileSystemRights]::FullControl,
[System.Security.AccessControl.AccessControlType]::Allow
))
Set-Acl -LiteralPath $deploymentEnvPath -AclObject $deploymentEnvAcl
# Copy control script
Copy-Item (Join-Path $PSScriptRoot "nas-control.sh") (Join-Path $nasPkgDir "nas-control.sh") -Force -ErrorAction SilentlyContinue