forked from 77media/video-flow
102 lines
3.1 KiB
PowerShell
102 lines
3.1 KiB
PowerShell
# Windows PowerShell deployment script
|
|
|
|
$BRANCH_NAME = "dev"
|
|
|
|
# Project name
|
|
$PROJECT_NAME = "video-flow-$BRANCH_NAME-frontend"
|
|
|
|
# Log file path
|
|
$LOGFILE = "build_and_copy.log"
|
|
|
|
# Record start time
|
|
$startMessage = "Build process started at $(Get-Date)"
|
|
$startMessage | Tee-Object -FilePath $LOGFILE
|
|
|
|
# Get current branch name
|
|
$current_branch = git rev-parse --abbrev-ref HEAD
|
|
|
|
# Check if on dev branch, working directory is clean, and in sync with remote
|
|
if ($current_branch -ne $BRANCH_NAME) {
|
|
Write-Host "Current branch is not dev branch" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
# Check if working directory is clean
|
|
$gitStatus = git status --porcelain
|
|
if ($gitStatus) {
|
|
Write-Host "Working directory is not clean" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
# Check if local branch is in sync with remote
|
|
$localHead = git rev-parse HEAD
|
|
$remoteHead = git rev-parse origin/$BRANCH_NAME
|
|
if ($localHead -ne $remoteHead) {
|
|
Write-Host "Local branch is not in sync with remote branch" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
# Check current branch and run corresponding build command
|
|
if ($current_branch -eq $BRANCH_NAME) {
|
|
$buildMessage = "On dev branch, building project..."
|
|
$buildMessage | Tee-Object -FilePath $LOGFILE -Append
|
|
$PROFILE_ENV = $BRANCH_NAME
|
|
|
|
# Install dependencies and build (production mode with development environment variables)
|
|
yarn install
|
|
$env:NODE_ENV = "production"
|
|
npx --yes env-cmd -f .env.development yarn build
|
|
|
|
# Prepare dist directory
|
|
if (Test-Path "dist") {
|
|
Remove-Item -Path "dist" -Recurse -Force
|
|
}
|
|
New-Item -ItemType Directory -Path "dist" -Force | Out-Null
|
|
|
|
if (Test-Path ".next\cache") {
|
|
Remove-Item -Path ".next\cache" -Recurse -Force
|
|
}
|
|
|
|
Copy-Item -Path ".next" -Destination "dist\.next" -Recurse -Force
|
|
Copy-Item -Path "public" -Destination "dist\public" -Recurse -Force
|
|
Copy-Item -Path "package.json" -Destination "dist\package.json" -Force
|
|
Copy-Item -Path "package-lock.json" -Destination "dist\package-lock.json" -Force
|
|
|
|
} else {
|
|
Write-Host "On non-dev branch ($current_branch), exiting" -ForegroundColor Yellow
|
|
exit 1
|
|
}
|
|
|
|
# Create tar package
|
|
$tarFileName = "$PROJECT_NAME-$PROFILE_ENV.tar.gz"
|
|
tar -czvf $tarFileName dist
|
|
|
|
# Record end time
|
|
$endMessage = "Build process completed at $(Get-Date)"
|
|
$endMessage | Tee-Object -FilePath $LOGFILE -Append
|
|
|
|
# Upload to nexus
|
|
$uploadMessage = "upload to nexus at $(Get-Date)"
|
|
$uploadMessage | Tee-Object -FilePath $LOGFILE -Append
|
|
|
|
$nexusUrl = "https://repo.qikongjian.com/repository/frontend-tar-files/$tarFileName"
|
|
$credentials = 'admin:YZ9Gq6=8\*G|?:,'
|
|
$encodedCredentials = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($credentials))
|
|
|
|
try {
|
|
Invoke-WebRequest -Uri $nexusUrl -Method Put -InFile $tarFileName -Headers @{
|
|
Authorization = "Basic $encodedCredentials"
|
|
}
|
|
Write-Host "Upload successful" -ForegroundColor Green
|
|
} catch {
|
|
Write-Host "Upload failed: $_" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
# Clean up build files
|
|
Remove-Item -Path "dist" -Recurse -Force
|
|
Remove-Item -Path $tarFileName -Force
|
|
|
|
Write-Host "Deployment completed" -ForegroundColor Green
|
|
|