Skip to content

Commit

Permalink
ci: run FreeBSD on a VM in github ci, instead of on the Cirrus servic…
Browse files Browse the repository at this point in the history
…e (which stopped working today) (#23692)
  • Loading branch information
spytheman authored Feb 11, 2025
1 parent 2054d46 commit b5d6f40
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 54 deletions.
41 changes: 0 additions & 41 deletions .cirrus.yml

This file was deleted.

69 changes: 69 additions & 0 deletions .github/workflows/freebsd_ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: CI FreeBSD

on:
workflow_dispatch:
push:
paths-ignore:
- '**.md'
- '**.yml'
- 'cmd/tools/**'
- '!**/freebsd_ci.yml'
- '!ci/freebsd_ci.vsh'
- '!cmd/tools/builders/**.v'
pull_request:
paths-ignore:
- '**.md'
- '**.yml'
- 'cmd/tools/**'
- '!**/freebsd_ci.yml'
- '!ci/freebsd_ci.vsh'
- '!cmd/tools/builders/**.v'

### See https://github.com/vmactions/freebsd-vm
### for a description of the used fields here

jobs:
test-on-freebsd-14-2-x86:
runs-on: ubuntu-latest
name: Run a FreeBSD 14.2 x86 VM
steps:
- uses: actions/checkout@v4
- name: Test in FreeBSD
id: test-freebsd-14-2-runs-in-vm
uses: vmactions/freebsd-vm@v1
with:
release: '14.2'
mem: 4096
usesh: true
copyback: false
prepare: pkg install -y git sqlite3 bash
run: |
git config --global --add safe.directory /home/runner/work/v/v
make CFLAGS=
./v symlink
./v run ci/freebsd_ci.vsh all
##### Run a FreeBSD 14 x86 VM:
##### [ 2/25] C: 808.5 ms, R: 3.835 ms vlib/math/big/array_ops_test.v
##### Run a FreeBSD 15 ARM VM
##### [ 1/25] C: 15992.4 ms, R: 146.582 ms vlib/math/big/array_ops_test.v
##### => the overhead is too much to be practical for the full test suite.
##### It is still nice, that it works at all though ...
## test-on-freebsd-15-aarch64:
## runs-on: ubuntu-latest
## name: Run a FreeBSD 15 ARM VM
## steps:
## - uses: actions/checkout@v4
## - name: Test in FreeBSD
## id: test-freebsd-15-runs-in-vm
## uses: vmactions/freebsd-vm@v1
## with:
## release: "15.0"
## arch: aarch64
## ## cpu: 3
## mem: 4096
## usesh: true
## copyback: false
## prepare: pkg install -y git sqlite3 bash
## run: |
## ./.github/workflows/freebsd_ci.sh
19 changes: 12 additions & 7 deletions ci/common/runner.v
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ pub fn exec(command string) {
}
}

const self_command = 'v ' +
os.real_path(os.executable()).replace_once(os.real_path(@VROOT), '').trim_left('/\\') + '.vsh'

pub const is_github_job = os.getenv('GITHUB_JOB') != ''

pub type Fn = fn ()
Expand All @@ -24,12 +27,14 @@ pub mut:
label string
}

pub fn (t Task) run() {
log.info(term.colorize(term.yellow, t.label))
pub fn (t Task) run(tname string) {
cmd := '${self_command} ${tname}'
log.info('Start ${term.colorize(term.yellow, t.label)}, cmd: `${cmd}`')
start := time.now()
t.f()
dt := time.now() - start
log.info('Finished ${term.colorize(term.yellow, t.label)} in ${dt.milliseconds()} ms')
log.info('Finished ${term.colorize(term.yellow, t.label)} in ${dt.milliseconds()} ms, cmd: `${cmd}`')
println('')
}

pub fn run(all_tasks map[string]Task) {
Expand All @@ -43,14 +48,14 @@ pub fn run(all_tasks map[string]Task) {
task_name := os.args[1]
if task_name == 'all' {
log.info(term.colorize(term.green, 'Run everything...'))
for _, t in all_tasks {
t.run()
for tname, t in all_tasks {
t.run(tname)
}
exit(0)
}
t := all_tasks[task_name] or {
eprintln('Unknown task: ${task_name}')
eprintln('Unknown task with name: `${task_name}`')
exit(1)
}
t.run()
t.run(task_name)
}
59 changes: 59 additions & 0 deletions ci/freebsd_ci.vsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import os
import common { Task, exec }

fn v_doctor() {
dump(os.getenv('PATH'))
exec('v doctor')
if common.is_github_job {
exec('freebsd-version')
exec('sysctl hw.model')
exec('sysctl hw.ncpu')
exec('sysctl hw.physmem')
exec('sysctl hw.usermem')
exec('whoami')
exec('pwd')
exec('ls -la')
exec('git log -n1')
exec('cc --version')
}
}

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')
}

fn build_fast_script() {
exec('cd cmd/tools/fast && v fast.v')
}

fn check_math() {
exec('v test vlib/math')
println('Test the math module, using only the pure V versions,')
println(' without the .c.v overrides.')
exec('v -exclude @vlib/math/*.c.v test vlib/math')
}

fn check_compress() {
exec('v test vlib/compress')
}

fn run_essential_tests() {
if common.is_github_job {
exec('VTEST_JUST_ESSENTIAL=1 v test-self')
} else {
exec('VTEST_JUST_ESSENTIAL=1 v -progress test-self')
}
}

const all_tasks = {
'v_doctor': Task{v_doctor, 'Run v doctor'}
'verify_v_test_works': Task{verify_v_test_works, 'Verify that v test works'}
'build_fast_script': Task{build_fast_script, 'Check that building fast.v works'}
'check_math': Task{check_math, 'Check the `math` module works'}
'check_compress': Task{check_compress, 'Check the `compress` module works'}
'run_essential_tests': Task{run_essential_tests, 'Run only the essential tests'}
}

common.run(all_tasks)
10 changes: 5 additions & 5 deletions ci/linux_ci.vsh
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ fn v_doctor() {
//

fn build_v_with_prealloc() {
exec('v -d debug_malloc -d debug_realloc -o v cmd/v')
exec('v -cg -cstrict -o v cmd/v')
exec('v -d debug_malloc -d debug_realloc -o vdebug1 cmd/v')
exec('v -cg -cstrict -o vstrict1 cmd/v')
exec('v -o vrealloc -prealloc cmd/v && ./vrealloc -o v3 cmd/v && ./v3 -o v4 cmd/v')
}

Expand All @@ -68,7 +68,7 @@ fn install_dependencies_for_examples_and_tools_tcc() {

fn test_v_to_c_tcc() {
exec('thirdparty/tcc/tcc.exe -version')
exec('v -cg -o v cmd/v') // ensure vtcc can build itself twice
exec('v -cg -o vtcc cmd/v') // ensure vtcc can build itself twice
}

fn v_self_compilation_tcc() {
Expand Down Expand Up @@ -175,7 +175,7 @@ fn install_dependencies_for_examples_and_tools_gcc() {
}

fn recompile_v_with_cstrict_gcc() {
exec('v -cc gcc -cg -cstrict -o v cmd/v')
exec('v -cc gcc -cg -cstrict -o vstrict cmd/v')
}

fn valgrind_v_c_gcc() {
Expand Down Expand Up @@ -292,7 +292,7 @@ fn install_dependencies_for_examples_and_tools_clang() {
}

fn recompile_v_with_cstrict_clang() {
exec('v -cc clang -cg -cstrict -o v cmd/v')
exec('v -cc clang -cg -cstrict -o vstrict cmd/v')
}

fn valgrind_clang() {
Expand Down
2 changes: 1 addition & 1 deletion ci/macos_ci.vsh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ fn test_cross_compilation() {
}

fn build_with_cstrict() {
exec('v -cg -cstrict -o v cmd/v')
exec('v -cg -cstrict -o vstrict1 cmd/v')
}

fn all_code_is_formatted() {
Expand Down

0 comments on commit b5d6f40

Please sign in to comment.