test
This commit is contained in:
98
.github/workflows/dad-mehrPublish.yaml
vendored
98
.github/workflows/dad-mehrPublish.yaml
vendored
@@ -1,75 +1,61 @@
|
||||
name: Deploy ASP.NET via WebDAV
|
||||
name: Build & Deploy .NET App to IIS
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- WorkshopClassifiedPlan # برنچ مورد نظر تو
|
||||
- WorskhopClassifiedPlan
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
# --- 1. Checkout code
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
# ===================== CHECKOUT CODE =====================
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# --- 2. Setup .NET SDK
|
||||
- name: Setup .NET SDK
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '8.0.x'
|
||||
# ===================== SETUP .NET SDK =====================
|
||||
- name: Setup .NET SDK
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '8.0.x'
|
||||
|
||||
# --- 3. Restore dependencies
|
||||
- name: Restore dependencies
|
||||
run: dotnet restore
|
||||
# ===================== RESTORE DEPENDENCIES =====================
|
||||
- name: Restore dependencies
|
||||
run: dotnet restore
|
||||
|
||||
# --- 4. Build
|
||||
- name: Build
|
||||
run: dotnet build --configuration Release
|
||||
# ===================== BUILD PROJECT =====================
|
||||
- name: Build Project
|
||||
run: dotnet build --configuration Release
|
||||
|
||||
# --- 5. Publish
|
||||
- name: Publish project
|
||||
run: dotnet publish --configuration Release --output ./publish --no-build
|
||||
# ===================== PUBLISH PROJECT =====================
|
||||
- name: Publish Project
|
||||
shell: powershell
|
||||
run: |
|
||||
$publishFolder = Join-Path $env:GITHUB_WORKSPACE "publish"
|
||||
Write-Host "Publishing to folder: $publishFolder"
|
||||
dotnet publish --configuration Release --output "$publishFolder" --no-build /p:EnvironmentName=Production
|
||||
|
||||
# --- 6. Deploy via WebDAV
|
||||
- name: Upload files via WebDAV
|
||||
shell: powershell
|
||||
env:
|
||||
WEBDAV_URL: ${{ secrets.WEBDAV_URL }} # مثل: https://example.com/dad-mehr/
|
||||
WEBDAV_USER: ${{ secrets.WEBDAV_USER }}
|
||||
WEBDAV_PASS: ${{ secrets.WEBDAV_PASS }}
|
||||
IIS_SITE_NAME: dad-mehr
|
||||
run: |
|
||||
$ErrorActionPreference = "Stop"
|
||||
$publishFolder = Resolve-Path "./publish"
|
||||
$siteName = "${{ env.IIS_SITE_NAME }}"
|
||||
Write-Host "📦 Publish folder: $publishFolder"
|
||||
|
||||
# --- Stop IIS site remotely (اختیاری)
|
||||
Write-Host "🛑 Stopping IIS site $siteName ..."
|
||||
try {
|
||||
Invoke-WebRequest -Uri "${{ env.WEBDAV_URL }}/appcmd_stop.txt" -Method GET -ErrorAction Stop | Out-Null
|
||||
} catch { Write-Host "⚠️ Could not stop IIS remotely, continuing..." }
|
||||
# ===================== DEPLOY TO IIS SERVER =====================
|
||||
- name: Deploy to IIS via SSH
|
||||
uses: appleboy/ssh-action@v1.0.0
|
||||
with:
|
||||
host: ${{ secrets.REMOTE_HOST }}
|
||||
username: ${{ secrets.REMOTE_USER }}
|
||||
password: ${{ secrets.REMOTE_PASS }}
|
||||
script: |
|
||||
$siteName = "dad-mehr"
|
||||
$source = "D:\a\${{ github.event.repository.name }}\${{ github.event.repository.name }}\publish"
|
||||
$destination = "C:\inetpub\wwwroot\dad-mehr"
|
||||
|
||||
# --- Upload files using WebDAV
|
||||
$creds = New-Object System.Net.NetworkCredential("${{ env.WEBDAV_USER }}", "${{ env.WEBDAV_PASS }}")
|
||||
$webclient = New-Object System.Net.WebClient
|
||||
$webclient.Credentials = $creds
|
||||
Write-Host "Stopping IIS site $siteName ..."
|
||||
& "C:\Windows\System32\inetsrv\appcmd.exe" stop site $siteName | Out-Null
|
||||
|
||||
Get-ChildItem $publishFolder -Recurse | ForEach-Object {
|
||||
if (-not $_.PSIsContainer) {
|
||||
$relativePath = $_.FullName.Substring($publishFolder.Path.Length + 1).Replace("\", "/")
|
||||
$destUrl = "${{ env.WEBDAV_URL }}$relativePath"
|
||||
Write-Host "➡️ Uploading $relativePath ..."
|
||||
$webclient.UploadFile($destUrl, "PUT", $_.FullName)
|
||||
}
|
||||
}
|
||||
Write-Host "Copying files from $source to $destination ..."
|
||||
robocopy $source $destination /E /XO /R:2 /W:3 /NFL /NDL /NP
|
||||
|
||||
# --- Start IIS site remotely (اختیاری)
|
||||
Write-Host "🚀 Starting IIS site $siteName ..."
|
||||
try {
|
||||
Invoke-WebRequest -Uri "${{ env.WEBDAV_URL }}/appcmd_start.txt" -Method GET -ErrorAction Stop | Out-Null
|
||||
} catch { Write-Host "⚠️ Could not start IIS remotely, continuing..." }
|
||||
Write-Host "Starting IIS site $siteName ..."
|
||||
& "C:\Windows\System32\inetsrv\appcmd.exe" start site $siteName | Out-Null
|
||||
|
||||
Write-Host "✅ Deployment completed successfully."
|
||||
|
||||
Write-Host "✅ Deployment completed successfully."
|
||||
|
||||
Reference in New Issue
Block a user