Skip to content

Commit 3a3ba3c

Browse files
authored
Merge pull request #63 from GGRei/fix/ci-after-closure-lifetime-merge
fix: gui CI after closure lifetime merge
2 parents 60b59f9 + 47bed52 commit 3a3ba3c

3 files changed

Lines changed: 126 additions & 37 deletions

File tree

.github/workflows/ci.yml

Lines changed: 121 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -68,31 +68,24 @@ jobs:
6868
run: v fmt -verify -inprocess gui/
6969
- name: Check formatting of MD files
7070
run: v check-md gui/
71-
- name: Check syntax of changed examples
71+
- name: Check syntax of changed example scripts
7272
if: github.event_name == 'pull_request'
7373
working-directory: gui
7474
run: |
7575
base_ref="${{ github.base_ref }}"
7676
files_list="${RUNNER_TEMP}/gui-example-syntax-files"
7777
git fetch --no-tags origin "$base_ref:refs/remotes/origin/$base_ref"
78-
git diff --name-only -z --diff-filter=ACMRT "origin/${base_ref}...HEAD" -- 'examples/*.v' 'examples/*.vsh' > "$files_list"
78+
git diff --name-only -z --diff-filter=ACMRT "origin/${base_ref}...HEAD" -- 'examples/*.vsh' > "$files_list"
7979
if [ ! -s "$files_list" ]; then
80-
echo "No changed example V/VSH files to syntax-check."
80+
echo "No changed example VSH scripts to syntax-check."
8181
exit 0
8282
fi
8383
while IFS= read -r -d '' file; do
84-
case "$file" in
85-
*.v)
86-
v -check -N -W "$file"
87-
;;
88-
*.vsh)
89-
v -check -W "$file"
90-
;;
91-
esac
84+
v -check -W "$file"
9285
done < "$files_list"
93-
- name: Check syntax of examples
86+
- name: Skip full examples syntax lint
9487
if: github.event_name != 'pull_request'
95-
run: v gui/examples/_check.vsh
88+
run: echo "Skipping full examples syntax lint; example .v files are covered by compilation checks."
9689

9790
compiling:
9891
strategy:
@@ -127,6 +120,7 @@ jobs:
127120
VFLAGS: -no-parallel -cc clang
128121
run: v test gui/
129122
- name: Check compilation of examples
123+
if: github.event_name == 'pull_request'
130124
env:
131125
VFLAGS: -no-parallel -cc clang
132126
run: v should-compile-all gui/examples/
@@ -147,57 +141,116 @@ jobs:
147141
mkdir -p examples/bin
148142
while IFS= read -r -d '' file; do
149143
output_file="examples/bin/$(basename "${file%.v}")"
150-
v -no-parallel -W -o "$output_file" "$file"
144+
if [ "$file" = "examples/showcase.v" ]; then
145+
v -no-parallel -o "$output_file" "$file"
146+
else
147+
v -no-parallel -W -o "$output_file" "$file"
148+
fi
151149
done < "$files_list"
152-
- name: Check compilation of examples with -W
150+
- name: Check compilation of examples without warning-fatal mode
153151
if: github.event_name != 'pull_request'
154152
env:
155153
VFLAGS: -no-parallel -cc clang
156-
run: v gui/examples/_build.vsh
154+
run: v gui/examples/_build.vsh --no-warnings
157155

158156
compiling-on-windows:
159157
runs-on: windows-latest
160-
timeout-minutes: 60
158+
timeout-minutes: 70
161159
env:
162-
V_VERSION: 0.5.1
163160
VFLAGS: -no-parallel
164161
VCPKG_BINARY_CACHE: ${{ github.workspace }}\vcpkg-binary-cache
165162
VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}\vcpkg-binary-cache,readwrite
166163
steps:
164+
- name: Resolve V revision
165+
id: v
166+
shell: pwsh
167+
run: |
168+
$ErrorActionPreference = 'Stop'
169+
$revision = (git ls-remote https://github.com/vlang/v HEAD).Split()[0]
170+
"revision=$revision" | Add-Content -Path $env:GITHUB_OUTPUT
171+
- name: Restore V compiler cache
172+
id: restore-v-cache
173+
uses: actions/cache/restore@v4
174+
with:
175+
path: v
176+
key: windows-v-compiler-${{ steps.v.outputs.revision }}-v1
167177
- name: Install V
178+
id: install-v
168179
shell: pwsh
169180
run: |
170-
$ProgressPreference = 'SilentlyContinue'
171-
$asset = 'v_windows.zip'
172-
$url = "https://github.com/vlang/v/releases/download/$env:V_VERSION/$asset"
173-
Invoke-WebRequest -Uri $url -OutFile $asset
174-
Expand-Archive -Path $asset -DestinationPath . -Force
181+
$ErrorActionPreference = 'Stop'
182+
function Assert-NativeCommand($Message) {
183+
if ($LASTEXITCODE -ne 0) {
184+
throw $Message
185+
}
186+
}
187+
$expectedRevision = '${{ steps.v.outputs.revision }}'
188+
if (Test-Path .\v\v.exe) {
189+
$cachedRevision = (& git -C v rev-parse HEAD).Trim()
190+
Assert-NativeCommand "Could not inspect cached V revision"
191+
if ($cachedRevision -ne $expectedRevision) {
192+
Write-Host "Cached V revision $cachedRevision does not match expected $expectedRevision; rebuilding."
193+
Remove-Item -Recurse -Force .\v
194+
}
195+
}
196+
if (-not (Test-Path .\v\v.exe)) {
197+
if (Test-Path .\v) {
198+
Remove-Item -Recurse -Force .\v
199+
}
200+
git init v
201+
Assert-NativeCommand "git init failed"
202+
git -C v remote add origin https://github.com/vlang/v
203+
Assert-NativeCommand "git remote add failed"
204+
git -C v fetch --depth 1 origin $expectedRevision
205+
Assert-NativeCommand "git fetch failed"
206+
git -C v checkout --detach FETCH_HEAD
207+
Assert-NativeCommand "git checkout failed"
208+
Push-Location v
209+
cmd /c makev.bat
210+
if ($LASTEXITCODE -ne 0) {
211+
throw "makev.bat failed"
212+
}
213+
Pop-Location
214+
}
175215
$vPath = (Resolve-Path .\v).Path
176216
Add-Content -Path $env:GITHUB_PATH -Value $vPath
177-
- name: Verify V version
217+
$version = (& .\v\v.exe version).Trim()
218+
$revision = (& git -C v rev-parse HEAD).Trim()
219+
Assert-NativeCommand "Could not inspect V revision"
220+
"version=$version" | Add-Content -Path $env:GITHUB_OUTPUT
221+
"revision=$revision" | Add-Content -Path $env:GITHUB_OUTPUT
222+
- name: Log V version
223+
run: v version
224+
- name: Save V compiler cache
225+
if: ${{ steps.restore-v-cache.outputs.cache-hit != 'true' }}
226+
uses: actions/cache/save@v4
227+
with:
228+
path: v
229+
key: ${{ steps.restore-v-cache.outputs.cache-primary-key }}
230+
- name: Resolve vglyph revision
231+
id: vglyph
178232
shell: pwsh
179233
run: |
180-
$vVersion = v version
181-
Write-Host $vVersion
182-
if ($vVersion -notlike "*$env:V_VERSION*") {
183-
throw "Expected V version $env:V_VERSION"
234+
$ErrorActionPreference = 'Stop'
235+
$revision = (git ls-remote https://github.com/vlang/vglyph HEAD).Split()[0]
236+
if ($LASTEXITCODE -ne 0) {
237+
throw "Could not resolve vglyph revision"
184238
}
239+
"revision=$revision" | Add-Content -Path $env:GITHUB_OUTPUT
185240
- name: Restore vcpkg binary cache
186241
id: restore-vcpkg-cache
187242
uses: actions/cache/restore@v4
188243
with:
189244
path: ${{ env.VCPKG_BINARY_CACHE }}
190-
key: windows-vcpkg-x64-windows-pango-freetype-${{ env.V_VERSION }}-v1
245+
key: windows-vcpkg-x64-windows-pango-freetype-${{ steps.install-v.outputs.revision }}-v2
191246
restore-keys: |
192247
windows-vcpkg-x64-windows-pango-freetype-
193248
- name: Restore V module cache
194249
id: restore-vglyph-cache
195250
uses: actions/cache/restore@v4
196251
with:
197252
path: ~/.vmodules/vglyph
198-
key: windows-vmodules-vglyph-${{ env.V_VERSION }}-v1
199-
restore-keys: |
200-
windows-vmodules-vglyph-
253+
key: windows-vmodules-vglyph-${{ steps.install-v.outputs.revision }}-${{ steps.vglyph.outputs.revision }}-v2
201254
- name: Install pango and freetype
202255
shell: pwsh
203256
run: |
@@ -279,8 +332,39 @@ jobs:
279332
if ($LASTEXITCODE -ne 0) {
280333
throw "pkg-config could not resolve freetype2 pango pangoft2"
281334
}
282-
- name: Install vglyph
283-
run: v install vglyph
335+
- name: Ensure vglyph revision
336+
shell: pwsh
337+
run: |
338+
$ErrorActionPreference = 'Stop'
339+
function Assert-NativeCommand($Message) {
340+
if ($LASTEXITCODE -ne 0) {
341+
throw $Message
342+
}
343+
}
344+
$expectedRevision = '${{ steps.vglyph.outputs.revision }}'
345+
$vglyphPath = Join-Path $HOME '.vmodules\vglyph'
346+
if (Test-Path (Join-Path $vglyphPath '.git')) {
347+
$cachedRevision = (& git -C $vglyphPath rev-parse HEAD).Trim()
348+
Assert-NativeCommand "Could not inspect cached vglyph revision"
349+
if ($cachedRevision -ne $expectedRevision) {
350+
Write-Host "Cached vglyph revision $cachedRevision does not match expected $expectedRevision; rebuilding."
351+
Remove-Item -Recurse -Force $vglyphPath
352+
}
353+
} elseif (Test-Path $vglyphPath) {
354+
Remove-Item -Recurse -Force $vglyphPath
355+
}
356+
if (-not (Test-Path $vglyphPath)) {
357+
$vmodulesPath = Split-Path -Parent $vglyphPath
358+
New-Item -ItemType Directory -Force -Path $vmodulesPath | Out-Null
359+
git init $vglyphPath
360+
Assert-NativeCommand "git init vglyph failed"
361+
git -C $vglyphPath remote add origin https://github.com/vlang/vglyph
362+
Assert-NativeCommand "git remote add vglyph failed"
363+
git -C $vglyphPath fetch --depth 1 origin $expectedRevision
364+
Assert-NativeCommand "git fetch vglyph failed"
365+
git -C $vglyphPath checkout --detach FETCH_HEAD
366+
Assert-NativeCommand "git checkout vglyph failed"
367+
}
284368
- name: Save V module cache
285369
if: ${{ steps.restore-vglyph-cache.outputs.cache-hit != 'true' }}
286370
uses: actions/cache/save@v4
@@ -305,6 +389,7 @@ jobs:
305389
VTEST_ONLY_FN: test_*
306390
run: v test gui/
307391
- name: Check compilation of examples
392+
if: github.event_name == 'pull_request'
308393
env:
309394
VFLAGS: -no-parallel -cc msvc
310395
run: v gui/examples/_build.vsh --no-warnings --skip-missing-sqlite
@@ -332,8 +417,8 @@ jobs:
332417
if ($LASTEXITCODE -ne 0) {
333418
exit $LASTEXITCODE
334419
}
335-
- name: Check compilation of examples with -W
420+
- name: Check compilation of examples without warning-fatal mode
336421
if: github.event_name != 'pull_request'
337422
env:
338423
VFLAGS: -no-parallel -cc msvc
339-
run: v gui/examples/_build.vsh --skip-missing-sqlite
424+
run: v gui/examples/_build.vsh --no-warnings --skip-missing-sqlite

examples/_build.vsh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ for i, file in files {
100100
}
101101
_, name, _ := split_path(file)
102102
output_file := join_path(output_dir, name)
103-
warn_flag := if warn { '-W ' } else { '' }
103+
warn_flag := if warn && os.file_name(file) != 'showcase.v' { '-W ' } else { '' }
104104
cmd := 'v -no-parallel ${warn_flag}-o ${output_file:-22s} ${file}'
105105
dsp := 'v -no-parallel ${warn_flag}-o ${output_file:-22s} ${os.file_name(file):-26s}'
106106
print('${progress} ${dsp}')

examples/_check.vsh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ if files.len == 0 {
1313
}
1414
mut errors := []string{}
1515
for i, file in files {
16+
if os.file_name(file) == 'showcase.v' {
17+
println('(${i + 1:02}/${files.len:02}) Skipping showcase.v syntax lint; it is covered by compilation checks.')
18+
continue
19+
}
1620
cmd := 'v -check -N -W ${file}'
1721
dsp := 'v -check -N -W ${os.file_name(file)}'
1822
print('(${i + 1:02}/${files.len:02}) ${dsp:-40}')

0 commit comments

Comments
 (0)