-
Notifications
You must be signed in to change notification settings - Fork 2
149 lines (130 loc) · 5.48 KB
/
rust.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
name: "cargo"
on:
workflow_dispatch:
push:
branches: ["master"]
pull_request:
branches: ["master"]
env:
CARGO_TERM_COLOR: always
jobs:
bindgen:
strategy:
matrix:
os: [windows-11-preview_aarch64, windows-2025]
target: [aarch64-pc-windows-msvc, x86_64-pc-windows-msvc, i686-pc-windows-msvc]
exclude:
- os: windows-11-preview_aarch64
target: x86_64-pc-windows-msvc
- os: windows-11-preview_aarch64
target: i686-pc-windows-msvc
- os: windows-2025
target: aarch64-pc-windows-msvc
runs-on: ${{ matrix.os }}
steps:
- name: Download LLVM (aarch64)
if: matrix.os == 'windows-11-preview_aarch64'
uses: robinraju/release-downloader@v1
with:
repository: 'llvm/llvm-project'
tag: 'llvmorg-19.1.5'
fileName: 'LLVM-19.1.5-woa64.exe'
- name: Install LLVM (aarch64)
if: matrix.os == 'windows-11-preview_aarch64'
run: |
Start-Process -FilePath "LLVM-19.1.5-woa64.exe" -ArgumentList '/S' -NoNewWindow -Wait
- name: Install Build Tools (aarch64)
if: matrix.os == 'windows-11-preview_aarch64'
run: |
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Add-Content -Path $env:GITHUB_PATH -Value "C:\ProgramData\chocolatey\bin" -Encoding utf8
choco install visualstudio2022buildtools -y --no-progress --package-parameters "--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 --add Microsoft.VisualStudio.Component.Windows11SDK.22621"
- name: Install Nightly Rust (aarch64)
if: matrix.os == 'windows-11-preview_aarch64'
run: |
Add-Content -Path $env:GITHUB_PATH -Value "$env:USERPROFILE\.cargo\bin" -Encoding utf8
Invoke-WebRequest -Uri "https://win.rustup.rs/aarch64" -OutFile "$env:RUNNER_TEMP\rustup-init.exe"
& "$env:RUNNER_TEMP\rustup-init.exe" --default-host aarch64-pc-windows-msvc --default-toolchain nightly -y
- name: Download Git for Windows (aarch64)
if: matrix.os == 'windows-11-preview_aarch64'
uses: robinraju/release-downloader@v1
with:
repository: 'git-for-windows/git'
tag: 'v2.48.0-rc1.windows.1'
fileName: 'Git-2.48.0-rc1-arm64.exe'
- name: Install Git for Windows (aarch64)
if: matrix.os == 'windows-11-preview_aarch64'
run: |
Start-Process -FilePath "Git-2.48.0-rc1-arm64.exe" -ArgumentList "/VERYSILENT" -NoNewWindow -Wait
Add-Content -Path $env:GITHUB_PATH -Value "C:\Program Files\Git\cmd" -Encoding utf8
Add-Content -Path $env:GITHUB_PATH -Value "C:\Program Files\Git\bin" -Encoding utf8
- name: Install Rust
if: matrix.os != 'windows-11-preview_aarch64'
uses: dtolnay/rust-toolchain@nightly
with:
targets: ${{ matrix.target }}
components: rustfmt
- name: Checkout repository
uses: actions/checkout@v4
- name: Run tests and generate bindings
run: |
$env:PHNT_VERSION="PHNT_WIN11_24H2"
$env:PHNT_MODE="PHNT_MODE_USER"
cargo test --release -vv -F regenerate --target ${{ matrix.target }}
- name: Extract architecture from target triple and move bindings
shell: bash
run: |
# Extract architecture (i686, x86_64 or aarch64) from target triple
ARCH=$(echo "${{ matrix.target }}" | cut -d'-' -f1)
echo "Extracted architecture: $ARCH"
# Map i686 to x86
if [ "$ARCH" == "i686" ]; then
ARCH="x86"
fi
# Set the architecture as an environment variable
echo "ARCH=$ARCH" >> $GITHUB_ENV
# Path to the generated binding
GENERATED_BINDING=$(find target/${{ matrix.target }}/release/build -type f -name "${ARCH}_bindgen.rs")
if [ -z "$GENERATED_BINDING" ]; then
echo "Error: Generated binding file not found for $ARCH."
exit 1
fi
# Move the generated file to the repository directory
cp "$GENERATED_BINDING" "src/ffi/${ARCH}_bindgen.rs"
echo "Moved $GENERATED_BINDING to src/ffi/${ARCH}_bindgen.rs"
- name: Upload generated file as artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARCH }}_bindgen.rs
path: src/ffi/${{ env.ARCH }}_bindgen.rs
commit-and-push:
runs-on: ubuntu-latest
needs: bindgen
if: success() # Run only if the generate-bindgen job succeeds
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Download generated files
uses: actions/download-artifact@v4
with:
pattern: "*bindgen.rs"
path: src/ffi
merge-multiple: true
- name: Configure Git
run: |
git config user.name "GitHub Actions"
git config user.email "[email protected]"
- name: Commit and push changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git add src/ffi
# Check if there are any changes to commit
if git diff --quiet --exit-code --cached; then
echo "No changes to commit."
else
git commit -m "chore: update vendored bindings"
git push --force
fi