CI openbsd: 3x batching via NIM_TESTAMENT_BATCH ; overall CI finishes in 21m instead of 34m (#14851)

* CI openbsd: 2x batching via NIM_TESTAMENT_BATCH

* auto-generate .builds/openbsd_x.yml to avoid code duplication

* 3x batching
This commit is contained in:
Timothee Cour 2020-06-30 05:21:30 -07:00 • committed by GitHub
commit 89a15e417d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 138 additions and 0 deletions

View file

@ -1,3 +1,5 @@
## do not edit directly; auto-generated by `nim r tools/ci_generate.nim`
image: openbsd/latest image: openbsd/latest
packages: packages:
- gmake - gmake
@ -11,6 +13,7 @@ packages:
sources: sources:
- https://github.com/nim-lang/Nim - https://github.com/nim-lang/Nim
environment: environment:
NIM_TESTAMENT_BATCH: "0_3"
CC: /usr/bin/clang CC: /usr/bin/clang
tasks: tasks:
- setup: | - setup: |

34
.builds/openbsd_1.yml Normal file
View file

@ -0,0 +1,34 @@
## do not edit directly; auto-generated by `nim r tools/ci_generate.nim`
image: openbsd/latest
packages:
- gmake
- sqlite3
- node
- boehm-gc
- pcre
- sfml
- sdl2
- libffi
sources:
- https://github.com/nim-lang/Nim
environment:
NIM_TESTAMENT_BATCH: "1_3"
CC: /usr/bin/clang
tasks:
- setup: |
cd Nim
git clone --depth 1 -q https://github.com/nim-lang/csources.git
gmake -C csources -j $(sysctl -n hw.ncpuonline)
bin/nim c koch
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv
- test: |
cd Nim
if ! ./koch runCI; then
nim c -r tools/ci_testresults.nim
exit 1
fi
triggers:
- action: email
condition: failure
to: Andreas Rumpf <rumpf_a@web.de>

34
.builds/openbsd_2.yml Normal file
View file

@ -0,0 +1,34 @@
## do not edit directly; auto-generated by `nim r tools/ci_generate.nim`
image: openbsd/latest
packages:
- gmake
- sqlite3
- node
- boehm-gc
- pcre
- sfml
- sdl2
- libffi
sources:
- https://github.com/nim-lang/Nim
environment:
NIM_TESTAMENT_BATCH: "2_3"
CC: /usr/bin/clang
tasks:
- setup: |
cd Nim
git clone --depth 1 -q https://github.com/nim-lang/csources.git
gmake -C csources -j $(sysctl -n hw.ncpuonline)
bin/nim c koch
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv
- test: |
cd Nim
if ! ./koch runCI; then
nim c -r tools/ci_testresults.nim
exit 1
fi
triggers:
- action: email
condition: failure
to: Andreas Rumpf <rumpf_a@web.de>

View file

@ -84,6 +84,9 @@ type
parseErrors*: string # when the spec definition is invalid, this is not empty. parseErrors*: string # when the spec definition is invalid, this is not empty.
unjoinable*: bool unjoinable*: bool
unbatchable*: bool unbatchable*: bool
# whether this test can be batchable via `NIM_TESTAMENT_BATCH`; only very
# few tests are not batchable; the ones that are not could be turned batchable
# by making the dependencies explicit
useValgrind*: bool useValgrind*: bool
timeout*: float # in seconds, fractions possible, timeout*: float # in seconds, fractions possible,
# but don't rely on much precision # but don't rely on much precision

View file

@ -1,6 +1,7 @@
discard """ discard """
action: compile action: compile
cmd: "nim $target --debuginfo --hints:on --define:useNimRtl --app:lib $options $file" cmd: "nim $target --debuginfo --hints:on --define:useNimRtl --app:lib $options $file"
batchable: false
""" """
type type

63
tools/ci_generate.nim Normal file
View file

@ -0,0 +1,63 @@
##[
avoid code duplication in CI pipelines.
For now, this is only used for openbsd, but there is a lot of other code
duplication that could be removed.
## usage
edit this file as needed and then re-generate via:
```
nim r tools/ci_generate.nim
```
]##
import std/strformat
proc genCIopenbsd(batch: int, num: int): string =
result = fmt"""
## do not edit directly; auto-generated by `nim r tools/ci_generate.nim`
image: openbsd/latest
packages:
- gmake
- sqlite3
- node
- boehm-gc
- pcre
- sfml
- sdl2
- libffi
sources:
- https://github.com/nim-lang/Nim
environment:
NIM_TESTAMENT_BATCH: "{batch}_{num}"
CC: /usr/bin/clang
tasks:
- setup: |
cd Nim
git clone --depth 1 -q https://github.com/nim-lang/csources.git
gmake -C csources -j $(sysctl -n hw.ncpuonline)
bin/nim c koch
echo 'export PATH=$HOME/Nim/bin:$PATH' >> $HOME/.buildenv
- test: |
cd Nim
if ! ./koch runCI; then
nim c -r tools/ci_testresults.nim
exit 1
fi
triggers:
- action: email
condition: failure
to: Andreas Rumpf <rumpf_a@web.de>
"""
proc main()=
let num = 3
# if you reduce this, make sure to remove files that shouldn't be generated,
# or better, do the cleanup logic here eg: `rm .builds/openbsd_*`
for i in 0..<num:
let file = fmt".builds/openbsd_{i}.yml"
let code = genCIopenbsd(i, num)
writeFile(file, code)
when isMainModule:
main()