This commit is contained in:
syntax24
2025-11-05 13:25:35 +03:30
parent 22973fe47b
commit 7386bd5750

View File

@@ -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."