What’s new?
This release restructures the introduces changes to the Viash config: - The platforms field is split into runners and engines - The .functionality layer has been removed from the config and all fields have been moved to the top layer
Changes are made to sanitize the built config output and include additional relevant meta data. The default multiple_sep has been changed from : to ; to avoid conflicts with paths like s3://foo/bar.
Implemented a proper way of caching dependency repositories. The cache is stored under ~/.viash/repositories.
Full changelog
BREAKING CHANGES
runnersandengines: The usage ofplatformsis deprecated and instead these are split intorunnersandengines(PR #510). Theplatformsfield is still supported but will be removed in a future release. In brief, thenative platformbecame anative engineanddocker platformbecame adocker engine. Additionally, thenative platformanddocker platformbecame aexecutable runner,nextflow platformbecame anextflow runner. The fields ofdocker platformis split betweendocker engineanddocker runner:port,workdir,setup_strategy, andrun_args(set todocker_run_args) are captured by therunneras they define how the component is run. The other fields are captured by theengineas they define the environment in which the component is run. One exception ischownwhich is rarely set to false and is now always enabled.arguments: Merge arguments into argument_groups during a json decode prepare step (PR #574). The--parse_argument_groupsoption fromns listandconfig viewis deprecated as it is now always enabled.arguments: Change defaultmultiple_sepfrom:to;to avoid conflicts with paths likes3://foo/bar(PR #645). The previous behaviour of usingmultiple_sep: ":"can be achieved by adding a config mod to the_viash.yaml:config_mods: | .functionality.argument_groups[true].arguments[.multiple == true].multiple_sep := ":"functionality: Remove thefunctionalitylayer from the config and move all fields to the top layer (PR #649).computational requirements: Use 1000-base units instead of 1024-base units for memory (PR #686). Additionally, the memory unitskib,mib,gib,tib, andpibare added to support 1024-base definitions.NextflowEngine: Swap the order of execution ofrunIfandfilterwhen calling.run(). This means thatrunIfis now executed beforefilter(PR #660).
NEW FUNCTIONALITY
export json_schema: Add a--strictoption to output a subset of the schema representing the internal structure of the Viash config (PR #564).config viewandns list: Do not output internal functionality fields (#564). Additionally, add a validation that no internal fields are present when reading a Viash config file.project config: Add fields in the project config to specify default values for component config fields (PR #612). This allows for a more DRY approach to defining the same values for multiple components.dependencies: GitHub and ViashHub repositories now get properly cached (PR #699). The cache is stored in the~/.viash/repositoriesdirectory using sparse-checkout to only fetch the necessary files. During a build, the cache is checked for the repository and if it is found and still up-to-date, the repository is not cloned again and instead the cache is copied to a temporary folder where the files are checked out from the sparse-checkout.ExecutableRunner: Add a---docker_image_idflag to view the Docker image ID of a built executable (PR #741).viash ns query: Add a query filter that allows selecting a single component by its path in a namespace environment (PR #744).config schema: Addlabel&summaryfields for Config, PackageConfig, argument groups, and all argument types (PR #743).NextflowEngine: AddedrunIffunctionality torunEach(PR #660).
MINOR CHANGES
testbenches: Add testbenches for local dependencies (PR #565).testbenches: Refactor testbenches helper functions to uniformize them (PR #565).logging: Preserve log order of StdOut and StdErr messages during reading configs in namespaces (PR #571).Java 21 support: Update Scala to 2.13.12 and update dependencies (PR #602).project config: Output the project config under the default nameProjectConfiginstead ofProjectduring schema export (PR #631). This is now important as the project config is now part of the component config. Previously this was overridden as the class name wasViashProjectwhich was less descriptive.package config: Renamedproject configtopackage config(PR #636). Now that we start using the config more, we came to the conclusion that “package” was better suited than “project”.ns exec: Added an extra field{name}to replace{functionality-name}(PR #649). No immediate removal of the old field is planned, but it is deprecated.BashWrapper: Added meta-data fieldmeta_nameas a replacement formeta_functionality_name(PR #649). No immediate removal of the old field is planned, but it is deprecated.error message: Improve the error message when using an invalid field in the config (#PR #662). The error message now includes the field names that are not valid if that happens to be the case or otherwise a more general error message.config mods: Improve the displayed error message when a config mod could not be applied because of an invalid path (PR #672).docker_engine: Deprecateregistry,organizationandtagfields in thedocker_engine(PR #712). Currently these are hardly ever used and instead theimagefield is used to specify the full image name.docker_engine: Addtarget_packagefield to thedocker_engine(PR #712). This field, together with thetarget_organizationis used to specify the full built container image name. The fields use proper fallback for the values set in the component config and package config.organization: Remove theorganizationfield from the component config (PR #712). The value is now directly used by thedocker_engineas a fallback from thetarget_organizationfield.ExecutableRunner: Add parameterdocker_automount_prefixto allow for a custom prefix for automounted folders (PR #739).ExecutableRunner: Make Docker runtime arguments configurable via the---docker_run_argsargument (PR #740).export json_schema: Addargumentsfield to theConfigschema (PR #755). Only for the non-strict version, the strict version of the viash config has these values merged intoargument_groups.scala: Update Scala to 2.13.14 (PR #764).NextflowEngine: Also parse${id}and${key}aside from$idand$keyas identifier placeholders for filenames (PR #756).
BUG FIXES
__merge__: Handle invalid yaml during merging (PR #570). There was not enough error handling during this operation. Switched to the more advancedConvert.textToJsonhelper method.config: Anonymize paths in the config when outputting the config (PR #625).schema: Don’t require undocumented fields to set default values and add thelinksandreferencefields to functionality as they were not meant only to be in the project config (PR #636).export json_schema: Fix minor inconsistencies and make the strict schema stricter by adapting to what Viash will effectively return (PR #666).deprecation & removal warning: Improve the displayed warning where a deprecated or removed field could display a double ‘.’ when it field was located at the root level (PR #671).resource path: Don’t finalize thepathfield of a resource until it’s written as part of building a component (PR #668).requirements: Improve the error message when a Python or R requirement uses a single quote in the.scriptfield (PR #675).viash test: Fix Docker id between build and test components not being consistent when using a custom Docker registry (PR #679).MainNSBuildNativeSuite: Capture the error message when reading the configs so we can capture the expected warning message (PR #688). While almost all tests were already cleanly capturing their expected warning/error messages, this one was still remaining, resulting in warnings being shown in the output.runners & engines: When applying a filter on empty runners or engines, the fallback defaultnative engineandexecutable runnerrespectively are set before applying the filter (PR #691).dependencies: Fix resolving of dependencies of dependencies (PR #701). The stricter build config was now lacking the necessary information to resolve dependencies of dependencies. We added it back as.build_info.dependenciesin a more structured, anonymized way.dependencies: Fix thenamefield of repositories possibly being outputted in the build config (PR #703).symlinks: Allow following of symlinks when finding configs (PR #704). This improves symlink functionality forviash ns ...and dependency resolving.build_info: Correctly set the.build_info.executabletomain.nfwhen building a component with a Nextflow runner (PR #720).vsh organization: ViashHub repositories now usevshas the default organization (PR #718). Instead of having to specifyrepo: vsh/repo_name, you can now just specifyrepo: repo_name, which is now also the prefered way.testbenches: Add a testbench to verify dependencies in dependencies from scratch (PR #721). The components are built from scratch and the dependencies are resolved from the local repositories.docker_engine: Fix a bug in how the namespace separator is handled (PR #722).platforms: Re-introduce the--platformand--apply_platformarguments to improve backwards compatibility (PR #725). When the argument is used, a deprecation warning message is printed on stderr. Cannot be used together with--engineor--runnerand/or--apply_engineor--apply_runner.nextflow_runner: Fix refactoring error in thefindStates()helper function (PR #733).viash ns exec: Fix “relative fields” outputting absolute paths (PR# 737). Additionally, improve path resolution when using the--srcargument.viash ns: Fix viash tripping over its toes when it encounters multiple failed configs (PR #761). A dummy config was used as a placeholder, but it always used the namefailed, so duplicate config names were generated, which we check for nowadays.bashwrapper: Fix an issue where runningviash testwhich builds the test docker container would ignore test failures but subsequential runs would work correctly (PR #754).NextflowEngine: Fix escaping of odd filename containing special characters (PR #756). Filenames containing a$character caused Bash to try to interpret it as a variable.json schema: Fix repositories types with name incorrectly addingwithnameas type (PR #768).json schema: Change the ‘$schema’ field to ‘http://’ instead of ‘https://’ (PR #768). (Some?) Json validators use this value as a token and not as a URL.viash test: Fix an issue where the tests would not copy package config settings to determine the docker image name (PR #767).