-*- org -*-
#+TITLE: GWL NEWS – history of user-visible changes
#+STARTUP: content hidestars

Copyright © 2016, 2017, 2018 Roel Janssen <roel@gnu.org>
Copyright © 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>

  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
  notice and this notice are preserved.

* Changes in 0.5.0 (since 0.4.0)
** Package handling
- Package specifications may also contain outputs.
** Testing
- Integration tests verify that all examples from the documentation can be executed correctly.
- Integration tests include submission of jobs to a local Slurm cluster via DRMAA.
** Bug fixes
- Processes comparisons are now performed with an identity comparison.  This was always intended in cache table lookups, but the wrong comparison procedure was used.
- Custom interpreters in code snippets would be miscompiled due to a regression. =compile-procedure= was modified to address this regression.
- With containerized execution, the contained script was not passed its arguments for inputs, outputs, and values.  Now the arguments are passed through.
- The container scripts were compiled with fixed values for process inputs and outputs; now they read these values from their arguments as in other execution modes.
- Set the job’s working directory when launching a DRMAA job.
* Changes in 0.4.0 (since 0.3.0)
** Workflow syntax
- the new =workflow= fields =before= and =after= can be used to specify procedures that are run before and after the workflow runs.  This can be useful for printing banners or further instructions.
- new procedure =display-file= to print the content of files
** Execution engines
- Process engines can now specify a procedure in the =check= field to validate the execution environment before running the workflow.
- Process engines have a new =run= field specifying how ordered processes should be iterated over.
- The new =drmaa-engine= supports job submission to schedulers implementing DRMAA version 1.
- The =grid-engine= is deprecated and will be removed in future releases.  Use the =drmaa-engine= instead.
** Bug fixes
- the cache feature would symlink if hardlinking was not possible.  This was incorrect and now it falls back to copying files to and from the cache when hardlinking fails.
* Changes in 0.3.0 (since 0.2.1)
** Command line interface
- Add sub-commands “run”, “graph”, and “web”; remove options from the main command.
- =guix/scripts/workflow.scm= no longer exists.  The file is now called =gwl/main.scm=.  The entry point, however, is now =guix/extensions/workflow.scm=, and it is invoked with =guix workflow= when the directory is found on the new =GUIX_EXTENSIONS_PATH= environment variable (since Guix commit cf289d7cfa34315bf13b3114b9a5bf3d3c05ebea).
** Web interface
- GWL source snippets now have better syntax highlighting.
** Bug fixes
- handle caching of files with UTF-8 encoded file names
- handle more errors in the web interface
** Package handling
– packages are now looked up in an inferior Guix, which defaults to the current Guix.  This avoids the problem of loading older packages from the Guix that was available when the GWL was built.
- extra care is taken to ensure that the Guile load path is consistent and predictable, so that the version of Guix at runtime does not affect the behavior of the workflow language.  Only the variant of Guix that was used at build time is used as a library.
- the new =require-packages= form at the top of a workflow file can be used to specify packages that should be available when evaluating the workflow
** Error handling
- accidental keywords instead of =process= or =workflow= field names now trigger a more specific “invalid field” syntax error instead of generating invalid syntax that throws an unclear error later.
- errors when loading workflows no longer show the GWL or SRFI modules as the error location; instead they are limited to the source file where they originated.
- brace errors in code snippets are now reported with approximate location
- =pick= from =(gwl utils)= now raise error conditions when an item cannot be found.
- when a code snippet references an element of a tagged list that does not exist, an error is thrown at runtime instead of injecting =#false=

** Workflow syntax
- new procedure =get= to access members of nested association lists by path.
** Execution engines
- The =runner= field of all execution engines is now a procedure that takes a list of commands and returns a list of commands.
- process properties are now passed as script arguments to allow reuse of generated process scripts.

* Changes in 0.2.1 (since 0.2.0)
** Documentation
- additional documentation of the “run-time” field and the “complexity” type
- added example of how to use =pick= with local variable definitions
** Bug fixes
- due to a faulty condition (a test whether a file is a directory),
  process outputs were never cached.  The condition has been
  corrected.
- outputs with absolute file names are no longer considered missing
- workflows without inputs no longer trigger an error
* Changes in 0.2.0 (since 0.1.1)
** Command line interface
  * Remove the “guix process” command.
  * Remove GUIX_WORKFLOW_PATH; load workflows from files instead.
  * Add --container flag to enable process isolation
** Workflow syntax
  * Support Wisp syntax in workflow files.
  * Add syntactic sugar for defining workflows and processes.
  * Support syntax for procedures written in languages other than Guile.
  * Add graph syntax to specify process dependencies.
  * Add “auto-connect” helper to automatically link up process inputs and outputs.
  * Deprecate the “restrictions” field in workflow records in favor of “auto-connect” and “graph” syntax in the “processes” field.
  * Fields of the “process” form that expect lists now also accept multiple values.
  * Add “on” procedure for application of higher-order functions to collections
  * Add “expand” procedure to expand variables in file name templates
** Execution engines
  * Add simple execution engine and use it by default instead of the bash-engine.
** Programming interface
  * Remove modules “(guix processes)” and “(guix workflows)”.  Use “(gwl processes)” and “(gwl workflows)” instead.
  * Remove “define-dynamically” macro
  * Use GOOPS instead of “(guix records)”
** Documentation
  * Add manual in Texinfo format
* Changes in 0.1.1 (since 0.1.0)
  * Disable interpreting shell escape characters.
  * Show more information in error messages.
* Changes in 0.1.0 (since 0.0.9)
  * Improve readability of text in the web interface.
  * Make the “run-time” field optional for “process” descriptions.
  * Hide version information in process and workflow overviews.
  * Don't rely on G-Expressions -- generate Guix profiles instead.
* Changes in 0.0.9 (since 0.8.0)
  * Disable grafts.
* Changes in 0.0.8 (since 0.0.7)
  * Pass a name in Grid Engine commands.
* Changes in 0.0.7 (since 0.0.6)
  * Maintain the current working directory when computing remotely.
* Changes in 0.0.6 (since 0.0.5)
  * Fix bugs in the web interface.
* Changes in 0.0.5 (since 0.0.2)
* Changes in 0.0.3 (since 0.0.1)
  * Keep GWL compatible with Guix changes.
