1
+ name : MSVC CI
2
+
3
+ on :
4
+ push :
5
+ branches : [ master ]
6
+ pull_request :
7
+ branches : [ master ]
8
+
9
+ jobs :
10
+ build-msvc-puc :
11
+ name : Test on PUC-Rio Lua (MSVC)
12
+ runs-on : windows-latest
13
+
14
+ strategy :
15
+ matrix :
16
+
17
+ version :
18
+ - 5.1.5
19
+ - 5.2.4
20
+ - 5.3.6
21
+ - 5.4.7
22
+
23
+ gtk-major-version :
24
+ - 3
25
+ - 4
26
+
27
+ env :
28
+ WINGTK_URL : https://github.com/wingtk/gvsbuild/releases/download/2024.10.0/GTK${{ matrix.gtk-major-version }}_Gvsbuild_2024.10.0_x64.zip
29
+ LUAINSTALLER_URL : https://github.com/luau-project/LuaInstaller/releases/download/v0.2.0.0/LuaInstaller.Console-v0.2.0.0-x64.zip
30
+
31
+ steps :
32
+
33
+ - name : Download and extract GTK ${{ matrix.gtk-major-version }} prebuilt binaries (MSVC toolset) provided by wingtk
34
+ run : |
35
+ $gtk_zip_file = Join-Path -Path "${{ runner.temp }}" -ChildPath "gtk.zip";
36
+
37
+ # Download
38
+ Invoke-WebRequest -Uri "${{ env.WINGTK_URL }}" -OutFile $gtk_zip_file;
39
+
40
+ # Unzip
41
+ $gtk_dir = Join-Path -Path "${{ runner.temp }}" -ChildPath "gtk";
42
+ Expand-Archive -Path $gtk_zip_file -DestinationPath "${gtk_dir}";
43
+
44
+ # Some helper variables
45
+ $gtk_bin_dir = Join-Path -Path $gtk_dir -ChildPath "bin";
46
+ $gtk_pkg_config_dir = Join-Path -Path $gtk_dir -ChildPath "lib" |
47
+ Join-Path -ChildPath "pkgconfig";
48
+
49
+ # Set environment variable GTK_DIR pointing to GTK's directory
50
+ Add-Content "${{ github.env }}" "GTK_DIR=${gtk_dir}";
51
+
52
+ # Set environment variable GTK_BIN_DIR pointing to GTK's bin directory
53
+ Add-Content "${{ github.env }}" "GTK_BIN_DIR=${gtk_bin_dir}";
54
+
55
+ # Set environment variable GTK_PKG_CONFIG_PATH pointing to GTK's pkg-config directory
56
+ Add-Content "${{ github.env }}" "GTK_PKG_CONFIG_PATH=${gtk_pkg_config_dir}";
57
+
58
+ # Place GTK bin directory on system PATH environment variable
59
+ Add-Content "${{ github.path }}" "${gtk_bin_dir}";
60
+
61
+ - name : Download and extract LuaInstaller, and set an environment variable for it
62
+ run : |
63
+ $luainstaller_zip_file = Join-Path -Path "${{ runner.temp }}" -ChildPath "luainstaller.zip";
64
+
65
+ # Download
66
+ Invoke-WebRequest -Uri "${{ env.LUAINSTALLER_URL }}" -OutFile $luainstaller_zip_file;
67
+
68
+ # Unzip
69
+ Expand-Archive -Path $luainstaller_zip_file -DestinationPath "${{ runner.temp }}";
70
+
71
+ $luainstaller = Join-Path -Path "${{ runner.temp }}" -ChildPath "LuaInstaller.Console" |
72
+ Join-Path -ChildPath "LuaInstaller.Console.exe";
73
+
74
+ # Set LUA_INSTALLER environment variable pointing to the app
75
+ Add-Content "${{ github.env }}" "LUA_INSTALLER=${luainstaller}";
76
+
77
+ - name : Install Lua ${{ matrix.version }} on GTK's directory and set environment variables for it
78
+ run : |
79
+ & "${{ env.LUA_INSTALLER }}" install "dest-dir=${{ env.GTK_DIR }}" "version=${{ matrix.version }}";
80
+
81
+ # Test Lua
82
+ & lua -v;
83
+
84
+ # Find Lua's pkgconfig (.pc) file
85
+ $lua_pc = Get-ChildItem "${{ env.GTK_PKG_CONFIG_PATH }}" -File |
86
+ Where-Object Name -Like "lua*.pc" |
87
+ Select-Object -ExpandProperty BaseName -First 1;
88
+
89
+ # Set LUA_PC environment variable pointing to Lua's (.pc) file
90
+ Add-Content "${{ github.env }}" "LUA_PC=${lua_pc}";
91
+
92
+ - name : Setup Python 3.12
93
+ uses : actions/setup-python@v5
94
+ with :
95
+ python-version : ' 3.12'
96
+
97
+ - name : Install meson
98
+ run : pip install meson
99
+
100
+ - name : Setup MSVC dev-prompt
101
+ uses : ilammy/msvc-dev-cmd@v1
102
+
103
+ - name : Checkout
104
+ uses : actions/checkout@v4
105
+
106
+ - name : Configure lgi through meson
107
+ run : meson setup lgi-build . --prefix "${{ env.GTK_DIR }}" "-Dlua-pc=${{ env.LUA_PC }}" -Dtests=false
108
+
109
+ - name : Build lgi
110
+ run : meson compile -C lgi-build
111
+
112
+ - name : Install lgi
113
+ run : meson install -C lgi-build
114
+
115
+ - name : Test lgi
116
+ run : lua ".github\\test-for-msvc-ci.lua" ${{ matrix.gtk-major-version }};
117
+
118
+ build-msvc-luajit :
119
+ name : Test on LuaJIT (MSVC)
120
+ runs-on : windows-latest
121
+
122
+ strategy :
123
+ matrix :
124
+
125
+ gtk-major-version :
126
+ - 3
127
+ - 4
128
+
129
+ env :
130
+ WINGTK_URL : https://github.com/wingtk/gvsbuild/releases/download/2024.10.0/GTK${{ matrix.gtk-major-version }}_Gvsbuild_2024.10.0_x64.zip
131
+
132
+ steps :
133
+
134
+ - name : Download and extract GTK ${{ matrix.gtk-major-version }} prebuilt binaries (MSVC toolset) provided by wingtk
135
+ run : |
136
+ $gtk_zip_file = Join-Path -Path "${{ runner.temp }}" -ChildPath "gtk.zip";
137
+
138
+ # Download
139
+ Invoke-WebRequest -Uri "${{ env.WINGTK_URL }}" -OutFile $gtk_zip_file;
140
+
141
+ # Unzip
142
+ $gtk_dir = Join-Path -Path "${{ runner.temp }}" -ChildPath "gtk";
143
+ Expand-Archive -Path $gtk_zip_file -DestinationPath "${gtk_dir}";
144
+
145
+ # Some helper variables
146
+ $gtk_bin_dir = Join-Path -Path $gtk_dir -ChildPath "bin";
147
+ $gtk_pkg_config_dir = Join-Path -Path $gtk_dir -ChildPath "lib" |
148
+ Join-Path -ChildPath "pkgconfig";
149
+
150
+ # Set environment variable GTK_DIR pointing to GTK's directory
151
+ Add-Content "${{ github.env }}" "GTK_DIR=${gtk_dir}";
152
+
153
+ # Set environment variable GTK_BIN_DIR pointing to GTK's bin directory
154
+ Add-Content "${{ github.env }}" "GTK_BIN_DIR=${gtk_bin_dir}";
155
+
156
+ # Set environment variable GTK_PKG_CONFIG_PATH pointing to GTK's pkg-config directory
157
+ Add-Content "${{ github.env }}" "GTK_PKG_CONFIG_PATH=${gtk_pkg_config_dir}";
158
+
159
+ # Place GTK bin directory on system PATH environment variable
160
+ Add-Content "${{ github.path }}" "${gtk_bin_dir}";
161
+
162
+ - name : Save environment variable for LuaJIT checkout directory
163
+ run : |
164
+ $guid_string = [System.Guid]::NewGuid() | Select-Object -ExpandProperty Guid;
165
+ Add-Content "${{ github.env }}" "LUAJIT_CHECKOUT=${guid_string}";
166
+
167
+ - name : Checkout LuaJIT
168
+ uses : actions/checkout@v4
169
+ with :
170
+ repository : LuaJIT/LuaJIT
171
+ path : " ${{ env.LUAJIT_CHECKOUT }}"
172
+
173
+ - name : Find LuaJIT msvcbuild.bat and src directory
174
+ run : |
175
+ $build_bat = "msvcbuild.bat";
176
+ $msvcbuild = Get-ChildItem -Path "${{ env.LUAJIT_CHECKOUT }}" -Recurse -File |
177
+ Where-Object Name -EQ $build_bat |
178
+ Select-Object -ExpandProperty FullName -First 1;
179
+
180
+ if ($msvcbuild -eq $null -or -not (Test-Path -Path $msvcbuild))
181
+ {
182
+ Write-Host "Unable to find LuaJIT's $build_bat";
183
+ exit 1;
184
+ }
185
+
186
+ Write-Host "Found $build_bat at $msvcbuild";
187
+
188
+ $src_dir = Split-Path $msvcbuild;
189
+
190
+ Add-Content "${{ github.env }}" "LUAJIT_MSVCBUILD_BAT=${build_bat}";
191
+ Add-Content "${{ github.env }}" "LUAJIT_SRC_DIR=${src_dir}";
192
+
193
+ - name : Setup MSVC dev prompt
194
+ uses : ilammy/msvc-dev-cmd@v1
195
+
196
+ - name : Build LuaJIT
197
+ run : |
198
+ cd "${{ env.LUAJIT_SRC_DIR }}";
199
+ & ".\${{ env.LUAJIT_MSVCBUILD_BAT }}"
200
+
201
+ $luajit_output = & .\luajit -v;
202
+
203
+ if ($luajit_output -match "^\s*LuaJIT\s*(\d+(\.\d+)*)")
204
+ {
205
+ $luajit_version = $Matches.1;
206
+ Add-Content "${{ github.env }}" "LUAJIT_VERSION=${luajit_version}";
207
+ }
208
+ else
209
+ {
210
+ Write-Host "Unable to get LuaJIT version";
211
+ exit 1;
212
+ }
213
+
214
+ - name : Create LuaJIT tar gz containing the build artifacts
215
+ run : |
216
+ $luajit_target_dir = Join-Path -Path "${{ runner.temp }}" -ChildPath "luajit";
217
+
218
+ if (Test-Path -Path $luajit_target_dir)
219
+ {
220
+ Remove-Item -Path $luajit_target_dir -Recurse -Force;
221
+ }
222
+
223
+ mkdir $luajit_target_dir;
224
+
225
+ $luajit_bin_dir = Join-Path -Path $luajit_target_dir -ChildPath "bin";
226
+ $luajit_include_dir = Join-Path -Path $luajit_target_dir -ChildPath "include";
227
+ $luajit_lib_dir = Join-Path -Path $luajit_target_dir -ChildPath "lib";
228
+
229
+ foreach ($luajit_target_subdir in $luajit_bin_dir, $luajit_include_dir, $luajit_lib_dir)
230
+ {
231
+ if (-not (Test-Path -Path $luajit_target_subdir))
232
+ {
233
+ mkdir $luajit_target_subdir;
234
+ }
235
+ }
236
+
237
+ $luajit_lmod_dir = Join-Path -Path $luajit_bin_dir -ChildPath "lua";
238
+ if (-not (Test-Path -Path $luajit_lmod_dir))
239
+ {
240
+ mkdir $luajit_lmod_dir;
241
+ }
242
+
243
+ $luajit_pkgconfig_dir = Join-Path -Path $luajit_lib_dir -ChildPath "pkgconfig";
244
+ if (-not (Test-Path -Path $luajit_pkgconfig_dir))
245
+ {
246
+ mkdir $luajit_pkgconfig_dir;
247
+ }
248
+
249
+ foreach ($to_bin in "luajit.exe", "lua51.dll")
250
+ {
251
+ $artifact = Join-Path -Path "${{ env.LUAJIT_SRC_DIR }}" -ChildPath $to_bin;
252
+
253
+ Copy-Item -Path $artifact -Destination $luajit_bin_dir;
254
+ }
255
+
256
+ foreach ($to_include in "lua.h", "lualib.h", "lauxlib.h", "luaconf.h", "lua.hpp", "luajit.h")
257
+ {
258
+ $artifact = Join-Path -Path "${{ env.LUAJIT_SRC_DIR }}" -ChildPath $to_include;
259
+
260
+ Copy-Item -Path $artifact -Destination $luajit_include_dir;
261
+ }
262
+
263
+ foreach ($to_lib in "luajit.lib", "luajit.exp", "lua51.lib", "lua51.exp")
264
+ {
265
+ $artifact = Join-Path -Path "${{ env.LUAJIT_SRC_DIR }}" -ChildPath $to_lib;
266
+
267
+ Copy-Item -Path $artifact -Destination $luajit_lib_dir;
268
+ }
269
+
270
+ $luajit_jit_dir = Join-Path -Path "${{ env.LUAJIT_SRC_DIR }}" -ChildPath "jit";
271
+
272
+ Copy-Item -Path $luajit_jit_dir -Destination $luajit_lmod_dir -Filter "*.lua" -Recurse;
273
+
274
+ # pkgconfig variables
275
+ $pkgconfig_luajit_target_dir = $luajit_target_dir.Replace("\", "/")
276
+ $pkgconfig_luajit_include_dir = $luajit_include_dir.Replace("\", "/")
277
+ $pkgconfig_luajit_lib_dir = $luajit_lib_dir.Replace("\", "/")
278
+ $pkgconfig_luajit_lmod_dir = $luajit_lmod_dir.Replace("\", "/")
279
+ $pkgconfig_luajit_bin_dir = $luajit_bin_dir.Replace("\", "/")
280
+
281
+ # Writing pkgconfig files
282
+
283
+ foreach ($pkgconfig_filename in "lua51", "luajit")
284
+ {
285
+ $pkgconfig_content = "prefix=${pkgconfig_luajit_target_dir}",
286
+ "exec_prefix=`${prefix}",
287
+ "libname=${pkgconfig_filename}",
288
+ "includedir=${pkgconfig_luajit_include_dir}",
289
+ "libdir=${pkgconfig_luajit_lib_dir}",
290
+ "INSTALL_LMOD=${pkgconfig_luajit_lmod_dir}",
291
+ "INSTALL_CMOD=${pkgconfig_luajit_bin_dir}",
292
+ "",
293
+ "Name: LuaJIT",
294
+ "Description: Just-in-time compiler for Lua",
295
+ "URL: https://luajit.org",
296
+ "Version: ${{ env.LUAJIT_VERSION }}",
297
+ "Requires: ",
298
+ "Libs: -L`${libdir} -l`${libname}",
299
+ "Cflags: -I`${includedir}";
300
+
301
+ $pkgconfig_content = $pkgconfig_content |
302
+ Join-String -Separator ([System.Environment]::NewLine);
303
+
304
+ $pkgconfig_file = Join-Path -Path $luajit_pkgconfig_dir -ChildPath "${pkgconfig_filename}.pc";
305
+ Set-Content $pkgconfig_file $pkgconfig_content -NoNewLine;
306
+ }
307
+
308
+ $luajit_target_dir_unix = & C:\msys64\usr\bin\cygpath -u "$luajit_target_dir";
309
+ $luajit_tar_gz = Join-Path -Path "${{ runner.temp }}" -ChildPath "luajit.tar.gz";
310
+ $luajit_tar_gz_unix = & C:\msys64\usr\bin\cygpath -u "$luajit_tar_gz";
311
+
312
+ & C:\msys64\usr\bin\bash -lc "tar -C ""$luajit_target_dir_unix"" -czvf ""$luajit_tar_gz_unix"" .";
313
+
314
+ Remove-Item -Path $luajit_target_dir -Recurse;
315
+
316
+ Add-Content "${{ github.env }}" "LUAJIT_TAR_GZ=${luajit_tar_gz}";
317
+ Add-Content "${{ github.env }}" "LUAJIT_TAR_GZ_UNIX=${luajit_tar_gz_unix}";
318
+
319
+ - name : Extract LuaJIT tar gz on GTK's directory
320
+ run : |
321
+ $gtk_dir_unix = & C:\msys64\usr\bin\cygpath -u "${{ env.GTK_DIR }}";
322
+
323
+ & C:\msys64\usr\bin\bash -lc "tar -C ""$gtk_dir_unix"" -xzvf ""${{ env.LUAJIT_TAR_GZ_UNIX }}""";
324
+
325
+ - name : Setup Python 3.12
326
+ uses : actions/setup-python@v5
327
+ with :
328
+ python-version : ' 3.12'
329
+
330
+ - name : Install meson
331
+ run : pip install meson
332
+
333
+ - name : Checkout
334
+ uses : actions/checkout@v4
335
+
336
+ - name : Configure lgi through meson
337
+ run : meson setup lgi-build . --prefix "${{ env.GTK_DIR }}" "-Dlua-bin=luajit" -Dtests=false
338
+
339
+ - name : Build lgi
340
+ run : meson compile -C lgi-build
341
+
342
+ - name : Install lgi
343
+ run : meson install -C lgi-build
344
+
345
+ - name : Test lgi
346
+ run : luajit ".github\\test-for-msvc-ci.lua" ${{ matrix.gtk-major-version }};
0 commit comments