-
Notifications
You must be signed in to change notification settings - Fork 14
239 lines (205 loc) · 8.61 KB
/
Copy pathwindows.yml
File metadata and controls
239 lines (205 loc) · 8.61 KB
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
name: Windows
on:
push:
paths-ignore:
- 'doc/**'
- '**/man/*'
- '**.md'
- '**.rdoc'
- '**/.document'
- '.*.yml'
pull_request:
# Do not use paths-ignore for required status checks
# https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
merge_group:
concurrency:
group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
permissions:
contents: read
jobs:
make:
strategy:
matrix:
include:
- os: 2022
test_task: check
- os: 2022
test_task: test-bundled-gems
- os: 2025-vs2026
test_task: check
- os: 2025-vs2026
test_task: test-bundled-gems
- os: 11-arm
test_task: 'btest test-basic test-tool' # check and test-spec are broken yet.
target: arm64
fail-fast: false
runs-on: windows-${{ matrix.os }}
if: >-
${{!(false
|| contains(github.event.head_commit.message, '[DOC]')
|| contains(github.event.pull_request.title, '[DOC]')
|| contains(github.event.pull_request.labels.*.name, 'Documentation')
|| (github.event.pull_request.user.login == 'dependabot[bot]' && !startsWith(github.head_ref, 'dependabot/vcpkg'))
)}}
name: Windows ${{ matrix.os }} (${{ matrix.test_task }})
permissions:
contents: read
packages: write
env:
GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
VCPKG_DEFAULT_TRIPLET: ${{ matrix.target || 'x64' }}-windows
FEED_URL: https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json
steps:
- run: md build
working-directory:
- uses: ruby/setup-ruby@8e41b362d2589a22a44c1cfa214b3c83052c195b # v1.318.0
with:
# windows-11-arm has only 3.4.1, 3.4.2, 3.4.3, head
ruby-version: ${{ !endsWith(matrix.os, 'arm') && '3.1' || '3.4' }}
bundler: none
windows-toolchain: none
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
sparse-checkout-cone-mode: false
sparse-checkout: /.github
- uses: ./.github/actions/setup/directories
with:
srcdir: src
builddir: build
make-command: nmake
clean: true
bundled-gems-src-cache: ${{ matrix.test_task == 'test-bundled-gems' }}
- name: Install tools with scoop
run: |
if ((vcpkg.exe help install) -match "manifest") { exit }
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
iwr -useb get.scoop.sh | iex
Join-Path (Resolve-Path ~).Path "scoop\shims" >> $Env:GITHUB_PATH
scoop install vcpkg
shell: pwsh
- name: Set up vcpkg binary cache
shell: pwsh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FEED_OWNER: ${{ github.repository_owner }}
# The GITHUB_TOKEN of pull_request events (forks, dependabot) is
# read-only; packages are uploaded on push and merge_group only.
FEED_MODE: ${{ github.event_name != 'pull_request' && 'readwrite' || 'read' }}
run: |
$nuget = (vcpkg fetch nuget) | Select-Object -Last 1
& $nuget sources add -Source $Env:FEED_URL -StorePasswordInClearText `
-Name GitHubPackages -UserName $Env:FEED_OWNER -Password $Env:GH_TOKEN
& $nuget setapikey $Env:GH_TOKEN -Source $Env:FEED_URL
"VCPKG_BINARY_SOURCES=clear;nuget,$Env:FEED_URL,$Env:FEED_MODE" >> $Env:GITHUB_ENV
- name: Install libraries with vcpkg
run: |
git -C "%VCPKG_INSTALLATION_ROOT%" pull --quiet
vcpkg install
working-directory: src
- name: setup env
# Available Ruby versions: https://github.com/actions/runner-images/blob/main/images/windows/Windows2019-Readme.md#ruby
# %TEMP% is inconsistent with %TMP% and test-all expects they are consistent.
# https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302
run: |
set > old.env
call ..\src\win32\vssetup.cmd ^
-arch=${{ matrix.target || 'amd64' }} ^
${{ matrix.vcvars && '-vcvars_ver=' || '' }}${{ matrix.vcvars }}
nmake -f nul
set TMP=%RUNNER_TEMP%
set TEMP=%RUNNER_TEMP%
set MAKEFLAGS=l
set /a TEST_JOBS=(15 * %NUMBER_OF_PROCESSORS% / 10) > nul
set RUBY_OPT_DIR=%GITHUB_WORKSPACE:\=/%/src/vcpkg_installed/%VCPKG_DEFAULT_TRIPLET%
set > new.env
- name: update env
shell: pwsh
run: |
$old = (Get-Content old.env); $new = (Get-Content new.env)
del *.env
Compare-Object $old $new |
Where-Object { $_.SideIndicator -eq '=>' } |
Select-Object -ExpandProperty InputObject |
Add-Content -Path $env:GITHUB_ENV
- name: baseruby version
run: ruby -v
- name: compiler version
run: cl
- name: volume info
run: Get-Volume
shell: pwsh
# TODO: We should use `../src` instead of `D:/a/ruby/ruby/src`
- name: Configure
run: >-
../src/win32/configure.bat --disable-install-doc
--with-opt-dir=%RUBY_OPT_DIR%
--with-gmp
- run: nmake prepare-vcpkg
- run: nmake incs
- run: nmake extract-extlibs
# On all other platforms, test-spec depending on extract-gems (in common.mk) is enough.
# But not for this Visual Studio workflow. So here we extract gems before building.
- run: nmake extract-gems
# windows-11-arm runner cannot run `ruby tool/file2lastrev.rb --revision.h --output=revision.h`
- name: make revision.h
run: |
win32\lastrev.bat | win32\ifchange.bat --timestamp=.revision.time revision.h -
type revision.h
working-directory: src
- run: nmake
- name: Set up Launchable
uses: ./.github/actions/launchable/setup
with:
os: windows-${{ matrix.os }}
launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
builddir: build
srcdir: src
test-task: ${{ matrix.test_task || 'check' }}
continue-on-error: true
if: ${{ matrix.test_task != 'test-bundled-gems' }}
timeout-minutes: 3
- run: nmake ${{ matrix.test_task || 'check' }}
env:
RUBY_TESTOPTS: -j${{ env.TEST_JOBS || 4 }}
timeout-minutes: 70
- run: nmake binary-package
if: ${{ matrix.test_task == 'check' }}
timeout-minutes: 10
- name: Verify binary package
shell: pwsh
if: ${{ matrix.test_task == 'check' }}
run: |
$zip = Get-Item ruby-*-mswin*.zip
$dest = Join-Path $env:RUNNER_TEMP "binpkg"
if (Test-Path $dest) { Remove-Item -Recurse -Force $dest }
New-Item -ItemType Directory $dest | Out-Null
& "$env:SystemRoot\System32\tar.exe" -x -f $zip.FullName -C $dest
if ((Get-ChildItem $dest).Count -ne 1) { throw "zip must contain a single root directory" }
$root = (Get-ChildItem $dest)[0].FullName
if (!(Test-Path "$root\bin\ruby.exe")) { throw "bin\ruby.exe not found" }
if (Get-ChildItem "$root\bin" -Filter "vcruntime140*.dll") { throw "the VC runtime must not be bundled" }
if (!(Get-ChildItem "$root\LICENSES" -ErrorAction SilentlyContinue)) { throw "LICENSES missing" }
$env:PATH = "$env:SystemRoot\System32"
& "$root\bin\ruby.exe" -v -ropenssl -rfiddle -rpsych -rzlib -e 'abort "configure_args has an absolute path: #{RbConfig::CONFIG[%q(configure_args)]}" if RbConfig::CONFIG[%q(configure_args)] =~ /\b[A-Za-z]:[\/\\]/; puts %q(binary package OK)'
if ($LASTEXITCODE -ne 0) { throw "smoke test failed" }
timeout-minutes: 5
- uses: ./.github/actions/slack
with:
label: Windows ${{ matrix.os }} / ${{ matrix.test_task || 'check' }}
SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
if: ${{ failure() }}
result:
if: ${{ always() }}
name: ${{ github.workflow }} result
runs-on: windows-2025-vs2026
needs: [make]
steps:
- run: exit 1
working-directory:
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
defaults:
run:
working-directory: build
shell: cmd