diff --git a/ci/macos_ci.vsh b/ci/macos_ci.vsh index e640c5aab1..5b89bd9fed 100644 --- a/ci/macos_ci.vsh +++ b/ci/macos_ci.vsh @@ -1,34 +1,34 @@ import os enum Command { - build_v - test_symlink - test_cross_compilation - build_with_cstrict - all_code_is_formatted - run_sanitizers - build_using_v - verify_v_test_works - install_iconv - test_pure_v_math_module - self_tests - build_examples - build_tetris_autofree - build_blog_autofree - build_examples_prod - v_doctor - v_self_compilation_usecache - v_self_compilation_parallel_cc - test_password_input - test_readline - test_vlib_skip_unused + build_v + test_symlink + test_cross_compilation + build_with_cstrict + all_code_is_formatted + run_sanitizers + build_using_v + verify_v_test_works + install_iconv + test_pure_v_math_module + self_tests + build_examples + build_tetris_autofree + build_blog_autofree + build_examples_prod + v_doctor + v_self_compilation_usecache + v_self_compilation_parallel_cc + test_password_input + test_readline + test_vlib_skip_unused } fn main() { - if os.args.len < 2 { - println('Usage: v run macos_ci.vsh ') - return - } + if os.args.len < 2 { + println('Usage: v run macos_ci.vsh ') + return + } arg := os.args[1] if arg == 'all' { $for x in Command.values { @@ -37,176 +37,173 @@ fn main() { } return } - step := Command.from_string(arg) or { - eprintln('Unknown step: ${arg}') - exit(1) - } + step := Command.from_string(arg) or { + eprintln('Unknown step: ${arg}') + exit(1) + } run_step(step) } fn run_step(step Command) { println('Running ${step}...') - match step { - .build_v { build_v() } - .test_symlink { test_symlink() } - .test_cross_compilation { test_cross_compilation() } - .build_with_cstrict { build_with_cstrict() } - .all_code_is_formatted { all_code_is_formatted() } - .run_sanitizers { run_sanitizers() } - .build_using_v { build_using_v() } - .verify_v_test_works { verify_v_test_works() } - .install_iconv { install_iconv() } - .test_pure_v_math_module { test_pure_v_math_module() } - .self_tests { self_tests() } - .build_examples { build_examples() } - .build_tetris_autofree { build_tetris_autofree() } - .build_blog_autofree { build_blog_autofree() } - .build_examples_prod { build_examples_prod() } - .v_doctor { v_doctor() } - .v_self_compilation_usecache { v_self_compilation_usecache() } - .v_self_compilation_parallel_cc { v_self_compilation_parallel_cc() } - .test_password_input { test_password_input() } - .test_readline { test_readline() } - .test_vlib_skip_unused { test_vlib_skip_unused() } - } + match step { + .build_v { build_v() } + .test_symlink { test_symlink() } + .test_cross_compilation { test_cross_compilation() } + .build_with_cstrict { build_with_cstrict() } + .all_code_is_formatted { all_code_is_formatted() } + .run_sanitizers { run_sanitizers() } + .build_using_v { build_using_v() } + .verify_v_test_works { verify_v_test_works() } + .install_iconv { install_iconv() } + .test_pure_v_math_module { test_pure_v_math_module() } + .self_tests { self_tests() } + .build_examples { build_examples() } + .build_tetris_autofree { build_tetris_autofree() } + .build_blog_autofree { build_blog_autofree() } + .build_examples_prod { build_examples_prod() } + .v_doctor { v_doctor() } + .v_self_compilation_usecache { v_self_compilation_usecache() } + .v_self_compilation_parallel_cc { v_self_compilation_parallel_cc() } + .test_password_input { test_password_input() } + .test_readline { test_readline() } + .test_vlib_skip_unused { test_vlib_skip_unused() } + } } - // Helper function to execute commands and exit if they fail fn exec(command string) { - result := os.execute(command) - //or { - //eprintln('Command failed: $command\nError: $err') - //exit(1) - //} - if result.exit_code != 0 { - eprintln('Command failed with code ${result.exit_code}: $command\nOutput: ${result.output}') - exit(1) - } - println(result.output) + result := os.execute(command) + // or { + // eprintln('Command failed: $command\nError: $err') + // exit(1) + //} + if result.exit_code != 0 { + eprintln('Command failed with code ${result.exit_code}: ${command}\nOutput: ${result.output}') + exit(1) + } + println(result.output) } // Map enum values to human readable step names fn get_step_name(step Command) string { - return match step { - .build_v { 'Build V' } - .test_symlink { 'Test symlink' } - .test_cross_compilation { 'Test cross compilation to Linux' } - .build_with_cstrict { 'Build V with -cstrict' } - .all_code_is_formatted { 'All code is formatted' } - .run_sanitizers { 'Run sanitizers' } - .build_using_v { 'Build V using V' } - .verify_v_test_works { 'Verify `v test` works' } - .install_iconv { 'Install iconv for encoding.iconv' } - .test_pure_v_math_module { 'Test pure V math module' } - .self_tests { 'Self tests' } - .build_examples { 'Build examples' } - .build_tetris_autofree { 'Build tetris with -autofree' } - .build_blog_autofree { 'Build blog tutorial with -autofree' } - .build_examples_prod { 'Build examples with -prod' } - .v_doctor { 'v doctor' } - .v_self_compilation_usecache { 'V self compilation with -usecache' } - .v_self_compilation_parallel_cc { 'V self compilation with -parallel-cc' } - .test_password_input { 'Test password input' } - .test_readline { 'Test readline' } - .test_vlib_skip_unused { 'Test vlib modules with -skip-unused' } - } + return match step { + .build_v { 'Build V' } + .test_symlink { 'Test symlink' } + .test_cross_compilation { 'Test cross compilation to Linux' } + .build_with_cstrict { 'Build V with -cstrict' } + .all_code_is_formatted { 'All code is formatted' } + .run_sanitizers { 'Run sanitizers' } + .build_using_v { 'Build V using V' } + .verify_v_test_works { 'Verify `v test` works' } + .install_iconv { 'Install iconv for encoding.iconv' } + .test_pure_v_math_module { 'Test pure V math module' } + .self_tests { 'Self tests' } + .build_examples { 'Build examples' } + .build_tetris_autofree { 'Build tetris with -autofree' } + .build_blog_autofree { 'Build blog tutorial with -autofree' } + .build_examples_prod { 'Build examples with -prod' } + .v_doctor { 'v doctor' } + .v_self_compilation_usecache { 'V self compilation with -usecache' } + .v_self_compilation_parallel_cc { 'V self compilation with -parallel-cc' } + .test_password_input { 'Test password input' } + .test_readline { 'Test readline' } + .test_vlib_skip_unused { 'Test vlib modules with -skip-unused' } + } } // Step functions fn build_v() { - exec('make -j4') - exec('./v symlink') + exec('make -j4') + exec('./v symlink') } fn test_symlink() { - exec('v symlink') + exec('v symlink') } fn test_cross_compilation() { - exec('v -o hw -os linux examples/hello_world.v && ls -la hw && file hw') - exec('v -d use_openssl -o ve -os linux examples/veb/veb_example.v && ls -la ve && file ve') + exec('v -o hw -os linux examples/hello_world.v && ls -la hw && file hw') + exec('v -d use_openssl -o ve -os linux examples/veb/veb_example.v && ls -la ve && file ve') } fn build_with_cstrict() { - exec('v -cg -cstrict -o v cmd/v') + exec('v -cg -cstrict -o v cmd/v') } fn all_code_is_formatted() { - exec('VJOBS=1 v test-cleancode') + exec('VJOBS=1 v test-cleancode') } fn run_sanitizers() { - exec('v -o v2 cmd/v -cflags -fsanitize=undefined') - exec('UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v2 -o v.c cmd/v') + exec('v -o v2 cmd/v -cflags -fsanitize=undefined') + exec('UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./v2 -o v.c cmd/v') } fn build_using_v() { - exec('v -o v2 cmd/v') - exec('./v2 -o v3 cmd/v') + exec('v -o v2 cmd/v') + exec('./v2 -o v3 cmd/v') } fn verify_v_test_works() { - exec('echo \$VFLAGS') - exec('v cmd/tools/test_if_v_test_system_works.v') - exec('./cmd/tools/test_if_v_test_system_works') + exec('echo \$VFLAGS') + exec('v cmd/tools/test_if_v_test_system_works.v') + exec('./cmd/tools/test_if_v_test_system_works') } fn install_iconv() { - exec('brew install libiconv') + exec('brew install libiconv') } fn test_pure_v_math_module() { - exec('v -exclude @vlib/math/*.c.v test vlib/math/') + exec('v -exclude @vlib/math/*.c.v test vlib/math/') } fn self_tests() { - exec('VJOBS=1 v test-self vlib') + exec('VJOBS=1 v test-self vlib') } fn build_examples() { - exec('v build-examples') + exec('v build-examples') } fn build_tetris_autofree() { - exec('v -autofree -o tetris examples/tetris/tetris.v') + exec('v -autofree -o tetris examples/tetris/tetris.v') } fn build_blog_autofree() { - exec('v -autofree -o blog tutorials/building_a_simple_web_blog_with_vweb/code/blog') + exec('v -autofree -o blog tutorials/building_a_simple_web_blog_with_vweb/code/blog') } fn build_examples_prod() { - exec('v -prod examples/news_fetcher.v') + exec('v -prod examples/news_fetcher.v') } fn v_doctor() { - exec('v doctor') + exec('v doctor') } fn v_self_compilation_usecache() { - exec('unset VFLAGS') - exec('v -usecache examples/hello_world.v && examples/hello_world') - exec('v -o v2 -usecache cmd/v') - exec('./v2 -o v3 -usecache cmd/v') - exec('./v3 version') - exec('./v3 -o tetris -usecache examples/tetris/tetris.v') + exec('unset VFLAGS') + exec('v -usecache examples/hello_world.v && examples/hello_world') + exec('v -o v2 -usecache cmd/v') + exec('./v2 -o v3 -usecache cmd/v') + exec('./v3 version') + exec('./v3 -o tetris -usecache examples/tetris/tetris.v') } fn v_self_compilation_parallel_cc() { - exec('v -o v2 -parallel-cc cmd/v') + exec('v -o v2 -parallel-cc cmd/v') } fn test_password_input() { - exec('v test examples/password/') + exec('v test examples/password/') } fn test_readline() { - exec('v test examples/readline/') + exec('v test examples/readline/') } fn test_vlib_skip_unused() { - exec('v -skip-unused test vlib/builtin/ vlib/math vlib/flag/ vlib/os/ vlib/strconv/') + exec('v -skip-unused test vlib/builtin/ vlib/math vlib/flag/ vlib/os/ vlib/strconv/') } - -