about summary refs log tree commit diff
AgeCommit message (Collapse)Author
9 hoursREADME: Add CWL conformance badges from CI. HEAD mainArun Isaac
35 hoursdir-locals: Indent run-with-state.Arun Isaac
40 hoursguix: Add cwltest package.Arun Isaac
42 hoursbin: Replace "multiple" with "more than one".Arun Isaac
"more than one" is simpler English.
42 hourswork/command-line-tool: Canonicalize path in File values.Arun Isaac
42 hourswork/command-line-tool: Always reconstruct location from path.Arun Isaac
42 hoursAdd --quiet flag to suppress all logging.Arun Isaac
42 hoursbin: Allow controlling log level via --log-level.Arun Isaac
42 hoursUse the new logging functions for all logging.Arun Isaac
This will enable us to effect global control over the log level.
42 hourswork/ui: Implement logging system.Arun Isaac
Implement logging system with five log levels. Rewrite warning and user-error in terms of the new logging functions.
3 daysreader: Handle &unsupported-uri-scheme conditions.Arun Isaac
read-workflow and read-inputs now handle &unsupported-uri-scheme conditions from location->path.
3 dayswork/command-line-tool: Raise exception on unsupported URI schemes.Arun Isaac
location->path now raises an &unsupported-uri-scheme condition on unsupported URI schemes.
3 daysreader: Capture and report exceptions in read-inputs.Arun Isaac
3 daysreader: Capture and report exceptions in read-workflow.Arun Isaac
3 daysreader: Add read-yaml-file.Arun Isaac
read-yaml-file is a wrapper around read-yaml-file from (yaml). It raises the relevant exceptions when it fails.
3 daysreader: Use read-json-file in read-inputs.Arun Isaac
3 daysreader: Add read-json-file.Arun Isaac
read-json-file is a wrapper around call-with-input-file and json->scm. It raises the relevant exceptions when it fails.
3 daysreader: Return monadic value in normalize-formal-input.Arun Isaac
Return monadic value for the default key in normalize-formal-input. Values returned from maybe-bind must be monadic; compose it with just.
2025-06-29workflow: Copy resource-requirement field on scatter steps.Arun Isaac
* ravanan/workflow.scm (workflow-scheduler): Copy resource-requirement field on scatter steps.
2025-06-29utils: Do not canonicalize script file path before loading.Arun Isaac
It is not the responsibility of load-script to canonicalize file paths; the caller must do that. * ravanan/utils.scm (load-script): Do not canonicalize script file path.
2025-06-29reader: Read manifest files with respect to the workflow file.Arun Isaac
* ravanan/reader.scm (normalize-software-requirement): New function. (normalize-requirements): Use normalize-software-requirement.
2025-06-29reader: Re-indent normalize-env-var-requirement.Arun Isaac
* ravanan/reader.scm (normalize-env-var-requirement): Re-indent.
2025-06-27store: Canonicalize inputs JSON before constructing store paths.Arun Isaac
* ravanan/store.scm (step-store-basename): Canonicalize inputs JSON. * tests/store.scm: New file.
2025-06-26command-line-tool: Pass down inputs directory to recursive calls.Arun Isaac
* ravanan/command-line-tool.scm (build-command-line-tool-script)[copy-input-files]: Pass down inputs directory to recursive calls.
2025-06-26command-line-tool: Do not auto-compile manifest files on inferior.Arun Isaac
The comment was there earlier, but the code was missing! * ravanan/command-line-tool.scm (manifest-file->search-path-sexps): Do not auto-compile manifest files on inferior.
2025-06-26command-line-tool: Do not canonicalize manifest file paths.Arun Isaac
Canonicalization is unnecessary, and causes trouble when the manifest file does not exist. * ravanan/command-line-tool.scm (manifest-file->search-path-sexps, manifest-file->profile-derivation): Do not canonicalize manifest file paths.
2025-06-26command-line-tool: Wrap vectors and alists when embedding in G-exps.Arun Isaac
* ravanan/command-line-tool.scm (build-command-line-tool-script)[vector->gexp, alist->gexp]: New functions. [run-command-gexp]: Use vector->gexp and alist->gexp.
2025-06-26command-line-tool: Present a monadic interface to building scripts.Arun Isaac
* ravanan/command-line-tool.scm (build-gexp-script) (build-command-line-tool-script): Present a monadic interface. * ravanan/workflow.scm (workflow->scheduler-proc): Run monadic value returned by build-command-line-tool-script through the store. (workflow->scheduler-proc, workflow-class->propnet): Update docstring about the guix-store argument.
2025-06-26command-line-tool: Return all search path S-exps as monadic values.Arun Isaac
In the interest of consistency, return search path S-expressions from both manifest-file->search-path-sexps and software-packages->search-path-sexps as monadic values. * ravanan/command-line-tool.scm (software-packages->search-path-sexps): Return monadic value. * ravanan/command-line-tool.scm (build-command-line-tool-script): Use monadic values from software-packages->search-path-sexps.
2025-06-26command-line-tool: Handle manifest monadically.Arun Isaac
The monadic interface allows more of the building to be done in one go when build-gexp-script is invoked. * ravanan/command-line-tool.scm (manifest-file->environment, software-packages->environment, manifest->environment): Delete functions. (inferior-meval-with-store, manifest-file->search-path-sexps, manifest-file->profile-derivation, software-packages->manifest, software-packages->search-path-sexps, software-packages->profile-derivation): New functions. (build-command-line-tool-script): Use manifest-file->search-paths, manifest-file->profile-derivation, software-packages->search-path-sexps and software-packages->profile-derivation instead of manifest-file->environment and software-packages->environment.
2025-06-26workflow: Re-use single connection to the Guix daemon.Arun Isaac
Re-using the connection improves performance and is cleaner than passing around the Guix daemon socket specification. * ravanan/command-line-tool.scm (manifest-file->environment, software-packages->environment, manifest->environment, build-command-line-tool-script, build-gexp-script): Work with store connection instead of the Guix daemon socket. * ravanan/workflow.scm: Import (guix store). (workflow->scheduler-proc, workflow-class->propnet): Work with store connection instead of the Guix daemon socket. (build-workflow): Pass a store connection, not the Guix daemon socket, to workflow->scheduler-proc.
2025-06-26workflow: Spawn an inferior only once.Arun Isaac
Spawning inferiors is expensive. Do it only once and re-use the connection. * ravanan/command-line-tool.scm (call-with-inferior): Move to (ravanan workflow). (manifest-file->environment, software-packages->environment, build-command-line-tool-script): Accept inferior instead of channels. * ravanan/workflow.scm: Import (guix inferior). (workflow->scheduler-proc, workflow-class->propnet): Accept inferior instead of channels. (build-workflow): New function. (run-workflow): Use build-workflow instead of workflow->scheduler-proc.
2025-06-26command-line-tool: Clarify disabling WorkReuse message.Arun Isaac
* ravanan/command-line-tool.scm (build-command-line-tool-script): Clarify it is "disabling WorkReuse" that is unnecessary.
2025-06-26workflow: Build scripts ahead of time.Arun Isaac
* ravanan/command-line-tool.scm (build-command-line-tool-script, find-requirement): Export. (run-command-line-tool): Accept script as argument instead of cwl. Add resource-requirement argument. Remove manifest-file, channels, scratch and guix-daemon-socket arguments. * ravanan/workflow.scm (<scheduler-proc>):[cwl-or-propnet]: Rename to script-or-propnet. [resource-requirement]: New field. * ravanan/workflow.scm (scheduler-proc): Rename cwl-or-propnet argument to script-or-propnet. Add resource-requirement argument. (workflow->scheduler-proc, workflow-class->propnet): Add manifest-file, channels, scratch, store and guix-daemon-socket arguments. (workflow->scheduler-proc): Build script. Capture ResourceRequirement. (workflow-scheduler): Remove manifest-file, channels, scratch and guix-daemon-socket arguments. [schedule]: Run built script instead of CWL. Update call to run-command-line-tool. (run-workflow): Do not pass manifest-file, channels, scratch and guix-daemon-socket arguments to workflow-scheduler. Pass manifest-file, channels, scratch, store and guix-daemon-socket arguments to workflow->scheduler-proc.
2025-06-26workflow: Make scatter arguments optional in workflow->scheduler-proc.Arun Isaac
* ravanan/workflow.scm (workflow->scheduler-proc): Make scatter and scatter-method arguments optional.
2025-06-26workflow: Introduce optional fields in scheduler-proc constructor.Arun Isaac
* ravanan/workflow.scm (<scheduler-proc>): Rename constructor to -scheduler-proc. (scheduler-proc): New function.
2025-06-26workflow: Build out propagator network eagerly.Arun Isaac
Build out propagator network eagerly descending into the lowest subworkflows. This will come in handy later on to build the G-exp scripts ahead of time before the workflow is run. * ravanan/workflow.scm (<scheduler-proc>)[cwl]: Rename to cwl-or-propnet. [formal-inputs, formal-outputs]: New fields. * ravanan/workflow.scm (workflow->scheduler-proc): New function. (workflow-class->propnet): Build out propagator network eagerly. (workflow-scheduler)[schedule]: Handle eagerly built-out propagator network <schedule-proc> objects. (run-workflow): Use workflow->scheduler-proc to convert workflow to <scheduler-proc> object.
2025-06-26workflow: Eliminate command-line-tool->propagator.Arun Isaac
command-line-tool->propagator was packaging up both CommandLineTool and Workflow class workflows into <scheduler-proc> objects. It was named erroneously. We now merge it into step->propagator. * ravanan/workflow.scm (command-line-tool->propagator): Merge into ... (workflow-class->propnet)[step->propagator]: ... here.
2025-06-26command-line-tool: Build script without inputs.Arun Isaac
We build the script using only the CommandLineTool workflow itself, and not its inputs. We pass the inputs in through a WORKFLOW_INPUTS environment variable. To maintain bullet-proof caching, we construct ravanan store paths by hashing both the script and the inputs together. This change paves the way to pre-building all scripts ahead of time. * ravanan/command-line-tool.scm (<command-line-binding>, command-line-binding->args): Move to (ravanan work command-line-tool). (run-command-line-tool): Do not pass inputs to build-command-line-tool-script. Call step-store-files-directory instead of script->store-files-directory, step-store-data-file instead of script->store-data-file, step-store-stdout-file instead of script->store-stdout-file and step-store-stderr-file instead of script->store-stderr-file. Put inputs into job state objects. Pass inputs to the script through the WORKFLOW_INPUTS environment variable. (capture-command-line-tool-output): Accept inputs. Call step-store-data-file instead of script->store-data-file and step-store-files-directory instead of script->store-files-directory. (copy-input-files-gexp): Delete function. (build-command-line-tool-script): Do not accept inputs; get them from the WORKFLOW_INPUTS environment variable. [coerce-argument]: New function. [run-command-gexp]: Build command inside the G-expression. [gexp]{copy-input-files}: New function. * ravanan/job-state.scm (<single-machine-job-state>)[inputs]: New field. * ravanan/job-state.scm (<slurm-job-state>)[inputs]: New field. * ravanan/job-state.scm (job-state-inputs): New public function. * ravanan/store.scm: Import (srfi srfi-71), (gcrypt hash) and (guix build utils). (sha1-hash-sexp): New function. (script->store-files-directory, script->store-data-file, script->store-stdout-file, script->store-stderr-file): Delete functions. (step-store-files-directory, step-store-data-file, step-store-stdout-file, step-store-stderr-file): New public functions. * ravanan/work/command-line-tool.scm: Import (srfi srfi-9 gnu) and (ravanan work ui). * ravanan/workflow.scm (&job-failure)[inputs]: New field. * ravanan/workflow.scm (workflow-scheduler)[poll]: Put inputs into &job-failure condition. [capture-output]: Call step-store-stdout-file instead of script->store-stdout-file and step-store-stderr-file instead of script->store-stderr-file. Pass inputs to capture-command-line-tool-output. (run-workflow): Call step-store-stdout-file instead of script->store-stdout-file and step-store-stderr-file instead of script->store-stderr-file.
2025-06-26command-line-tool: Define environment only once.Arun Isaac
* ravanan/command-line-tool.scm (run-command-line-tool): Define environment only once.
2025-06-26store: Encode store paths using base32 instead of base16.Arun Isaac
* ravanan/store.scm: Import (guix base16) and (guix base32). (intern-file): Encode store paths using base32 instead of base16.
2025-06-26work/command-line-tool: Add sha1-hash-bytes.Arun Isaac
* ravanan/work/command-line-tool.scm (sha1-hash-bytes): New public function. (sha1-hash): Use sha1-hash-bytes.
2025-06-26workflow: Bind class variable with reduced scope.Arun Isaac
* ravanan/workflow.scm (workflow-scheduler): Bind class variable only in the else arm of the if condition.
2025-06-26bin: Use user-error instead of errors to report user errors.Arun Isaac
User errors are caused by incorrect input from the user, rather than by actual bugs in the code. user-error is named after the similarly named elisp function. * bin/ravanan: Import (ravanan work ui). (%options, invalid-option, main): Use user-error instead of error.
2025-06-26propnet: Add record printers.Arun Isaac
* ravanan/propnet.scm (<propagator>, <propnet-state>): Add record printers.
2025-06-26propnet: Export predicates.Arun Isaac
* ravanan/propnet.scm (propnet?, propagator?, scheduler?, state+status?): Export.
2025-06-17bin: Print usage when arguments are not matched.Arun Isaac
* bin/ravanan (print-short-usage): New function. (main): Print usage when arguments are not matched.
2025-05-29command-line-tool: Re-indent.Arun Isaac
* ravanan/command-line-tool.scm (build-command-line-tool-script):[cores]: Re-indent.
2025-05-16command-line-tool: Make inputs subdirectory only if it does not exist.Arun Isaac
* ravanan/command-line-tool.scm (copy-input-files-gexp): Make inputs subdirectory only if it does not exist.
2025-05-16command-line-tool: Copy input files into their own subdirectories.Arun Isaac
* ravanan/command-line-tool.scm (copy-input-files-gexp): Copy input files into their own subdirectories.