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:
parent
04deb6c942
commit
89a15e417d
6 changed files with 138 additions and 0 deletions
|
|
@ -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
34
.builds/openbsd_1.yml
Normal 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
34
.builds/openbsd_2.yml
Normal 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>
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
63
tools/ci_generate.nim
Normal 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()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue