Jelajahi Sumber

chore: add voc profit deployment script

gangvy 1 bulan lalu
induk
melakukan
2ee4b8eff1
1 mengubah file dengan 85 tambahan dan 0 penghapusan
  1. 85 0
      deploy.ps1

+ 85 - 0
deploy.ps1

@@ -0,0 +1,85 @@
+[CmdletBinding()]
+param(
+  [switch]$SkipBuild,
+  [switch]$SkipCdnRefresh
+)
+
+$ErrorActionPreference = 'Stop'
+Set-StrictMode -Version Latest
+
+$projectName = 'voc-profit'
+$basePath = "/dev/$projectName/"
+$bucketPath = "obs://nova-cloud/dev/$projectName"
+$publicUrl = "https://app.fmode.cn$basePath"
+$clientPath = Join-Path $PSScriptRoot 'client'
+$distPath = Join-Path $clientPath 'dist\voc-profit-web\browser'
+$obsutil = 'E:\obsutil_windows_amd64_5.7.9\obsutil.exe'
+$hcloud = 'E:\huaweicloud-cli-windows-amd64\hcloud.exe'
+
+function Get-RequiredEnvironmentVariable {
+  param([Parameter(Mandatory)][string]$Name)
+
+  $value = [Environment]::GetEnvironmentVariable($Name)
+  if ([string]::IsNullOrWhiteSpace($value)) {
+    throw "Missing required environment variable: $Name"
+  }
+  return $value
+}
+
+function Invoke-CheckedCommand {
+  param(
+    [Parameter(Mandatory)][string]$FilePath,
+    [Parameter(Mandatory)][string[]]$CommandArguments
+  )
+
+  & $FilePath @CommandArguments
+  if ($LASTEXITCODE -ne 0) {
+    throw "Command failed with exit code ${LASTEXITCODE}: $FilePath"
+  }
+}
+
+if (-not (Test-Path -LiteralPath $obsutil -PathType Leaf)) {
+  throw "obsutil was not found: $obsutil"
+}
+if (-not $SkipCdnRefresh -and -not (Test-Path -LiteralPath $hcloud -PathType Leaf)) {
+  throw "hcloud was not found: $hcloud"
+}
+
+$obsAccessKey = Get-RequiredEnvironmentVariable 'VOC_PROFIT_OBS_ACCESS_KEY'
+$obsSecretKey = Get-RequiredEnvironmentVariable 'VOC_PROFIT_OBS_SECRET_KEY'
+$obsEndpoint = if ($env:VOC_PROFIT_OBS_ENDPOINT) { $env:VOC_PROFIT_OBS_ENDPOINT } else { 'obs.cn-south-1.myhuaweicloud.com' }
+
+Push-Location $clientPath
+try {
+  if (-not $SkipBuild) {
+    Invoke-CheckedCommand -FilePath 'npm.cmd' -CommandArguments @('run', 'build', '--', "--base-href=$basePath")
+  }
+
+  if (-not (Test-Path -LiteralPath (Join-Path $distPath 'index.html') -PathType Leaf)) {
+    throw "Build output is missing: $distPath\index.html"
+  }
+
+  $obsAuth = @("-i=$obsAccessKey", "-k=$obsSecretKey", "-e=$obsEndpoint")
+  Invoke-CheckedCommand -FilePath $obsutil -CommandArguments (@('sync', $distPath, $bucketPath, '-acl=public-read') + $obsAuth)
+  Invoke-CheckedCommand -FilePath $obsutil -CommandArguments (@('chattri', $bucketPath, '-r', '-f', '-acl=public-read') + $obsAuth)
+
+  if (-not $SkipCdnRefresh) {
+    $cdnAccessKey = Get-RequiredEnvironmentVariable 'VOC_PROFIT_CDN_ACCESS_KEY'
+    $cdnSecretKey = Get-RequiredEnvironmentVariable 'VOC_PROFIT_CDN_SECRET_KEY'
+    $cdnRegion = if ($env:VOC_PROFIT_CDN_REGION) { $env:VOC_PROFIT_CDN_REGION } else { 'cn-north-1' }
+    Invoke-CheckedCommand -FilePath $hcloud -CommandArguments @(
+      'CDN',
+      'CreateRefreshTasks/v2',
+      "--cli-region=$cdnRegion",
+      "--refresh_task.urls.1=$publicUrl",
+      '--refresh_task.type=directory',
+      "--cli-access-key=$cdnAccessKey",
+      "--cli-secret-key=$cdnSecretKey"
+    )
+  }
+
+  Write-Host "Deployment completed: $publicUrl" -ForegroundColor Green
+}
+finally {
+  Pop-Location
+}