Skip to content

Release Notes

Zesk Build release v0.41.2

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.41.1
  • __usageDocumentCached identical updates
  • executableExists was flagging functions as executable when it should not
  • Fixed issues with installer and bashGetRequires not correctly flagging missing functions.
  • Moved decorateThemed to a identical template
  • Adding assets and (gasp) tracking to documentation
  • Fixed leak in __usageDocument which was hidden by cached function help

Zesk Build release v0.41.1

Copyright © 2026 Market Acumen, Inc.

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

Zesk Build release v0.40.3

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.40.2
  • ipLookup now uses urlFetch
  • jsonFileSet now takes an optional value and now allows deleting nodes and keys.
  • urlFetch now supports --timeout of BUILD_URL_TIMEOUT seconds by default (blank is also ok)
  • Added zeskBuildTestHeader identical header for test files -tests.sh - amazing how many of these needed updating

Zesk Build release v0.40.2

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.40.1
  • Modified documentation markers to support a lowercase version of markers now can use {lowerFn} in see templates
  • See { SEE:... } in documentation now caches most results and uses file modification times to ensure everything is kept up to date
  • Added decoratePath --no-app $path to skip the BUILD_HOME mapping when we want to know relative path to HOME only.
  • Added decoratePath --path path=icon option
  • Documentation updates to various hooks, added BUILD_DEBUG documentation and checked for buildDebugEnabled
  • fileTemporaryName addressed BUILD_DEBUG as a ;-delimited list previously, it now handles it as a ,-delimited list
  • Updated documentation for { SEE:validate }
  • Attempt to fix exec 3>&- failure
  • Need a figure a way to embed See: clauses in documentation for the purpose of documentation (escaping or quoting)
  • Added --local to todayDate yesterdayDate and tomorrowDate to support local times when needed. Default is UTC for all of these.
  • ordering tests
  • backgroundProcess appears to be leaking, added a warning
  • Added more verbose file display for the git-pre-commit default hook
  • Added test for gitPreCommitExtensionList
  • GitHub Access token expiration date GITHUB_ACCESS_TOKEN_EXPIRE.sh added
  • Added a character extension to filters to testSuite tags to enable more complex filtering
    • Prefix a tag with + to add the meaning previous AND
    • --tag foo --tag bar means must have foo tag OR must have bar tag
    • --tag foo --tag +bar means must have foo tag AND must have bar tag
    • --skip-tag foo --skip-tag bar means skip any test with foo tag OR with bar tag (either)
    • --skip-tag foo --skip-tag +bar means skip any test with foo tag AND with bar tag (both)
    • The + means AND the previous so you can mix and match for more complex queries
    • --tag a --tag +b --tag c --tag +d --tag +e is (a and b) or (c and d and e)
    • (consider --tag foo+bar syntax maybe? - later)
  • Tuned build setup and added docs-1, docs-2, and docs-4 to test speeds of various hardware
  • documentationMkdocs uses pythonVirtual now
  • Added awsS3Upload
  • bashPromptModule_BuildProject does not modify PATH anymore, do this in your project-activate hook or bin/developer.sh hook
  • 2026
  • Fixed leaks in documentationMkdocs and test
  • Renamed identical-repair.sh to repair.sh and removed many binaries in bin/build which were just wrappers

Zesk Build release v0.40.1

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.40.0
  • Fixed warning about undefined variable in documentationBuild
  • expose documentationMkdocs for other tools
  • Fixed variable issue in approvedSources
  • moving tests around

Zesk Build release v0.40.0

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.39.9
  • You can now run packageMapping --manager brew mysql to get settings on non-native mappings
  • inArray now displays help with no arguments
  • markdown_removeUnfinishedSections -> markdownRemoveUnfinishedSections
  • markdown_FormatList -> markdownFormatList
  • simpleMarkdownToConsole -> markdownToConsole
  • Added buildEnvironmentFiles and tests
  • Test testBashSetScopes determined that set -? flags are sticky and persist when a function exits: -a -b -f -m -p -k -C -T. These options are NOT sticky and are reset upon function exit: -e -E and -u
    • This is useful when resetting state
  • Searched source for set -a and annotated all of them to check they were "undone" correctly prior to exiting
  • Renamed Build to tools internally

Zesk Build release v0.39.9

Mostly bugfixes release.

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.39.8
  • .skip-copyright renamed to bashSanitize.conf and can exist anywhere in your project
  • Added .skip-copyright handling/warning to deprecated.sh
  • Added environments BITBUCKET_REPO_SLUG and local BITBUCKET_WORKSPACE with default workspace (if you develop on your own fork change this to your own environment/files in your fork - ours is marketacumen)
  • Change to identicalCheck to reduce the number of files examined
  • token - (not found) - now works in documentation
  • all.md should now populate
  • "Fixing" docker-compose tests (docker-compose vs docker compose availability)
  • gitTagVersion ignored the --suffix option, fixed

Zesk Build release v0.39.8

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.39.7
  • Add hookRun application-files --not to see which files are NOT included fron the source

Zesk Build release v0.39.7

Copyright © 2026 Market Acumen, Inc.

  • Previous version: v0.39.6
  • Fixed issue with deprecated.sh ignoring APPLICATION_JSON_PREFIX - now honors it if set (optionally)
  • Fixed quoteGrepPattern to support backslashes correctly (PHP work and namespaces, yep.)
  • Added APPLICATION_CODE_IGNORE to ignore those pesky vendor and node_modules dirctorties when needed
  • APPLICATION_CODE_IGNORE testing and added --debug testing for hookRun application-files --debug if you want
  • Fixed issue with grep pattern in plumber, --leak was not working temporarily
  • bitbucket test added

Past releases