Skip to content

Zesk Build release v0.41.0

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.40.3

validate updated in code everywhere. Any functions which look like usageArgumentFoo are now deprecated.

Sped up the template documentation which in general speeds up the build process, hopefully. New phase of build now includes building the help cache, now stored in ./bin/build/documentation/functionName.sh for function settings.

Also test finding and searching is cached and faster in a test file located at ./test/tests.index which is generated as part of the commit.

Made an effort this release to rename deprecated functions whose prefixes (e.g. insideDocker -> dockerInside) do not match their related module. So a lot has changed used deprecated.sh to upgrade your scripts.

testTools is now deprecated and all test and assertions functions are dynamically loaded as needed - so they are now universally available.

isExecutable now uses which as it was returning true for all isCallable and no easy way to disambiguate.

testSuite output formats

testSuite now outputs three formats: junit, tap, and a statistics output showing test timings (--stats), all are written using hooks.

bashDebugInterruptFile sample output

bashDebugInterruptFile now outputs an error to stderr so it's clear that it's working. Errors look like:

user@host ~/dev/build > CI=1 bin/tools.sh buildDocumentationExtractionUpdate --quick
#1/631 - alignLeft 0.273 seconds
#2/631 - alignRight 0.263 seconds
^C
+=================+=====+
| DEBUG INTERRUPT | 130 |
+=================+=====+

Validate changes

  • validate is the new usageArgument and is in use universally

Deprecations and Renamed Functions (old functions are deprecated)

  • Removed BUILD_COLORS_MODE and added consoleConfigureDecorate as a substitute (Hey, look at when it was added!)
  • markdownFormatList should output fewer stray blank list entries
  • alignRight -> textAlignRight
  • alignLeft -> textAlignLeft
  • cachedShaPipe -> shaPipe --cache cacheDirectory
  • debugOpenFiles -> filesOpenStatus
  • findUncaughtAssertions -> bashFindUncaughtAssertions
  • hasColors -> consoleHasColors
  • hasConsoleAnimation -> consoleHasAnimation
  • insideDocker -> dockerInside
  • isAbsolutePath -> pathIsAbsolute
  • makeShellFilesExecutable -> bashMakeExecutable
  • beginsWith was removed, use stringBegins (it's the same function)
  • echoBar -> consoleLine
  • yesterdayDate -> dateYesterday
  • todayDate -> dateToday
  • tomorrowDate -> dateTomorrow
  • extensionLists -> fileExtensionLists
  • whichHook -> hookFind
  • whichExists -> executableExists
  • repeat -> textRepeat ** NOT ADDED TO DEPRECATED PROCESSING DUE TO WORD USAGE AS COMMON **
  • lineFill -> consoleHeadingLine
  • boxedHeading -> consoleHeadingBoxed
  • environmentAddFile -> buildEnvironmentAdd
  • lineFill -> consoleHeadingLine
  • plainLength -> consolePlainLength
  • mapReturn -> returnMap
  • maximumFieldLength -> fileFieldMaximum
  • maximumLineLength -> fileLineMaximum
  • stripAnsi -> consoleToPlain

  • Added deprecated updates (to mapping file) to catchReturn for internal functions ( catchEnvironment "$handler" any -> catchReturn "$handler" any)

  • All functions usageArgument... are deprecated and will be replaced by the deprecated binary - if you wish to keep using these, include bin/build/tools/usage-deprecated.sh to temporarily keep access to these. They will be removed in a future release.
  • Removed all references to # Usage: in functions - the argument definition tends to be more accurate
  • Abandoned buildFastFiles and sugar-fast.sh - too soon to optimize this
  • BUILD_COVERAGE_REQUIRED_DATE has passed and so it has been removed

Bug fixes

  • Removed backgroundProcess from core bin/developer.sh - need to test better for longer/slower processes
  • pathConfigure and pathRemove now sanitize directory names to remove trailing slashes, helps avoid duplicates
  • Fixed buildEnvironmentNames and misspelled template variable GASH_SOURCE
  • Fixed a bug in listAppend when adding strings whose ends match - would be a no-op
  • Added --debug flag to pipWrapper to hide debugging

New Features

  • Added timingElapsed
  • Added consoleConfigureDecorate
  • Added shfmt to pre-commit hook for bash (only if installed)
  • Added some optimizations to reloadChanges prompt module to make it less slow
  • Added --version to _installRemotePackage to enable fixed version installations for live stable environments
  • Updated semantics of version-function and url-function in _installRemotePath to support new passed in requested version. Blank if latest is requested.
  • Changed which usage to command -v but command -v caches binaries which have moved, so updated executableExists to check path and existence. shopt -u checkhash may fix this but do not want to worry about save/restore.
  • bin/build/install-bin-build.sh --version v0.40.3 now works with the v0.41.0 installer and greater
  • _installRemotePackage supports usage via a pipe (remote install) and avoids writing a file called main in this case
  • Added decorateInitialized to better support correct setup for tools which configure their color mode
  • bashDocumentationExtract now requires sourceFile and supports cached values in builds in the bin/build/documentation/ directory with new flags.
  • Fixed the ordering of most documentation arguments so it's now: Type. Required. Type. Optional.
  • Added cached documentation to bin/build/documentation to speed this up as it never changes each build

  • buildUsageCompile optimizations

  • Added some profiling tools in the identical directory: profileFunctionHead profileFunctionMarker profileFunctionMarkerOthers and profileFunctionTail - expects two local variables $flag and $flags to trigger the profiler
  • Fixed an issue in consoleLineFill; had a bug where it would prevent exiting if the internal function was interrupted
  • Moved daemontools service template files into bin/build/identical to keep code space bin/build/tools clean of non-running code
  • Console output is now cached in bin/build/documentation for help files
  • BUILD_DEBUG for usage-profile added to speed up usageDocument
  • Changed the semantic of --token in identicalCheck - you can now pass tokens as arguments without the --token
  • bashSanitize now uses ignore paths for debugging check exclusion as well
  • Looked at building all of Zesk Build into a single .sh file for core source with supporting code loaded to see if it speeds up the load time.
  • Reorganized the decoration functions internally to separate different concerns in the code
  • decorate each now supports a CommaDelimitedList for style, so decorate each BOLD,blue works. style is expanded into command line arguments to each style command separated by commas.
  • Removed applicationFile from function source extraction, added sourceHash to hopefully avoid regeneration of compiled usage templates when modification dates change
  • --value can be blank for buildEnvironmentAdd
  • characterClasses now supports taking a character argument, and characterClassReport is now much faster
  • assert functions now available without calling testTools and testTools is deprecated; now uses the same loading mechanism as the rest of Zesk Build __testLoader for the internal nerd.
  • outputTrigger now outputs the file as-is, and without --verbose does not output an error
  • bashSanitize is much better about filtering files
  • source declare and echo now return 0 when passed to isExecutable
  • isExecutable now uses which instead of command -v due to issues identifying binaries vs. functions
  • Within a hook call the environment variable HOOK_NAME is set to the current hook code name, so HOOK_NAME=test-fail when the script bin/hooks/test-fail.sh is run, for example. This makes it easier to run --next hooks without copy/paste errors.
  • Internally, __functionLoader now excludes hooks directories to allow us to add in hooks for junit and tap test error handling, etc. Basically any directory in bin/build/tools which is named hooks is ignored when loaded as a subdirectory during dynamic code loading. Not super important to most but just noted here for posterity.
  • testSuite now supports junit output as well as running tests after failures
  • Using IDENTICAL hookRunOptionalNext
  • Added muzzleReturn utility
  • Added printfOutputEmpty utility
  • Heyyyyy ... diff returns non-zero when files do not match so when outputting differences make sure to catch that error code. Wink. Maybe add a utility for this as diff differs between platforms. (GNU vs. non-GNU I assume.)
  • Updated all occurrences of diff and diff -u and replaced with new filesAreIdentical where appropriate; otherwise standardize on diff -U0 for most diffs and diff -U3 for showing context. (May change.)
  • Assertion counts are now output
  • Semantics of decorate each code a b c -- d and decorate quote -- -- now work properly.
  • Adding --index-file to buildTestSuite to speed up tests
  • testSuite run cleanup was improved (deletes temp files), and error output to test failures should be more verbose.
  • __usageDocumentCached was not outputting error messages, it now does
  • Split off __usageMessage and __usageMessageStyle for usage outputs