Skip to content
name: Upstream pretest
on:
push:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
permissions:
contents: write
jobs:
enmr-PRs:
runs-on: windows-latest
outputs:
exec_list: ${{ steps.make_exec_list.outputs.exec_list }}
steps:
- name: git config
run: |
git config --global core.autocrlf false
# git config --global --add url.https://github.com/.insteadOf "git@github.com:"
# Get-Service ssh-agent
# Get-Service ssh-agent | Select StartType
# where.exe start-ssh-agent
# start-ssh-agent
# Write-Host "ssh:"
# where.exe ssh
# Write-Host "ssh-add:"
# where.exe ssh-add
# Write-Host '-----'
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
Start-Service -Name ssh-agent
git config --global core.sshCommand "'C:\\Windows\\System32\\OpenSSH\\ssh.exe'"
# Set Key File Variable:
New-Variable -Name Key -Value "$env:UserProfile\.ssh\id_rsa"
$ssh_key = '${{ secrets.SSH_KEY }}'
New-Item -ItemType Directory -Path (Split-Path $Key) | Out-Null
$ssh_key | Set-Content $Key
# Remove Inheritance:
Icacls $Key /c /t /Inheritance:d
# Set Ownership to Owner:
# Key's within $env:UserProfile:
Icacls $Key /c /t /Grant ${env:UserName}:F
# Key's outside of $env:UserProfile:
TakeOwn /F $Key
Icacls $Key /c /t /Grant:r ${env:UserName}:F
# Remove All Users, except for Owner:
Icacls $Key /c /t /Remove:g Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
# Verify:
Icacls $Key
Write-Host "Adding key $Key:"
ssh-add $Key
Write-Host '-----'
# Remove Variable:
Remove-Variable -Name Key
# - uses: webfactory/ssh-agent@v0.9.0
# with:
# ssh-private-key: ${{ secrets.SSH_KEY }}
- name: checkout
uses: actions/checkout@main
with:
sparse-checkout-cone-mode: false
sparse-checkout: |
.gitmodules
- name: make exec list
id: make_exec_list
run: |
$exec_list = @()
foreach ($subm_key in git config --file .gitmodules --name-only --get-regexp '^submodule\..+\.url$') {
$subm_url = git config --file .gitmodules --get $subm_key
Write-Host "URL: $subm_url"
git ls-remote $subm_url
$pr_nums = @()
foreach ($ref_l in git ls-remote $subm_url 'refs/pull/*/merge') {
if ($ref_l -notmatch '^[0-9a-f]+\s+refs/pull/(\d+)/merge$') {
throw "Unexpected format: $ref_l"
}
$pr_num = $Matches[1]
Write-Host "- Found PR $pr_num"
$pr_nums += $pr_num
$exec_list += "$pr_num;$subm_url"
}
$subm_fork_url = $subm_url -replace 'KhronosGroup','SunSerega'
if ($subm_fork_url -eq $subm_url) {
throw "Cannot form fork URL from: $subm_url"
}
$fork_dir = './fork'
New-Item -ItemType Directory -Path $fork_dir | Out-Null
Push-Location $fork_dir
git init --bare
git remote add fork $subm_fork_url
foreach ($ref_l in git ls-remote $subm_fork_url 'refs/heads/pretest/*') {
if ($ref_l -notmatch '^[0-9a-f]+\s+refs/heads/pretest/(.+)$') {
throw "Unexpected format: $ref_l"
}
$pr_num = $Matches[1]
Write-Host "- Found pretest branch for PR $pr_num"
if ($pr_nums -contains $pr_num) { continue }
Write-Host "pretest branch for PR $pr_num is no longer needed"
git push fork --delete "pretest/$pr_num"
}
Pop-Location
Remove-Item -Recurse $fork_dir
}
$json = $exec_list | ConvertTo-Json -Compress
# Write-Host $json
echo "exec_list=$json" >> $env:GITHUB_OUTPUT
pretest-each:
runs-on: windows-latest
needs: enmr-PRs
strategy:
fail-fast: false
matrix:
exec_node: ${{ fromJson(needs.enmr-PRs.outputs.exec_list) }}
steps:
- name: git config
run: |
git config --global core.autocrlf false
git config --global user.name "sun pack bot"
git config --global user.email "sunserega2@gmail.com"
# git config --global --add url.https://github.com/.insteadOf "git@github.com:"
- uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.SSH_KEY }}
- name: checkout
uses: actions/checkout@main
- name: pretest
run: |
$exec_node = "${{ matrix.exec_node }}"
$pr_num, $subm_url = $exec_node -split ';', 2
# Write-Host "Testing PR $pr_num from: $subm_url"
# aaaaa