tools: add a `v should-compile-all examples/*.v examples/gg/` tool, to simplify CIs of V modules.

pull/13885/head
Delyan Angelov 2022-03-31 11:11:31 +03:00
parent 6137ce23c0
commit 74eabba52e
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
2 changed files with 46 additions and 0 deletions

View File

@ -0,0 +1,45 @@
import os
fn main() {
mut files := []string{}
args := os.args#[2..]
for a in args {
if os.is_file(a) {
files << a
continue
}
if os.is_dir(a) {
files << os.walk_ext(a, '.v')
continue
}
}
files.sort()
if files.len == 0 {
println('0 .v files found.\n')
println('Usage:')
println(' v should-compile-all examples/ some/deep/file.v another/')
println('... will try to compile all .v files found in the given folders and files, one by one.')
println('If every single one of them compiles, the command will exit with an error code of 0.')
println('If *any* of them *fail* to compile, the command will exit with an error code of 1.')
println('')
println('Note: this command is intended to be used in CI pipelines for v modules, like this:')
println(' cd module/ ; v should-compile-all examples/ \n')
exit(1)
}
mut failed_commands := []string{}
for idx, example in files {
cmd := '${os.quoted_path(@VEXE)} ${os.quoted_path(example)}'
println('> compiling ${idx + 1:4}/${files.len:-4}: $cmd')
if 0 != os.system(cmd) {
failed_commands << cmd
}
}
if failed_commands.len > 0 {
for idx, fcmd in failed_commands {
eprintln('>>> FAILED command ${idx + 1:4}/${failed_commands.len:-4}: $fcmd')
}
println('Summary: ${failed_commands.len:4}/${files.len:-4} file(s) failed to compile.')
exit(1)
}
println('Summary: all $files.len file(s) compiled successfully.')
}

View File

@ -32,6 +32,7 @@ const (
'self', 'self',
'setup-freetype', 'setup-freetype',
'shader', 'shader',
'should-compile-all',
'symlink', 'symlink',
'scan', 'scan',
'test', 'test',