diff --git a/scripts/watch-tenantapi-forlinux.sh b/scripts/watch-tenantapi-forlinux.sh index 50987f3..58bb4de 100755 --- a/scripts/watch-tenantapi-forlinux.sh +++ b/scripts/watch-tenantapi-forlinux.sh @@ -5,7 +5,6 @@ set -euo pipefail trap 'echo "发生错误:${BASH_COMMAND}" >&2' ERR script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -repo_root="$(cd "${script_dir}/.." && pwd)" container_name="${CONTAINER_NAME:-takeout.api.tenant}" docker_network="${DOCKER_NETWORK:-web_apps}" @@ -16,6 +15,22 @@ nuget_volume="${NUGET_VOLUME:-takeout-nuget}" project_path="${PROJECT_PATH:-src/Api/TakeoutSaaS.TenantApi/TakeoutSaaS.TenantApi.csproj}" environment="${ASPNETCORE_ENVIRONMENT:-Development}" +repo_root="" +candidate_dir="${script_dir}" +for _ in 0 1 2 3 4 5; do + if [ -f "${candidate_dir}/${project_path}" ] || [ -f "${candidate_dir}/TakeoutSaaS.sln" ]; then + repo_root="${candidate_dir}" + break + fi + + candidate_dir="$(cd "${candidate_dir}/.." && pwd)" +done + +if [ -z "${repo_root}" ]; then + echo "未找到仓库根目录(缺少 ${project_path} 或 TakeoutSaaS.sln),请在 TenantApi 仓库中运行该脚本。" >&2 + exit 1 +fi + echo "工作目录:${repo_root}" echo "使用 SDK 镜像:${sdk_image}" echo "容器:${container_name} 端口:${host_port}:${container_port} 网络:${docker_network}" @@ -62,4 +77,3 @@ docker run -d --name "${container_name}" \ echo "已启动。查看日志:docker logs -f ${container_name}" echo "Swagger:http://localhost:${host_port}/api/docs (兼容入口 /swagger)" - diff --git a/scripts/watch-tenantapi.ps1 b/scripts/watch-tenantapi.ps1 index 4996ff8..240e7a9 100644 --- a/scripts/watch-tenantapi.ps1 +++ b/scripts/watch-tenantapi.ps1 @@ -12,7 +12,6 @@ trap { $ErrorActionPreference = 'Stop' $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path -$repoRoot = Split-Path -Parent $scriptDir $containerName = if ($env:CONTAINER_NAME) { $env:CONTAINER_NAME } else { 'takeout.api.tenant' } $dockerNetwork = if ($env:DOCKER_NETWORK) { $env:DOCKER_NETWORK } else { 'web_apps' } @@ -23,6 +22,42 @@ $nugetVolume = if ($env:NUGET_VOLUME) { $env:NUGET_VOLUME } else { 'takeout-nuge $projectPath = if ($env:PROJECT_PATH) { $env:PROJECT_PATH } else { 'src/Api/TakeoutSaaS.TenantApi/TakeoutSaaS.TenantApi.csproj' } $environment = if ($env:ASPNETCORE_ENVIRONMENT) { $env:ASPNETCORE_ENVIRONMENT } else { 'Development' } +function Resolve-RepoRoot { + param( + [Parameter(Mandatory = $true)] + [string]$startDir, + [Parameter(Mandatory = $true)] + [string]$projectPath + ) + + $normalizedProjectPath = $projectPath -replace '/', [System.IO.Path]::DirectorySeparatorChar + $current = $startDir + + for ($i = 0; $i -lt 6; $i++) { + if (Test-Path (Join-Path $current $normalizedProjectPath)) { + return $current + } + + if (Test-Path (Join-Path $current 'TakeoutSaaS.sln')) { + return $current + } + + $parent = Split-Path -Parent $current + if ([string]::IsNullOrWhiteSpace($parent) -or $parent -eq $current) { + break + } + + $current = $parent + } + + return $null +} + +$repoRoot = Resolve-RepoRoot -startDir $scriptDir -projectPath $projectPath +if (-not $repoRoot) { + throw "未找到仓库根目录(缺少 $projectPath 或 TakeoutSaaS.sln),请在 TenantApi 仓库中运行该脚本。" +} + Write-Host "工作目录:$repoRoot" Write-Host "使用 SDK 镜像:$sdkImage" Write-Host "容器:$containerName 端口:$hostPort`:$containerPort 网络:$dockerNetwork" @@ -70,4 +105,3 @@ docker run -d --name $containerName @runArgs ` Write-Host "已启动。查看日志:docker logs -f $containerName" Write-Host "Swagger:http://localhost:$hostPort/api/docs (兼容入口 /swagger)" -