diff --git a/.github/workflows/dad-mehrPublish.yaml b/.github/workflows/dad-mehrPublish.yaml index e0484d3e..7d1823bc 100644 --- a/.github/workflows/dad-mehrPublish.yaml +++ b/.github/workflows/dad-mehrPublish.yaml @@ -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."