Release Notes
Zesk Build release v0.41.2
Copyright © 2026 Market Acumen, Inc.
- Previous version: v0.41.1
__usageDocumentCachedidentical updatesexecutableExistswas flagging functions as executable when it should not- Fixed issues with installer and
bashGetRequiresnot correctly flagging missing functions. - Moved
decorateThemedto a identical template - Adding assets and (gasp) tracking to documentation
- Fixed leak in
__usageDocumentwhich was hidden by cached function help
Zesk Build release v0.41.1
Copyright © 2026 Market Acumen, Inc.
- Previous version: v0.41.0
- Added
cpuCount - Foreign
__usageDocumentCachedwould cause an error, now does not - Fixed
deleteFileserror inapprovedSources - Some documentation updates and cleanup, added strftime Cheatsheet
- Fixed issue with
reloadChangesgetting false positive each run bashDebugInterruptFile --already-erroradded- Added
dumpEnvironment --prefixmatch - Added
__functionSettingsto grant access to compiled function settings
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
validateis the newusageArgumentand is in use universally
Deprecations and Renamed Functions (old functions are deprecated)
- Removed
BUILD_COLORS_MODEand addedconsoleConfigureDecorateas a substitute (Hey, look at when it was added!) markdownFormatListshould output fewer stray blank list entriesalignRight->textAlignRightalignLeft->textAlignLeftcachedShaPipe->shaPipe --cache cacheDirectorydebugOpenFiles->filesOpenStatusfindUncaughtAssertions->bashFindUncaughtAssertionshasColors->consoleHasColorshasConsoleAnimation->consoleHasAnimationinsideDocker->dockerInsideisAbsolutePath->pathIsAbsolutemakeShellFilesExecutable->bashMakeExecutablebeginsWithwas removed, usestringBegins(it's the same function)echoBar->consoleLineyesterdayDate->dateYesterdaytodayDate->dateTodaytomorrowDate->dateTomorrowextensionLists->fileExtensionListswhichHook->hookFindwhichExists->executableExistsrepeat->textRepeat** NOT ADDED TO DEPRECATED PROCESSING DUE TO WORD USAGE AS COMMON **lineFill->consoleHeadingLineboxedHeading->consoleHeadingBoxedenvironmentAddFile->buildEnvironmentAddlineFill->consoleHeadingLineplainLength->consolePlainLengthmapReturn->returnMapmaximumFieldLength->fileFieldMaximummaximumLineLength->fileLineMaximum-
stripAnsi->consoleToPlain -
Added deprecated updates (to mapping file) to
catchReturnfor 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, includebin/build/tools/usage-deprecated.shto 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
buildFastFilesandsugar-fast.sh- too soon to optimize this BUILD_COVERAGE_REQUIRED_DATEhas passed and so it has been removed
Bug fixes
- Removed
backgroundProcessfrom corebin/developer.sh- need to test better for longer/slower processes pathConfigureandpathRemovenow sanitize directory names to remove trailing slashes, helps avoid duplicates- Fixed
buildEnvironmentNamesand misspelled template variableGASH_SOURCE - Fixed a bug in
listAppendwhen adding strings whose ends match - would be a no-op - Added
--debugflag topipWrapperto hide debugging
New Features
- Added
timingElapsed - Added
consoleConfigureDecorate - Added
shfmtto pre-commit hook for bash (only if installed) - Added some optimizations to
reloadChangesprompt module to make it less slow - Added
--versionto_installRemotePackageto enable fixed version installations for live stable environments - Updated semantics of
version-functionandurl-functionin_installRemotePathto support new passed in requested version. Blank if latest is requested. - Changed
whichusage tocommand -vbutcommand -vcaches binaries which have moved, so updatedexecutableExiststo check path and existence.shopt -u checkhashmay fix this but do not want to worry about save/restore. bin/build/install-bin-build.sh --version v0.40.3now works with thev0.41.0installer and greater_installRemotePackagesupports usage via a pipe (remote install) and avoids writing a file calledmainin this case- Added
decorateInitializedto better support correct setup for tools which configure their color mode bashDocumentationExtractnow requiressourceFileand supports cached values in builds in thebin/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/documentationto speed this up as it never changes each build- See internal buildUsageCompile - Extract and build the bin/build/documentation/ cache (source)
-
buildUsageCompileoptimizations - Added some profiling tools in the identical directory:
profileFunctionHeadprofileFunctionMarkerprofileFunctionMarkerOthersandprofileFunctionTail- expects two local variables$flagand$flagsto trigger the profiler - Fixed an issue in
consoleLineFill; had a bug where it would prevent exiting if the internal function was interrupted - Moved
daemontoolsservice template files intobin/build/identicalto keep code spacebin/build/toolsclean of non-running code - Console output is now cached in
bin/build/documentationfor help files BUILD_DEBUGforusage-profileadded to speed upusageDocument- Changed the semantic of
--tokeninidenticalCheck- you can now pass tokens as arguments without the--token bashSanitizenow uses ignore paths fordebuggingcheck exclusion as well- Looked at building all of Zesk Build into a single
.shfile 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 eachnow supports aCommaDelimitedListfor style, sodecorate each BOLD,blueworks.styleis expanded into command line arguments to each style command separated by commas.- Removed
applicationFilefrom function source extraction, addedsourceHashto hopefully avoid regeneration of compiled usage templates when modification dates change --valuecan be blank forbuildEnvironmentAddcharacterClassesnow supports taking a character argument, andcharacterClassReportis now much fasterassertfunctions now available without callingtestToolsandtestToolsis deprecated; now uses the same loading mechanism as the rest of Zesk Build__testLoaderfor the internal nerd.outputTriggernow outputs the file as-is, and without--verbosedoes not output an errorbashSanitizeis much better about filtering filessourcedeclareandechonow return 0 when passed toisExecutableisExecutablenow useswhichinstead ofcommand -vdue to issues identifying binaries vs. functions- Within a hook call the environment variable
HOOK_NAMEis set to the current hook code name, soHOOK_NAME=test-failwhen the scriptbin/hooks/test-fail.shis run, for example. This makes it easier to run--nexthooks without copy/paste errors. - Internally,
__functionLoadernow excludeshooksdirectories to allow us to add in hooks forjunitandtaptest error handling, etc. Basically any directory inbin/build/toolswhich is namedhooksis ignored when loaded as a subdirectory during dynamic code loading. Not super important to most but just noted here for posterity. testSuitenow supportsjunitoutput as well as running tests after failures- Using
IDENTICAL hookRunOptionalNext - Added
muzzleReturnutility - Added
printfOutputEmptyutility - Heyyyyy ...
diffreturns 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 asdiffdiffers between platforms. (GNU vs. non-GNU I assume.) - Updated all occurrences of
diffanddiff -uand replaced with newfilesAreIdenticalwhere appropriate; otherwise standardize ondiff -U0for most diffs anddiff -U3for showing context. (May change.) - Assertion counts are now output
- Semantics of
decorate each code a b c -- danddecorate quote -- --now work properly. - Adding
--index-filetobuildTestSuiteto speed up tests testSuiterun cleanup was improved (deletes temp files), and error output to test failures should be more verbose.__usageDocumentCachedwas not outputting error messages, it now does- Split off
__usageMessageand__usageMessageStylefor usage outputs
Zesk Build release v0.40.3
Copyright © 2026 Market Acumen, Inc.
- Previous version: v0.40.2
ipLookupnow usesurlFetchjsonFileSetnow takes an optionalvalueand now allows deleting nodes and keys.urlFetchnow supports--timeoutofBUILD_URL_TIMEOUTseconds by default (blank is also ok)- Added
zeskBuildTestHeaderidentical 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 $pathto skip theBUILD_HOMEmapping when we want to know relative path toHOMEonly. - Added
decoratePath --path path=iconoption - Documentation updates to various hooks, added
BUILD_DEBUGdocumentation and checked forbuildDebugEnabled fileTemporaryNameaddressedBUILD_DEBUGas 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
--localtotodayDateyesterdayDateandtomorrowDateto support local times when needed. Default is UTC for all of these. - ordering tests
backgroundProcessappears to be leaking, added a warning- Added more verbose file display for the
git-pre-commitdefault hook - Added test for
gitPreCommitExtensionList - GitHub Access token expiration date
GITHUB_ACCESS_TOKEN_EXPIRE.shadded - Added a character extension to filters to
testSuitetags to enable more complex filtering- Prefix a tag with
+to add the meaningprevious AND --tag foo --tag barmeans must havefootag OR must havebartag--tag foo --tag +barmeans must havefootag AND must havebartag--skip-tag foo --skip-tag barmeans skip any test withfootag OR withbartag (either)--skip-tag foo --skip-tag +barmeans skip any test withfootag AND withbartag (both)- The
+meansAND the previousso you can mix and match for more complex queries --tag a --tag +b --tag c --tag +d --tag +eis(a and b) or (c and d and e)- (consider
--tag foo+barsyntax maybe? - later)
- Prefix a tag with
- Tuned build setup and added
docs-1,docs-2, anddocs-4to test speeds of various hardware documentationMkdocsusespythonVirtualnow- Added
awsS3Upload bashPromptModule_BuildProjectdoes not modifyPATHanymore, do this in yourproject-activatehook orbin/developer.shhook2026- Fixed leaks in
documentationMkdocsand test - Renamed
identical-repair.shtorepair.shand removed many binaries inbin/buildwhich 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
documentationMkdocsfor 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 mysqlto get settings on non-native mappings inArraynow displays help with no argumentsmarkdown_removeUnfinishedSections->markdownRemoveUnfinishedSectionsmarkdown_FormatList->markdownFormatListsimpleMarkdownToConsole->markdownToConsole- Added
buildEnvironmentFilesand tests - Test
testBashSetScopesdetermined thatset -?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-Eand-u- This is useful when resetting state
- Searched source for
set -aand annotated all of them to check they were "undone" correctly prior to exiting - Renamed
Buildtotoolsinternally
Zesk Build release v0.39.9
Mostly bugfixes release.
Copyright © 2026 Market Acumen, Inc.
- Previous version: v0.39.8
.skip-copyrightrenamed tobashSanitize.confand can exist anywhere in your project- Added
.skip-copyrighthandling/warning todeprecated.sh - Added environments
BITBUCKET_REPO_SLUGand localBITBUCKET_WORKSPACEwith default workspace (if you develop on your own fork change this to your own environment/files in your fork - ours ismarketacumen) - Change to
identicalCheckto reduce the number of files examined token - (not found)- now works in documentationall.mdshould now populate- "Fixing" docker-compose tests (
docker-composevsdocker composeavailability) gitTagVersionignored the--suffixoption, fixed
Zesk Build release v0.39.8
Copyright © 2026 Market Acumen, Inc.
- Previous version: v0.39.7
- Add
hookRun application-files --notto 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.shignoringAPPLICATION_JSON_PREFIX- now honors it if set (optionally) - Fixed
quoteGrepPatternto support backslashes correctly (PHP work and namespaces, yep.) - Added
APPLICATION_CODE_IGNOREto ignore those peskyvendorandnode_modulesdirctorties when needed APPLICATION_CODE_IGNOREtesting and added--debugtesting forhookRun application-files --debugif you want- Fixed issue with grep pattern in
plumber,--leakwas not working temporarily bitbuckettest added
Past releases
- v0.39.6
- v0.39.5
- v0.39.4
- v0.39.3
- v0.39.2
- v0.39.1
- v0.39.0
- v0.38.3
- v0.38.2
- v0.38.1
- v0.38.0
- v0.37.1
- v0.37.0
- v0.36.1
- v0.36.0
- v0.35.7
- v0.35.6
- v0.35.5
- v0.35.4
- v0.35.3
- v0.35.2
- v0.35.1
- v0.35.0
- v0.34.0
- v0.33.11
- v0.33.10
- v0.33.9
- v0.33.8
- v0.33.7
- v0.33.6
- v0.33.5
- v0.33.4
- v0.33.2
- v0.33.1
- v0.33.0
- v0.32.2
- v0.32.1
- v0.32.0
- v0.31.2
- v0.31.1
- v0.31.0
- v0.30.4
- v0.30.3
- v0.30.2
- v0.30.1
- v0.30.0
- v0.29.3
- v0.29.2
- v0.29.1
- v0.29.0
- v0.28.0
- v0.27.0
- v0.26.1
- v0.26.0
- v0.25.12
- v0.25.11
- v0.25.10
- v0.25.9
- v0.25.8
- v0.25.7
- v0.25.6
- v0.25.5
- v0.25.4
- v0.25.3
- v0.25.2
- v0.25.1
- v0.25.0
- v0.24.1
- v0.24.0
- v0.23.1
- v0.23.0
- v0.22.0
- v0.21.1
- v0.21.0
- v0.20.3
- v0.20.2
- v0.20.1
- v0.20.0
- v0.19.9
- v0.19.8
- v0.19.7
- v0.19.6
- v0.19.5
- v0.19.3
- v0.19.2
- v0.19.1
- v0.19.0
- v0.18.5
- v0.18.4
- v0.18.3
- v0.18.2
- v0.18.1
- v0.18.0
- v0.17.5
- v0.17.4
- v0.17.3
- v0.17.2
- v0.17.1
- v0.17.0
- v0.16.3
- v0.16.2
- v0.16.1
- v0.16.0
- v0.15.0
- v0.14.5
- v0.14.4
- v0.14.3
- v0.14.2
- v0.14.1
- v0.14.0
- v0.13.0
- v0.12.6
- v0.12.5
- v0.12.4
- v0.12.3
- v0.12.2
- v0.12.1
- v0.12.0
- v0.11.16
- v0.11.15
- v0.11.14
- v0.11.13
- v0.11.12
- v0.11.11
- v0.11.10
- v0.11.9
- v0.11.8
- v0.11.7
- v0.11.6
- v0.11.5
- v0.11.4
- v0.11.3
- v0.11.2
- v0.11.1
- v0.11.0
- v0.10.3
- v0.10.2
- v0.10.1
- v0.10.0
- v0.9.6
- v0.9.5
- v0.9.4
- v0.9.3
- v0.9.2
- v0.9.1
- v0.9.0
- v0.8.8
- v0.8.7
- v0.8.6
- v0.8.5
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.12
- v0.7.10
- v0.7.9
- v0.7.8
- v0.7.7
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.0
- v0.5.7
- v0.5.6
- v0.5.5
- v0.5.4
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.13
- v0.4.12
- v0.4.11
- v0.4.10
- v0.4.9
- v0.4.8
- v0.4.7
- v0.4.6
- v0.4.5
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.23
- v0.3.22
- v0.3.21
- v0.3.20
- v0.3.19
- v0.3.18
- v0.3.17
- v0.3.16
- v0.3.15
- v0.3.14
- v0.3.13
- v0.3.12
- v0.3.11
- v0.3.10
- v0.3.9
- v0.3.8
- v0.3.7
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.0