diff --git a/.release-please-manifest.json b/.release-please-manifest.json index c206008b..e0389a46 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.9.8" + ".": "0.9.9" } diff --git a/AUTHORS.md b/AUTHORS.md index 3d83b76f..580eba2a 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -20,6 +20,7 @@ The list of contributors in alphabetical order: - [Jelizaveta Lemeševa](https://orcid.org/0009-0003-6606-9270) - [Kenyi Hurtado-Anampa](https://orcid.org/0000-0002-9779-3566) - [Leticia Wanderley](https://orcid.org/0000-0003-4649-6630) +- [Manuel Giffels](https://orcid.org/0000-0003-0193-3032) - [Marco Donadoni](https://orcid.org/0000-0003-2922-5505) - [Marco Vidal](https://orcid.org/0000-0002-9363-4971) - [Matthew Feickert](https://orcid.org/0000-0003-4124-7862) diff --git a/CHANGELOG.md b/CHANGELOG.md index e366ceca..c38fcb6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [0.9.9](https://github.com/reanahub/reana-commons/compare/0.9.8...0.9.9) (2024-11-28) + + +### Build + +* **python:** add support for Python 3.13 ([#480](https://github.com/reanahub/reana-commons/issues/480)) ([5de7605](https://github.com/reanahub/reana-commons/commit/5de760512a3aa86282a9dc31ac031773ddf49ef6)) + + +### Features + +* **schema:** allow Compute4PUNCH backend options ([#445](https://github.com/reanahub/reana-commons/issues/445)) ([0570f4a](https://github.com/reanahub/reana-commons/commit/0570f4ade9135a2d340009d2091c97dfc81a2e60)) + + +### Bug fixes + +* **config:** remove hard-coded component host name domain ([#458](https://github.com/reanahub/reana-commons/issues/458)) ([f2faeaa](https://github.com/reanahub/reana-commons/commit/f2faeaa76f42c4484db70766fc1d7a3a122ee38f)), closes [#457](https://github.com/reanahub/reana-commons/issues/457) + + +### Continuous integration + +* **actions:** pin setuptools 70 ([#479](https://github.com/reanahub/reana-commons/issues/479)) ([b80bc70](https://github.com/reanahub/reana-commons/commit/b80bc707fa9311e3e5d00ea71bb17f853845d6bf)) + ## [0.9.8](https://github.com/reanahub/reana-commons/compare/0.9.7...0.9.8) (2024-03-01) diff --git a/reana_commons/api_client.py b/reana_commons/api_client.py index 36986c69..7e342a43 100644 --- a/reana_commons/api_client.py +++ b/reana_commons/api_client.py @@ -87,7 +87,7 @@ def _get_spec(self, spec_file): class JobControllerAPIClient(BaseAPIClient): """REANA-Job-Controller http client class.""" - def submit( + def submit( # noqa: C901 self, workflow_uuid="", image="", @@ -108,6 +108,9 @@ def submit( slurm_partition="", slurm_time="", kubernetes_job_timeout: Optional[int] = None, + c4p_cpu_cores="", + c4p_memory_limit="", + c4p_additional_requirements="", ): """Submit a job to RJC API. @@ -132,6 +135,9 @@ def submit( :param slurm_partition: Partition of a Slurm job. :param slurm_time: Maximum timelimit of a Slurm job. :param kubernetes_job_timeout: Timeout for the job in seconds. + :param c4p_cpu_cores: Amount of CPU cores requested to process C4P job + :param c4p_memory_limit: Amount of memory requested to process C4P job + :param c4p_additional_requirements: Additional requirements requested to process C4P job like GPU, etc. :return: Returns a dict with the ``job_id``. """ job_spec = { @@ -181,6 +187,15 @@ def submit( if slurm_time: job_spec["slurm_time"] = slurm_time + if c4p_cpu_cores: + job_spec["c4p_cpu_cores"] = c4p_cpu_cores + + if c4p_memory_limit: + job_spec["c4p_memory_limit"] = c4p_memory_limit + + if c4p_additional_requirements: + job_spec["c4p_additional_requirements"] = c4p_additional_requirements + try: response, http_response = self._client.jobs.create_job( job=job_spec diff --git a/reana_commons/config.py b/reana_commons/config.py index 6f97f0a7..cc785f28 100644 --- a/reana_commons/config.py +++ b/reana_commons/config.py @@ -99,9 +99,7 @@ def load(cls, kind): """Kubernetes namespace in which REANA infrastructure is currently deployed.""" REANA_INFRASTRUCTURE_COMPONENTS_HOSTNAMES = { - component_name: ( - "{component_prefix}-{component_name}.{namespace}.svc.cluster.local" - ).format( + component_name: ("{component_prefix}-{component_name}.{namespace}").format( component_prefix=REANA_COMPONENT_PREFIX, component_name=component_name, namespace=REANA_INFRASTRUCTURE_KUBERNETES_NAMESPACE, diff --git a/reana_commons/openapi_specifications/reana_job_controller.json b/reana_commons/openapi_specifications/reana_job_controller.json index a4842434..2cc25255 100644 --- a/reana_commons/openapi_specifications/reana_job_controller.json +++ b/reana_commons/openapi_specifications/reana_job_controller.json @@ -39,6 +39,15 @@ }, "JobRequest": { "properties": { + "c4p_additional_requirements": { + "type": "string" + }, + "c4p_cpu_cores": { + "type": "string" + }, + "c4p_memory_limit": { + "type": "string" + }, "cmd": { "default": "", "type": "string" diff --git a/reana_commons/openapi_specifications/reana_server.json b/reana_commons/openapi_specifications/reana_server.json index b7a8ca89..e2121aed 100644 --- a/reana_commons/openapi_specifications/reana_server.json +++ b/reana_commons/openapi_specifications/reana_server.json @@ -4049,15 +4049,19 @@ "schema": { "properties": { "input_parameters": { + "description": "Optional. Additional input parameters that override the ones from the workflow specification.", "type": "object" }, "operational_options": { + "description": "Optional. Additional operational options for workflow execution.", "type": "object" }, "reana_specification": { + "description": "Optional. Replace the original workflow specification with the given one. Only considered when restarting a workflow.", "type": "object" }, "restart": { + "description": "Optional. If true, restart the given workflow.", "type": "boolean" } }, @@ -4446,6 +4450,11 @@ }, { "description": "Required. New workflow status.", + "enum": [ + "start", + "stop", + "deleted" + ], "in": "query", "name": "status", "required": true, @@ -4459,19 +4468,30 @@ "type": "string" }, { - "description": "Optional. Additional input parameters and operational options.", + "description": "Optional. Additional parameters to customise the workflow status change.", "in": "body", "name": "parameters", "required": false, "schema": { "properties": { - "CACHE": { - "type": "string" - }, "all_runs": { + "description": "Optional. If true, delete all runs of the workflow. Only allowed when status is `deleted`.", + "type": "boolean" + }, + "input_parameters": { + "description": "Optional. Additional input parameters that override the ones from the workflow specification. Only allowed when status is `start`.", + "type": "object" + }, + "operational_options": { + "description": "Optional. Additional operational options for workflow execution. Only allowed when status is `start`.", + "type": "object" + }, + "restart": { + "description": "Optional. If true, the workflow is a restart of an earlier workflow execution. Only allowed when status is `start`.", "type": "boolean" }, "workspace": { + "description": "Optional, but must be set to true if provided. If true, delete also the workspace of the workflow. Only allowed when status is `deleted`.", "type": "boolean" } }, diff --git a/reana_commons/openapi_specifications/reana_workflow_controller.json b/reana_commons/openapi_specifications/reana_workflow_controller.json index c9aacec0..d6b04c56 100644 --- a/reana_commons/openapi_specifications/reana_workflow_controller.json +++ b/reana_commons/openapi_specifications/reana_workflow_controller.json @@ -1356,19 +1356,30 @@ "type": "string" }, { - "description": "Optional. Additional input parameters and operational options for workflow execution. Possible parameters are `CACHE=on/off`, passed to disable caching of results in serial workflows, `all_runs=True/False` deletes all runs of a given workflow if status is set to deleted and `workspace=True/False` which deletes the workspace of a workflow.", + "description": "Optional. Additional parameters to customise the workflow status change.", "in": "body", "name": "parameters", "required": false, "schema": { "properties": { - "CACHE": { - "type": "string" - }, "all_runs": { + "description": "Optional. If true, delete all runs of the workflow. Only allowed when status is `deleted`.", + "type": "boolean" + }, + "input_parameters": { + "description": "Optional. Additional input parameters that override the ones from the workflow specification. Only allowed when status is `start`.", + "type": "object" + }, + "operational_options": { + "description": "Optional. Additional operational options for workflow execution. Only allowed when status is `start`.", + "type": "object" + }, + "restart": { + "description": "Optional. If true, the workflow is a restart of an earlier workflow execution. Only allowed when status is `start`.", "type": "boolean" }, "workspace": { + "description": "Optional, but must be set to true if provided. If true, delete also the workspace of the workflow. Only allowed when status is `deleted`.", "type": "boolean" } }, diff --git a/reana_commons/serial.py b/reana_commons/serial.py index ace49556..b5205992 100644 --- a/reana_commons/serial.py +++ b/reana_commons/serial.py @@ -50,7 +50,12 @@ "compute_backend": { "$id": "#/properties/steps/properties/compute_backend", "type": "string", - "enum": ["kubernetes", "htcondorcern", "slurmcern"], + "enum": [ + "kubernetes", + "htcondorcern", + "slurmcern", + "compute4punch", + ], }, "kerberos": { "$id": "#/properties/steps/properties/kerberos", @@ -98,6 +103,21 @@ "type": "string", "default": "", }, + "c4p_cpu_cores": { + "$id": "#/properties/steps/properties/c4p_cpu_cores", + "type": "string", + "default": "", + }, + "c4p_memory_limit": { + "$id": "#/properties/steps/properties/c4p_memory_limit", + "type": "string", + "default": "", + }, + "c4p_additional_requirements": { + "$id": "#/properties/steps/properties/c4p_additional_requirements", + "type": "string", + "default": "", + }, "commands": { "$id": "#/properties/steps/properties/commands", "type": "array", diff --git a/reana_commons/validation/schemas/reana_analysis_schema.json b/reana_commons/validation/schemas/reana_analysis_schema.json index 17656151..676c5fc8 100644 --- a/reana_commons/validation/schemas/reana_analysis_schema.json +++ b/reana_commons/validation/schemas/reana_analysis_schema.json @@ -268,7 +268,8 @@ "enum": [ "kubernetes", "htcondorcern", - "slurmcern" + "slurmcern", + "compute4punch" ], "title": "Compute backend" }, @@ -318,6 +319,21 @@ "type": "boolean", "title": "VOMS proxy", "description": "Whether to use a VOMS proxy for the step. This would require you to upload a valid VOMS proxy as a REANA secret." + }, + "c4p_cpu_cores": { + "type": "string", + "title": "C4P CPU Cores", + "description": "Number of CPU cores requested from Compute4PUNCH for running the task." + }, + "c4p_memory_limit": { + "type": "string", + "title": "C4P Memory Limit", + "description": "Amount of memory requested from Compute4PUNCH for running the task." + }, + "c4p_additional_requirements": { + "type": "string", + "title": "C4P Additional Requirements", + "description": "Additional HTCondor requirements like RequestGPUs for running the task." } }, "required": [