From 38f0fb8cfdb5d6da0dbac7c9b016e465084086c9 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 12 Sep 2025 15:39:30 +0100 Subject: [PATCH 01/22] Test --- .github/workflows/deploy.yml | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..3f33998 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,56 @@ +name: CI/CD Deploy to Windows VM + +on: + push: + branches: + - main # deploy to PROD + - TestDeployment # deploy to TEST + +jobs: + build-and-deploy: + runs-on: windows-latest + + steps: + # 1. Checkout + - name: Checkout code + uses: actions/checkout@v4 + + # 2. Setup .NET + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + + # 3. Build & publish app + - name: Publish app + run: dotnet publish -c Release -o ./publish + + # 4. Decide environment + - name: Set environment variables + id: set-env + run: | + if ("${{ github.ref_name }}" -eq "test") { + echo "VM_HOST=${{ secrets.TEST_VM_HOST }}" >> $env:GITHUB_ENV + echo "VM_USER=${{ secrets.TEST_VM_USER }}" >> $env:GITHUB_ENV + echo "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" >> $env:GITHUB_ENV + } else { + echo "VM_HOST=${{ secrets.PROD_VM_HOST }}" >> $env:GITHUB_ENV + echo "VM_USER=${{ secrets.PROD_VM_USER }}" >> $env:GITHUB_ENV + echo "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" >> $env:GITHUB_ENV + } + + # 5. Copy files to VM (using PowerShell remoting) + - name: Copy files + run: | + $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force + $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) + $session = New-PSSession -ComputerName $env:VM_HOST -Credential $creds -Authentication Basic + Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\myapp" -Recurse -ToSession $session + Remove-PSSession $session + + # 6. Restart IIS + - name: Restart IIS + run: | + $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force + $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) + Invoke-Command -ComputerName $env:VM_HOST -Credential $creds -ScriptBlock { iisreset } From 773cd37c862789c49d79ba2b03dba919a01e9803 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 12 Sep 2025 16:02:58 +0100 Subject: [PATCH 02/22] yml fle update --- .github/workflows/deploy.yml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3f33998..69d9357 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,8 +11,8 @@ jobs: runs-on: windows-latest steps: - # 1. Checkout - - name: Checkout code + # 1. Checkout code + - name: Checkout uses: actions/checkout@v4 # 2. Setup .NET @@ -25,22 +25,25 @@ jobs: - name: Publish app run: dotnet publish -c Release -o ./publish - # 4. Decide environment + # 4. Set environment variables depending on branch - name: Set environment variables - id: set-env + shell: pwsh run: | if ("${{ github.ref_name }}" -eq "test") { - echo "VM_HOST=${{ secrets.TEST_VM_HOST }}" >> $env:GITHUB_ENV - echo "VM_USER=${{ secrets.TEST_VM_USER }}" >> $env:GITHUB_ENV - echo "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" >> $env:GITHUB_ENV + Write-Host "Deploying to TEST VM" + Add-Content -Path $env:GITHUB_ENV -Value "VM_HOST=${{ secrets.TEST_VM_HOST }}" + Add-Content -Path $env:GITHUB_ENV -Value "VM_USER=${{ secrets.TEST_VM_USER }}" + Add-Content -Path $env:GITHUB_ENV -Value "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" } else { - echo "VM_HOST=${{ secrets.PROD_VM_HOST }}" >> $env:GITHUB_ENV - echo "VM_USER=${{ secrets.PROD_VM_USER }}" >> $env:GITHUB_ENV - echo "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" >> $env:GITHUB_ENV + Write-Host "Deploying to PROD VM" + Add-Content -Path $env:GITHUB_ENV -Value "VM_HOST=${{ secrets.PROD_VM_HOST }}" + Add-Content -Path $env:GITHUB_ENV -Value "VM_USER=${{ secrets.PROD_VM_USER }}" + Add-Content -Path $env:GITHUB_ENV -Value "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" } - # 5. Copy files to VM (using PowerShell remoting) + # 5. Copy files to VM (via PowerShell Remoting / WinRM) - name: Copy files + shell: pwsh run: | $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) @@ -50,6 +53,7 @@ jobs: # 6. Restart IIS - name: Restart IIS + shell: pwsh run: | $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) From 4461ecc0357dce12413f975754ecfd059ce1e035 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 12 Sep 2025 16:17:52 +0100 Subject: [PATCH 03/22] test --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 69d9357..951036c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST + - TestDeployment # deploy to TestDeployment jobs: build-and-deploy: From 5c34a3f6f4272444a94f6f08d9c412f6d4d4e69c Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 12 Sep 2025 16:40:30 +0100 Subject: [PATCH 04/22] update yml --- .github/workflows/deploy.yml | 38 +++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 951036c..d0d7fef 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,14 +4,14 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TestDeployment + - TestDeployment # deploy to TEST jobs: build-and-deploy: runs-on: windows-latest steps: - # 1. Checkout code + # 1. Checkout - name: Checkout uses: actions/checkout@v4 @@ -21,27 +21,37 @@ jobs: with: dotnet-version: '8.0.x' - # 3. Build & publish app + # 3. Build & publish - name: Publish app run: dotnet publish -c Release -o ./publish - # 4. Set environment variables depending on branch + # 4. Set environment variables correctly - name: Set environment variables shell: pwsh run: | if ("${{ github.ref_name }}" -eq "test") { - Write-Host "Deploying to TEST VM" - Add-Content -Path $env:GITHUB_ENV -Value "VM_HOST=${{ secrets.TEST_VM_HOST }}" - Add-Content -Path $env:GITHUB_ENV -Value "VM_USER=${{ secrets.TEST_VM_USER }}" - Add-Content -Path $env:GITHUB_ENV -Value "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" + "VM_HOST=${{ secrets.TEST_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_USER=${{ secrets.TEST_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append } else { - Write-Host "Deploying to PROD VM" - Add-Content -Path $env:GITHUB_ENV -Value "VM_HOST=${{ secrets.PROD_VM_HOST }}" - Add-Content -Path $env:GITHUB_ENV -Value "VM_USER=${{ secrets.PROD_VM_USER }}" - Add-Content -Path $env:GITHUB_ENV -Value "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" + "VM_HOST=${{ secrets.PROD_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_USER=${{ secrets.PROD_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append } - # 5. Copy files to VM (via PowerShell Remoting / WinRM) + # 5. Debug check (just to confirm secrets are being set — safe version) + - name: Debug env + shell: pwsh + run: | + Write-Host "VM_HOST = $env:VM_HOST" + Write-Host "VM_USER = $env:VM_USER" + if ($env:VM_PASSWORD) { + Write-Host "VM_PASSWORD is set (length = $($env:VM_PASSWORD.Length))" + } else { + Write-Host "VM_PASSWORD is EMPTY!" + } + + # 6. Copy files to VM - name: Copy files shell: pwsh run: | @@ -51,7 +61,7 @@ jobs: Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\myapp" -Recurse -ToSession $session Remove-PSSession $session - # 6. Restart IIS + # 7. Restart IIS - name: Restart IIS shell: pwsh run: | From 88b5da24fd31cbcce13cf53e7f924326a9e590c6 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 12 Sep 2025 16:48:41 +0100 Subject: [PATCH 05/22] yml update --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d0d7fef..b884b0b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -29,7 +29,7 @@ jobs: - name: Set environment variables shell: pwsh run: | - if ("${{ github.ref_name }}" -eq "test") { + if ("${{ github.ref_name }}" -eq "TestDeployment") { "VM_HOST=${{ secrets.TEST_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_USER=${{ secrets.TEST_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append From d3a9d5fecca6c058fbe33e70f6fb80fdbc9a4b09 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 15:38:34 +0000 Subject: [PATCH 06/22] CICD test deployment --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b884b0b..9abd363 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST + - TestDeployment # deploy to TEST ENV jobs: build-and-deploy: From d49c0027f6a29da17c4cb1e81246f96171846503 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 15:58:48 +0000 Subject: [PATCH 07/22] testCICD --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9abd363..9896a55 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -58,7 +58,7 @@ jobs: $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) $session = New-PSSession -ComputerName $env:VM_HOST -Credential $creds -Authentication Basic - Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\myapp" -Recurse -ToSession $session + Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session Remove-PSSession $session # 7. Restart IIS From 181a4bdc75b60ea962cfe0abe5557a51ccdece04 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 16:31:38 +0000 Subject: [PATCH 08/22] CICD test dep --- .github/workflows/deploy.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9896a55..da534c7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -55,9 +55,9 @@ jobs: - name: Copy files shell: pwsh run: | - $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force - $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) - $session = New-PSSession -ComputerName $env:VM_HOST -Credential $creds -Authentication Basic + $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force + $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) + $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -Credential $creds Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session Remove-PSSession $session From c62c49f32a079be9849c2805fd8f640e53255649 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 16:33:55 +0000 Subject: [PATCH 09/22] CICD-Dep --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index da534c7..2d15cb8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST ENV + - TestDeployment # deploy to TEST ENV V1.0 jobs: build-and-deploy: From 708c97d02d948b1b08e90185911515012d96d036 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 16:38:51 +0000 Subject: [PATCH 10/22] Test dep-CICD --- .github/workflows/deploy.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2d15cb8..9896a55 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST ENV V1.0 + - TestDeployment # deploy to TEST ENV jobs: build-and-deploy: @@ -55,9 +55,9 @@ jobs: - name: Copy files shell: pwsh run: | - $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force - $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) - $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -Credential $creds + $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force + $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) + $session = New-PSSession -ComputerName $env:VM_HOST -Credential $creds -Authentication Basic Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session Remove-PSSession $session From 5c1f26ab2fe074a944ca654c6df2226a09393440 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 16:43:04 +0000 Subject: [PATCH 11/22] Test-CICD --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9896a55..4a2b756 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -57,7 +57,7 @@ jobs: run: | $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) - $session = New-PSSession -ComputerName $env:VM_HOST -Credential $creds -Authentication Basic + $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -Credential $creds Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session Remove-PSSession $session From 1469cf8c5b6b92f0f285ca738ea3d3eac5f5a65c Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 16:48:21 +0000 Subject: [PATCH 12/22] Test-CICD --- .github/workflows/deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4a2b756..b72f225 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -57,7 +57,9 @@ jobs: run: | $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) - $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -Credential $creds + #Ignore certificate issues + $opts = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck + $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -SessionOption $opts -Credential $creds Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session Remove-PSSession $session From 88fad422d9810d58f9184afec54b329485154205 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 17:31:09 +0000 Subject: [PATCH 13/22] CICD-test --- .github/workflows/deploy.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b72f225..8ee926b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -55,6 +55,8 @@ jobs: - name: Copy files shell: pwsh run: | + # Allow connecting to remote host + Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value $env:VM_HOST -Force $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) #Ignore certificate issues From 201e874008b0af87c5305a0dc083bcd072de4f52 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 19:58:03 +0000 Subject: [PATCH 14/22] test-CICD --- .github/workflows/deploy.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 8ee926b..e30c84e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -69,6 +69,9 @@ jobs: - name: Restart IIS shell: pwsh run: | + Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value $env:VM_HOST -Force $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) - Invoke-Command -ComputerName $env:VM_HOST -Credential $creds -ScriptBlock { iisreset } + $opts = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck + Invoke-Command -ComputerName $env:VM_HOST -UseSSL -SessionOption $opts -Credential $creds -ScriptBlock {iisreset} + From 5ce1f90242570c89835021c13fb85ae73cb3cd54 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 20:06:20 +0000 Subject: [PATCH 15/22] TEST-CICD --- .github/workflows/deploy.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e30c84e..ac05467 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -62,6 +62,12 @@ jobs: #Ignore certificate issues $opts = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -SessionOption $opts -Credential $creds + # Clear old files on VM + Invoke-Command -Session $session -ScriptBlock + { + Remove-Item "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -Force -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Path "C:\inetpub\wwwroot\MigrationToolV1.0" -Force + } Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session Remove-PSSession $session From 22eb96103dc776682f4604af72ab7e834467bd81 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Thu, 27 Nov 2025 20:11:41 +0000 Subject: [PATCH 16/22] TEST-CICD --- .github/workflows/deploy.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ac05467..5c5b02a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -63,9 +63,8 @@ jobs: $opts = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -SessionOption $opts -Credential $creds # Clear old files on VM - Invoke-Command -Session $session -ScriptBlock - { - Remove-Item "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -Force -ErrorAction SilentlyContinue + Invoke-Command -Session $session -ScriptBlock { + Remove-Item "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Path "C:\inetpub\wwwroot\MigrationToolV1.0" -Force } Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session From 1efd15ba721a7c24878892b7a50b519a17d56482 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 28 Nov 2025 14:34:36 +0000 Subject: [PATCH 17/22] prod-CICD --- .github/workflows/deploy.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5c5b02a..baaf617 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST ENV + - TestDeployment # deploy to TEST ENV-PROD depl jobs: build-and-deploy: @@ -30,9 +30,9 @@ jobs: shell: pwsh run: | if ("${{ github.ref_name }}" -eq "TestDeployment") { - "VM_HOST=${{ secrets.TEST_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append - "VM_USER=${{ secrets.TEST_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append - "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_HOST=${{ secrets.PROD_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_USER=${{ secrets.PROD_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append } else { "VM_HOST=${{ secrets.PROD_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_USER=${{ secrets.PROD_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append From 4c6570f9da90328e27ac73eaad281494dbf19778 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 28 Nov 2025 15:14:33 +0000 Subject: [PATCH 18/22] prod-cicd2 --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index baaf617..3294641 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST ENV-PROD depl + - TestDeployment # deploy to TEST ENV-PROD deploy jobs: build-and-deploy: From d6f377500f28a6d34bdcec4ddbdf1632c0e8c516 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 28 Nov 2025 15:21:44 +0000 Subject: [PATCH 19/22] prod-cicd3 --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3294641..d343c4d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST ENV-PROD deploy + - TestDeployment # deploy to TEST ENV-PROD deployment jobs: build-and-deploy: From 27837d0b2c6979fb09d8d6abd0c93a3990900861 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 28 Nov 2025 15:33:06 +0000 Subject: [PATCH 20/22] prod-cicd4 --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d343c4d..5c66cb2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main # deploy to PROD - - TestDeployment # deploy to TEST ENV-PROD deployment + - TestDeployment # deploy to TEST ENV-PROD deployment1 jobs: build-and-deploy: From b6476ac95275b2d251258f3528c897febe92d157 Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 28 Nov 2025 16:15:35 +0000 Subject: [PATCH 21/22] cicd-manual trigger --- .github/workflows/deploy.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5c66cb2..69e5581 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,6 +1,7 @@ name: CI/CD Deploy to Windows VM on: + workflow_dispatch: # <-- enables manual run from GitHub UI push: branches: - main # deploy to PROD @@ -30,9 +31,9 @@ jobs: shell: pwsh run: | if ("${{ github.ref_name }}" -eq "TestDeployment") { - "VM_HOST=${{ secrets.PROD_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append - "VM_USER=${{ secrets.PROD_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append - "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_HOST=${{ secrets.TEST_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_USER=${{ secrets.TEST_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append + "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append } else { "VM_HOST=${{ secrets.PROD_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_USER=${{ secrets.PROD_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append From 0cb3bb5f488a8e20e95c36b9bb0d6acd9ccae30e Mon Sep 17 00:00:00 2001 From: Sarathlal Sarangadharan Date: Fri, 28 Nov 2025 16:21:23 +0000 Subject: [PATCH 22/22] manual trigger --- .github/workflows/deploy.yml | 56 ++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 69e5581..eb76837 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,14 +1,18 @@ -name: CI/CD Deploy to Windows VM +name: Manual Deploy to Windows VM on: - workflow_dispatch: # <-- enables manual run from GitHub UI - push: - branches: - - main # deploy to PROD - - TestDeployment # deploy to TEST ENV-PROD deployment1 + workflow_dispatch: + inputs: + environment: + type: choice + description: Select deployment environment + options: + - TEST + - PROD + required: true jobs: - build-and-deploy: + manual-deploy: runs-on: windows-latest steps: @@ -26,52 +30,41 @@ jobs: - name: Publish app run: dotnet publish -c Release -o ./publish - # 4. Set environment variables correctly - - name: Set environment variables + # 4. Set environment variables based on dropdown + - name: Configure environment variables shell: pwsh run: | - if ("${{ github.ref_name }}" -eq "TestDeployment") { + if ("${{ github.event.inputs.environment }}" -eq "TEST") { "VM_HOST=${{ secrets.TEST_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_USER=${{ secrets.TEST_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_PASSWORD=${{ secrets.TEST_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append - } else { + Write-Host "Deploying to TEST environment" + } + else { "VM_HOST=${{ secrets.PROD_VM_HOST }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_USER=${{ secrets.PROD_VM_USER }}" | Out-File -FilePath $env:GITHUB_ENV -Append "VM_PASSWORD=${{ secrets.PROD_VM_PASSWORD }}" | Out-File -FilePath $env:GITHUB_ENV -Append + Write-Host "Deploying to PROD environment" } - # 5. Debug check (just to confirm secrets are being set — safe version) - - name: Debug env - shell: pwsh - run: | - Write-Host "VM_HOST = $env:VM_HOST" - Write-Host "VM_USER = $env:VM_USER" - if ($env:VM_PASSWORD) { - Write-Host "VM_PASSWORD is set (length = $($env:VM_PASSWORD.Length))" - } else { - Write-Host "VM_PASSWORD is EMPTY!" - } - - # 6. Copy files to VM - - name: Copy files + # 5. Copy files to VM + - name: Copy files to VM shell: pwsh run: | - # Allow connecting to remote host Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value $env:VM_HOST -Force $securePassword = ConvertTo-SecureString $env:VM_PASSWORD -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) - #Ignore certificate issues $opts = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck $session = New-PSSession -ComputerName $env:VM_HOST -UseSSL -SessionOption $opts -Credential $creds - # Clear old files on VM Invoke-Command -Session $session -ScriptBlock { - Remove-Item "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -Force -ErrorAction SilentlyContinue - New-Item -ItemType Directory -Path "C:\inetpub\wwwroot\MigrationToolV1.0" -Force + Remove-Item "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -Force -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Path "C:\inetpub\wwwroot\MigrationToolV1.0" -Force } Copy-Item -Path "./publish/*" -Destination "C:\inetpub\wwwroot\MigrationToolV1.0" -Recurse -ToSession $session + Remove-PSSession $session - # 7. Restart IIS + # 6. Restart IIS - name: Restart IIS shell: pwsh run: | @@ -80,4 +73,3 @@ jobs: $creds = New-Object System.Management.Automation.PSCredential ($env:VM_USER, $securePassword) $opts = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck Invoke-Command -ComputerName $env:VM_HOST -UseSSL -SessionOption $opts -Credential $creds -ScriptBlock {iisreset} -