diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3a5c96d..0ff948d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,4 +1,4 @@ -name: boat +name: boat-ci on: push: branches: [develop, deploy] diff --git a/ADRs/boat_adr-ctas.png b/ADRs/boat_adr-ctas.png index dc20a5f..b480c48 100644 Binary files a/ADRs/boat_adr-ctas.png and b/ADRs/boat_adr-ctas.png differ diff --git a/ADRs/boat_adr-transports.png b/ADRs/boat_adr-transports.png index fb4ab58..6629553 100644 Binary files a/ADRs/boat_adr-transports.png and b/ADRs/boat_adr-transports.png differ diff --git a/ADRs/boat_adr.drawio b/ADRs/boat_adr.drawio index 344d645..0438d3b 100644 --- a/ADRs/boat_adr.drawio +++ b/ADRs/boat_adr.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/config.nims b/config.nims index 6d497c4..bdb35a0 100644 --- a/config.nims +++ b/config.nims @@ -3,6 +3,7 @@ --define:nimStrictDelete --define:ssl --define:threadsafe +--define:useMalloc --hints:on --mm:orc --multimethods:on diff --git a/src/boat/private/Config.nim b/src/boat/private/Config.nim index 040572c..4890b95 100644 --- a/src/boat/private/Config.nim +++ b/src/boat/private/Config.nim @@ -21,10 +21,7 @@ import std/[ strutils, ] -# TODO: simply importing FileManager causes valgrind to throw -# ^ weird cuz nothing is in there but stubs -import BoatErrors, BoatConstants - +import BoatErrors, BoatConstants, FileManager type Config* = ref object of RootObj use*: string ## \ diff --git a/src/boat/private/FileManager.nim b/src/boat/private/FileManager.nim index b0188e1..9468fc6 100644 --- a/src/boat/private/FileManager.nim +++ b/src/boat/private/FileManager.nim @@ -3,55 +3,59 @@ ## =========== ## Saving to and Retrieving from disk -import ../../../bdd +# valgrind throws if this file is imported into any other file +import std/asyncdispatch # causes valgrind to throw +import std/threadpool # causes valgrind to throw -import std/[ - asyncdispatch, - locks, - threadpool, - ] +# import ../../../bdd -import BoatConstants, BoatErrors +# import std/[ +# asyncdispatch, +# locks, +# threadpool, +# ] + +# import BoatConstants, BoatErrors # export asyncdispatch -type SaveType* = enum - parsedConfig, - upsertManifest, - remoteManifest, - -proc fileDir*(self: SaveType): string = - result = case self - of parsedConfig, upsertManifest: cacheDir - else: tempDir - -proc toDisk*[T]( - self: SaveType, - fname: string, - data: T, - ): Future[string] {.async.} = - ## persists data to cache or temp dir and returns path - ## if file already exists, will overwrite if content is different - raise tddError - # file exists ? - # content is same? return true - # persist data - # lock - # save as self.fileDir / hash(fname) - # unlock - # return success - result = true - -proc fromDisk*[T]( - self: SaveType, - fname: string, - to: T, - errorNotFound = false - ): Future[T] {.async.} = - ## parse to T and return T - ## throws if errorNotFound is true; else returns empty T - raise tddError - # yield readAsync self.fileDir / hash(fname) - # if file not found / cant be read then throw if errorNotFound is true - if errorNotFound and "cant load file" is string: raise fileLoadError - else: result = new(to) +# type SaveType* = enum +# parsedConfig, +# upsertManifest, +# remoteManifest, + +# proc fileDir*(self: SaveType): string = +# result = case self +# of parsedConfig, upsertManifest: cacheDir +# else: tempDir + +# proc toDisk*[T]( +# self: SaveType, +# fname: string, +# data: T, +# ): Future[string] {.async.} = +# ## persists data to cache or temp dir and returns path +# ## if file already exists, will overwrite if content is different +# raise tddError +# # file exists ? +# # content is same? return true +# # persist data +# # lock +# # save as self.fileDir / hash(fname) +# # unlock +# # return success +# result = true + +# proc fromDisk*[T]( +# self: SaveType, +# fname: string, +# to: T, +# errorNotFound = false +# ): Future[T] {.async.} = +# ## parse to T and return T +# ## throws if errorNotFound is true; else returns empty T +# raise tddError +# # yield readAsync self.fileDir / hash(fname) +# # if file not found / cant be read then throw if errorNotFound is true +# if errorNotFound and "cant load file" is string: raise fileLoadError +# else: result = new(to) diff --git a/src/boat/private/captain/manifest.nim.ini b/src/boat/private/captain/manifest.nim.ini index 106bac9..c7b4030 100644 --- a/src/boat/private/captain/manifest.nim.ini +++ b/src/boat/private/captain/manifest.nim.ini @@ -1,22 +1,68 @@ ; FYI ; 0 = false, 1 = true +; standard options expected by boat +; entities can define additional and/or override existing options + -; captains section -; each line represents an A, B or C to load -; A. dir path containing a `manifest.nim.ini` -; B. file path pointing to `manifest.nim.ini` -; C. a URL pointing to a `manifest.nim.ini` -[captains] -; TODO: confirm $HOME can be parsed to absolute path -; ^ FYI: $HOME wont be available for accounts without a $HOME dir (e.g. some sys accounts) -; ^^ supporting these accounts will likely increase scope -; ^^ check implementation of nimlangs getHomeDir() which may have already solved this problem -; ^^^ else move this to a post-alpha issue on the project board -$HOME/boat - - -; globals section ; arbitrary constraints and requirements +; affects boat globally [globals] -raiseManifestNotFound=0 ; e.g. during config.load() -autoLoadSavedConfs=1 ; will load any previously saved confs from disk +; come back later + + +; affects all logging operations +[logger] +; come back later + + +; default config options, affects all config types +; prefer overriding options via a config type section +; captainslog, gunner, manifest, vessel, +[config] +; come back later + + +[captainslog] +; come back later + + +[gunner] +; come back later + + +[manifest] +captain=$HOME/boat + + +[vessel] +; come back later + + +; default script options, affects all script types +; prefer to override options via a script type +; duty, transport +[script] +; come back later + + +[duty] +; come back later + + +[transport] +; come back later + + +; default workflow options, affects all workflow types +; prefer to override options via a workflow type +; deck, pipeline +[workflow] +; come back later + + +[deck] +; come back later + + +[pipeline] +; come back later diff --git a/testresults.html b/testresults.html index 482d3df..d047577 100644 --- a/testresults.html +++ b/testresults.html @@ -126,9 +126,9 @@

Testament Test Results Nim Tester

Hostname
spaceship
Git Commit
-
46144e3b11c
+
3e23d8b350d
Branch ref.
-
manifest
+
bug/valgrind-fails-on-asyncdispatch-and-threadpool-import
All Tests
@@ -139,7 +139,7 @@

Testament Test Results Nim Tester

Successful Tests
- 2 (100.00%) + 0 (0.00%)
Skipped Tests
@@ -149,7 +149,7 @@

Testament Test Results Nim Tester

Failed Tests
- 0 (0.00%) + 2 (100.00%)
@@ -201,64 +201,201 @@

Testament Test Results Nim Tester

-
+
-
+
Name
-
tests/boat/tmain.nim c
+
tests/boat/tmain.nim c
Category
boat
Timestamp
unknown
Nim Action
-
run
+
run
Nim Backend Target
c
Code
-
reSuccess
+
reExitcodesDiffer
-

No output details

+
+ + + + + + + + + + + + + +
ExpectedActual
exitcode: 0
exitcode: 1
+
+Output:
+==410286== Memcheck, a memory error detector
+==410286== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
+==410286== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
+==410286== Command: tests/boat/tmain
+==410286== 
+All HANDS! cat o'nine tails! blue peter! OMG... landlubber
+==410286== 
+==410286== HEAP SUMMARY:
+==410286==     in use at exit: 198,513 bytes in 33 blocks
+==410286==   total heap usage: 3,184 allocs, 3,151 frees, 314,043 bytes allocated
+==410286== 
+==410286== 0 bytes in 1 blocks are definitely lost in loss record 1 of 10
+==410286==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
+==410286==    by 0x4005A22: malloc (rtld-malloc.h:56)
+==410286==    by 0x4005A22: _dl_find_object_update (dl-find_object.c:791)
+==410286==    by 0x400ECCF: dl_open_worker_begin (dl-open.c:735)
+==410286==    by 0x49E2C27: _dl_catch_exception (dl-error-skeleton.c:208)
+==410286==    by 0x400DF99: dl_open_worker (dl-open.c:782)
+==410286==    by 0x49E2C27: _dl_catch_exception (dl-error-skeleton.c:208)
+==410286==    by 0x400E34D: _dl_open (dl-open.c:883)
+==410286==    by 0x48FE6BB: dlopen_doit (dlopen.c:56)
+==410286==    by 0x49E2C27: _dl_catch_exception (dl-error-skeleton.c:208)
+==410286==    by 0x49E2CF2: _dl_catch_error (dl-error-skeleton.c:227)
+==410286==    by 0x48FE1AD: _dlerror_run (dlerror.c:138)
+==410286==    by 0x48FE747: dlopen_implementation (dlopen.c:71)
+==410286==    by 0x48FE747: dlopen@@GLIBC_2.34 (dlopen.c:81)
+==410286== 
+==410286== 3,264 bytes in 12 blocks are possibly lost in loss record 9 of 10
+==410286==    at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
+==410286==    by 0x40147D9: calloc (rtld-malloc.h:44)
+==410286==    by 0x40147D9: allocate_dtv (dl-tls.c:375)
+==410286==    by 0x40147D9: _dl_allocate_tls (dl-tls.c:634)
+==410286==    by 0x4903834: allocate_stack (allocatestack.c:430)
+==410286==    by 0x4903834: pthread_create@@GLIBC_2.34 (pthread_create.c:647)
+==410286==    by 0x11422E: createThread__pureZconcurrencyZthreadpool_489 (in /home/poop/git/private/nirv/boat/tests/boat/tmain)
+==410286==    by 0x1199D9: atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot12atslibatspureatsconcurrencyatsthreadpooldotnim_Init000 (in /home/poop/git/private/nirv/boat/tests/boat/tmain)
+==410286==    by 0x10A5A0: main (in /home/poop/git/private/nirv/boat/tests/boat/tmain)
+==410286== 
+==410286== LEAK SUMMARY:
+==410286==    definitely lost: 0 bytes in 1 blocks
+==410286==    indirectly lost: 0 bytes in 0 blocks
+==410286==      possibly lost: 3,264 bytes in 12 blocks
+==410286==    still reachable: 195,249 bytes in 20 blocks
+==410286==         suppressed: 0 bytes in 0 blocks
+==410286== Reachable blocks (those to which a pointer was found) are not shown.
+==410286== To see them, rerun with: --leak-check=full --show-leak-kinds=all
+==410286== 
+==410286== For lists of detected and suppressed errors, rerun with: -s
+==410286== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+
-
+
-
+
Name
-
tests/config/tconfig.nim c
+
tests/config/tconfig.nim c
Category
config
Timestamp
unknown
Nim Action
-
run
+
run
Nim Backend Target
c
Code
-
reSuccess
+
reExitcodesDiffer
-

No output details

+
+ + + + + + + + + + + + + +
ExpectedActual
exitcode: 0
exitcode: 1
+
+Output:
+==410292== Memcheck, a memory error detector
+==410292== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
+==410292== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
+==410292== Command: tests/config/tconfig
+==410292== 
+ref Exception(parent: nil, name: "OSError", msg: "No such file or directory\n
+Additional info: 192.168.1.1", trace: @[StackTraceEntry(procname: "raiseOSError", line: 95, filename: "oserr.nim", frameMsg: "")], up: nil)
+ref Exception(parent: nil, name: "OSError", msg: "No such file or directory\n
+Additional info: http://www.not.https", trace: @[StackTraceEntry(procname: "raiseOSError", line: 95, filename: "oserr.nim", frameMsg: "")], up: ref Exception(parent: nil, name: "OSError", msg: "No such file or directory\n
+Additional info: 192.168.1.1", trace: @[StackTraceEntry(procname: "raiseOSError", line: 95, filename: "oserr.nim", frameMsg: "")], up: nil))
+==410292== 
+==410292== HEAP SUMMARY:
+==410292==     in use at exit: 215,387 bytes in 40 blocks
+==410292==   total heap usage: 3,609 allocs, 3,569 frees, 398,536 bytes allocated
+==410292== 
+==410292== 0 bytes in 1 blocks are definitely lost in loss record 1 of 14
+==410292==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
+==410292==    by 0x4005A22: malloc (rtld-malloc.h:56)
+==410292==    by 0x4005A22: _dl_find_object_update (dl-find_object.c:791)
+==410292==    by 0x400ECCF: dl_open_worker_begin (dl-open.c:735)
+==410292==    by 0x49E2C27: _dl_catch_exception (dl-error-skeleton.c:208)
+==410292==    by 0x400DF99: dl_open_worker (dl-open.c:782)
+==410292==    by 0x49E2C27: _dl_catch_exception (dl-error-skeleton.c:208)
+==410292==    by 0x400E34D: _dl_open (dl-open.c:883)
+==410292==    by 0x48FE6BB: dlopen_doit (dlopen.c:56)
+==410292==    by 0x49E2C27: _dl_catch_exception (dl-error-skeleton.c:208)
+==410292==    by 0x49E2CF2: _dl_catch_error (dl-error-skeleton.c:227)
+==410292==    by 0x48FE1AD: _dlerror_run (dlerror.c:138)
+==410292==    by 0x48FE747: dlopen_implementation (dlopen.c:71)
+==410292==    by 0x48FE747: dlopen@@GLIBC_2.34 (dlopen.c:81)
+==410292== 
+==410292== 3,264 bytes in 12 blocks are possibly lost in loss record 12 of 14
+==410292==    at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
+==410292==    by 0x40147D9: calloc (rtld-malloc.h:44)
+==410292==    by 0x40147D9: allocate_dtv (dl-tls.c:375)
+==410292==    by 0x40147D9: _dl_allocate_tls (dl-tls.c:634)
+==410292==    by 0x4903834: allocate_stack (allocatestack.c:430)
+==410292==    by 0x4903834: pthread_create@@GLIBC_2.34 (pthread_create.c:647)
+==410292==    by 0x11633E: createThread__pureZconcurrencyZthreadpool_489 (in /home/poop/git/private/nirv/boat/tests/config/tconfig)
+==410292==    by 0x127249: atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotchoosenimatstoolchainsatsnimminus1dot6dot12atslibatspureatsconcurrencyatsthreadpooldotnim_Init000 (in /home/poop/git/private/nirv/boat/tests/config/tconfig)
+==410292==    by 0x12831C: PreMain (in /home/poop/git/private/nirv/boat/tests/config/tconfig)
+==410292==    by 0x10A7E0: main (in /home/poop/git/private/nirv/boat/tests/config/tconfig)
+==410292== 
+==410292== LEAK SUMMARY:
+==410292==    definitely lost: 0 bytes in 1 blocks
+==410292==    indirectly lost: 0 bytes in 0 blocks
+==410292==      possibly lost: 3,264 bytes in 12 blocks
+==410292==    still reachable: 212,123 bytes in 27 blocks
+==410292==         suppressed: 0 bytes in 0 blocks
+==410292== Reachable blocks (those to which a pointer was found) are not shown.
+==410292== To see them, rerun with: --leak-check=full --show-leak-kinds=all
+==410292== 
+==410292== For lists of detected and suppressed errors, rerun with: -s
+==410292== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+
@@ -267,7 +404,7 @@

config<

Report generated by: testament – Nim Tester
- Made with Nim. Generated on: 2023-03-14 01:46:53 UTC-07:00 + Made with Nim. Generated on: 2023-03-15 14:41:59 UTC-07:00

diff --git a/tests/boat/tmain.nim b/tests/boat/tmain.nim index 714040e..1f79ae3 100644 --- a/tests/boat/tmain.nim +++ b/tests/boat/tmain.nim @@ -1,9 +1,10 @@ discard """ action: "run" +cmd: "nim $target --hints:on -d:testing --mm:orc -d:useMalloc --nimblePath:build/deps/pkgs $options $file" output: ''' All HANDS! cat o'nine tails! blue peter! OMG... landlubber ''' -valgrind: true +valgrind: "true" """ import boat diff --git a/tests/config.nims b/tests/config.nims index 310c9f3..4ae9604 100644 --- a/tests/config.nims +++ b/tests/config.nims @@ -8,6 +8,8 @@ --define:nimPreviewJsonutilsHoleyEnum --define:nimUnittestColor:off --define:nimUnittestOutputLevel:PRINT_FAILURES +--define:useMalloc # required for valgrind --excessiveStackTrace:off +--mm:orc # required for valgrind --path:"$projectDir/../../src" --processing:off diff --git a/tests/config/tconfig.nim b/tests/config/tconfig.nim index 2c8874d..09768f1 100644 --- a/tests/config/tconfig.nim +++ b/tests/config/tconfig.nim @@ -1,7 +1,8 @@ discard """ action: "run" -valgrind: true +cmd: "nim $target --hints:on -d:testing --mm:orc -d:useMalloc --nimblePath:build/deps/pkgs $options $file" exitcode: 0 +valgrind: true """ import ../../bdd