name: Update RDPWrapOffsetFinder tools # Run manually to pull a new version of llccd/RDPWrapOffsetFinder into tools/. # The workflow commits the updated binaries and opens a pull request. on: workflow_dispatch: inputs: tag: description: "llccd release tag to fetch (leave blank for latest)" required: false default: "" env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true permissions: contents: write pull-requests: write jobs: update: runs-on: windows-2022 steps: - name: Checkout repository uses: actions/checkout@v6 - name: Download and extract RDPWrapOffsetFinder id: fetch shell: pwsh run: | $tag = "${{ github.event.inputs.tag }}" if ($tag -eq "") { $apiUrl = "https://api.github.com/repos/llccd/RDPWrapOffsetFinder/releases/latest" } else { $apiUrl = "https://api.github.com/repos/llccd/RDPWrapOffsetFinder/releases/tags/$tag" } $release = Invoke-RestMethod -Uri $apiUrl -Headers @{ "User-Agent" = "rdpwrap-ci" } $version = $release.tag_name Write-Host "Fetching version $version" $asset = $release.assets | Where-Object { $_.name -like "*.zip" } | Select-Object -First 1 if (-not $asset) { throw "No zip asset found in release $version" } Invoke-WebRequest -Uri $asset.browser_download_url -OutFile finder.zip -UseBasicParsing Expand-Archive -Path finder.zip -DestinationPath .\finder -Force Write-Host "Zip contents:" Get-ChildItem -Recurse .\finder | Select-Object FullName, Length # The llccd zip uses "64bit/" and "32bit/" subfolder names. # We pick the symbol-enabled exe (not the _nosymbol variant) from each arch folder. function Get-Bin($filter, $archHint) { $hits = Get-ChildItem -Recurse .\finder -Filter $filter | Where-Object { $_.FullName -match $archHint } | Where-Object { $_.Name -notmatch "nosymbol" } return ($hits | Select-Object -First 1) } $x64exe = Get-Bin "RDPWrapOffsetFinder*.exe" "64bit" $x64dll = Get-Bin "Zydis*.dll" "64bit" $x86exe = Get-Bin "RDPWrapOffsetFinder*.exe" "32bit" $x86dll = Get-Bin "Zydis*.dll" "32bit" # Fall back to x64 if the release only ships one arch if (-not $x86exe) { $x86exe = $x64exe } if (-not $x86dll) { $x86dll = $x64dll } if (-not $x64exe) { throw "Could not locate x64 exe" } if (-not $x64dll) { throw "Could not locate x64 Zydis.dll" } New-Item -ItemType Directory -Path tools\RDPWrapOffsetFinder\x64 -Force | Out-Null New-Item -ItemType Directory -Path tools\RDPWrapOffsetFinder\x86 -Force | Out-Null Copy-Item $x64exe.FullName tools\RDPWrapOffsetFinder\x64\RDPWrapOffsetFinder.exe -Force Copy-Item $x64dll.FullName tools\RDPWrapOffsetFinder\x64\Zydis.dll -Force Copy-Item $x86exe.FullName tools\RDPWrapOffsetFinder\x86\RDPWrapOffsetFinder.exe -Force Copy-Item $x86dll.FullName tools\RDPWrapOffsetFinder\x86\Zydis.dll -Force Set-Content -Path tools\RDPWrapOffsetFinder\VERSION -Value $version Write-Host "Staged tools:" Get-ChildItem -Recurse tools\RDPWrapOffsetFinder | Select-Object FullName, Length echo "version=$version" >> $env:GITHUB_OUTPUT - name: Commit and push to a new branch id: push shell: pwsh run: | $version = "${{ steps.fetch.outputs.version }}" $branch = "chore/update-finder-tools-$version" git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git checkout -b $branch git add tools/RDPWrapOffsetFinder if ((git diff --cached --name-only) -eq "") { Write-Host "No changes - tools already up to date" exit 0 } git commit -m "chore: update RDPWrapOffsetFinder tools to $version" git push origin $branch echo "branch=$branch" >> $env:GITHUB_OUTPUT - name: Create pull request if: steps.push.outputs.branch != '' shell: pwsh run: | $version = "${{ steps.fetch.outputs.version }}" $branch = "${{ steps.push.outputs.branch }}" gh pr create ` --title "chore: update RDPWrapOffsetFinder tools to $version" ` --body "Automated update of the committed RDPWrapOffsetFinder binaries in ``tools/RDPWrapOffsetFinder/`` to upstream release $version. Triggered manually via the **Update RDPWrapOffsetFinder tools** workflow. Merge to include the updated binaries in the next INI release." ` --base master ` --head $branch env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}