use PSExec #156
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Windows Nightly Run | |
on: [push] | |
jobs: | |
start-ec2-instance: | |
uses: ./.github/workflows/provision-runner.yml | |
with: | |
ec2-image-id: ami-01fa2492704e48175 | |
ec2-instance-type: t2.micro | |
security-group-id: sg-0a3e6b53e86d0e69d | |
subnet-id: subnet-06113672589e7e836 | |
ec2-os-type: windows | |
secrets: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
github-token: ${{ secrets.GH_RUNNER_API_TOKEN }} | |
nonadmin-password: ${{ secrets.NONADMIN_PASSWORD }} | |
run-tests: | |
needs: start-ec2-instance | |
runs-on: ${{ needs.start-ec2-instance.outputs.instance_label }} | |
steps: | |
# - name: Write Test Script | |
# shell: powershell | |
# run: | | |
# # Ensure the directory exists | |
# $runnerDir = "C:\Users\nonadmin\Documents\actions-runner\work" | |
# if (-not (Test-Path -Path $runnerDir)) { | |
# New-Item -Path $runnerDir -ItemType Directory -Force | |
# } | |
# | |
# # Create the test script | |
# $scriptContent = @" | |
# # Redirect output directly in the script | |
# code --version >> "C:\Users\nonadmin\Documents\actions-runner\work\run-tests-output.log" 2>> "C:\Users\nonadmin\Documents\actions-runner\work\run-tests-error.log" | |
# node --version >> "C:\Users\nonadmin\Documents\actions-runner\work\run-tests-output.log" 2>> "C:\Users\nonadmin\Documents\actions-runner\work\run-tests-error.log" | |
# "@ | |
# | |
# $scriptPath = "$runnerDir\run-tests.ps1" | |
# $scriptContent | Out-File -FilePath $scriptPath -Encoding utf8 -Force | |
- name: Run Test Script with PsExec | |
shell: powershell | |
run: | | |
# Define paths | |
$psExecUrl = "https://download.sysinternals.com/files/PSTools.zip" | |
$toolsDir = "C:\tools" | |
$psExecPath = "$toolsDir\PsExec64.exe" | |
$logDir = "C:\Users\nonadmin\Documents\actions-runner\work" | |
$logPathOut = "$logDir\run-tests-output.log" | |
$logPathErr = "$logDir\run-tests-error.log" | |
# Step 1: Install PsExec | |
Write-Output "Downloading and installing PsExec..." | |
if (Test-Path -Path $toolsDir) { Remove-Item -Recurse -Force $toolsDir } | |
New-Item -Path $toolsDir -ItemType Directory -Force | |
Invoke-WebRequest -Uri $psExecUrl -OutFile "$toolsDir\PSTools.zip" | |
Expand-Archive -Path "$toolsDir\PSTools.zip" -DestinationPath $toolsDir -Force | |
Write-Output "PsExec installed successfully." | |
# Step 2: Ensure the log directory exists | |
Write-Output "Ensuring log directory exists: $logDir" | |
if (-Not (Test-Path -Path $logDir)) { | |
New-Item -Path $logDir -ItemType Directory -Force | |
} | |
# Step 3: Execute the command using PsExec | |
Write-Output "Executing PsExec as nonadmin to run 'code --version'..." | |
& $psExecPath -accepteula -nobanner -u nonadmin -p "pass123!" powershell.exe ` | |
-Command "code --version > '$logPathOut' 2> '$logPathErr'" | |
# Step 4: Check if output log file exists | |
if (-Not (Test-Path -Path $logPathOut)) { | |
Write-Output "Log file does not exist: $logPathOut" | |
Write-Output "Check $logPathErr for any errors." | |
exit 1 | |
} | |
# Step 5: Output log files to GitHub Actions | |
Write-Output "--- Run Output ---" | |
Get-Content -Path $logPathOut | |
Write-Output "--- Run Error ---" | |
Get-Content -Path $logPathErr | |
# stop-ec2-instance: | |
# needs: [ start-ec2-instance, run-tests ] | |
# if: always() | |
# uses: ./.github/workflows/remove-runner.yml | |
# with: | |
# ec2-instance-id: ${{ needs.start-ec2-instance.outputs.ec2-instance-id }} | |
# ec2-runner-label: ${{ needs.start-ec2-instance.outputs.instance_label }} | |
# secrets: | |
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
# github-token: ${{ secrets.GH_RUNNER_API_TOKEN }} |