Skip to content

use PSExec

use PSExec #156

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 }}