{"id":24641146,"url":"https://github.com/elixir-cloud-aai/cwl-wes","last_synced_at":"2025-11-07T07:03:40.746Z","repository":{"id":36994404,"uuid":"144850939","full_name":"elixir-cloud-aai/cwl-WES","owner":"elixir-cloud-aai","description":"Trigger CWL workflows via GA4GH WES and TES","archived":false,"fork":false,"pushed_at":"2025-10-24T06:27:03.000Z","size":565,"stargazers_count":17,"open_issues_count":31,"forks_count":19,"subscribers_count":30,"default_branch":"dev","last_synced_at":"2025-10-24T08:27:56.977Z","etag":null,"topics":["elixir","ga4gh","hacktoberfest","workflow"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elixir-cloud-aai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-08-15T12:35:19.000Z","updated_at":"2025-03-10T10:18:55.000Z","dependencies_parsed_at":"2024-01-18T08:30:57.477Z","dependency_job_id":"ff088cbb-f29c-41bc-8b23-26c9211784e1","html_url":"https://github.com/elixir-cloud-aai/cwl-WES","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/elixir-cloud-aai/cwl-WES","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcwl-WES","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcwl-WES/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcwl-WES/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcwl-WES/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elixir-cloud-aai","download_url":"https://codeload.github.com/elixir-cloud-aai/cwl-WES/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elixir-cloud-aai%2Fcwl-WES/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":283143298,"owners_count":26786566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-07T02:00:06.343Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elixir","ga4gh","hacktoberfest","workflow"],"created_at":"2025-01-25T12:12:26.512Z","updated_at":"2025-11-07T07:03:40.698Z","avatar_url":"https://github.com/elixir-cloud-aai.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cwl-WES\n\n[![License][badge-license]][badge-url-license]\n[![CI][badge-ci]][badge-url-ci]\n[![Website][badge-health]][badge-url-health]\n\n## Synopsis\n\nMicroservice implementing the [Global Alliance for Genomics and\nHealth][org-ga4gh] (GA4GH) [Workflow Execution Service][res-ga4gh-wes] (WES)\nAPI specification for the execution of workflows written in the [Common\nWorkflow Language][res-cwl] (CWL).\n\ncwl-WES is a core service of the [ELIXIR Cloud \u0026 AAI\nproject][org-elixir-cloud].\n\n## Description\n\ncwl-WES (formerly: WES-ELIXIR) is a [Flask][res-flask]/[Gunicorn][res-gunicorn]\napplication that makes use of [Connexion][res-connexion] to implement the\n[GA4GH WES OpenAPI specification][res-ga4gh-wes]. It enables clients/users\nto execute [CWL][res-cwl] workflows in the cloud via a [GA4GH Task Execution\nService][res-ga4gh-tes] (TES)-compatible execution backend (e.g.,\n[TESK][res-tesk] or [Funnel][res-funnel]). Workflows can be sent for execution,\nprevious runs can be listed, and the status and run information of individual\nruns can be queried. The service leverages [cwl-tes][res-cwl-tes] to\ninterpret [CWL][res-cwl] workflows, break them down into individual tasks and\nemit [GA4GH TES][res-ga4gh-tes]-compatible HTTP requests to a configured\n[TES][res-ga4gh-tes] instance. Access to endpoints can be configured to require\n[JSON Web Token][res-jwt-rfc]-based access tokens, such as those issued by\n[ELIXIR AAI][res-elixir-aai]. Run information is stored in a\n[MongoDB][res-mongo] database.\n\nNote that development is currently in beta stage. Check the website badge at\nthe top of this document for a publicly available test deployment. Further\ntest deployments can be found at the [ELIXIR Cloud \u0026 AAI's resource\nlistings][res-elixir-cloud-resources].\n\ncwl-WES is developed and maintained by the [ELIXIR Cloud \u0026 AAI\nproject][org-elixir-cloud], a multinational effort aimed at establishing and\nimplementing [FAIR][res-fair] research in the Life Sciences.\n\n## Installation\n\n### Kubernetes\n\nSee separate instructions available [here][docs-kubernetes].\n\n### docker-compose\n\n#### Requirements\n\nEnsure you have the following software installed:\n\n* Docker (18.06.1-ce, build e68fc7a)\n* docker-compose (1.22.0, build f46880fe)\n* Git (1.8.3.1)\n\n\u003e These are the versions used for development/testing. Other versions may or\n\u003e may not work. Please let us know if you encounter any issues with _newer_\n\u003e versions than the listed ones.\n\n#### Instructions\n\n##### Set up environment\n\nCreate data directory and required subdiretories:\n\n```bash\nmkdir -p data/cwl_wes/db data/cwl_wes/output data/cwl_wes/tmp\n```\n\nClone repository:\n\n```bash\ngit clone https://github.com/elixir-cloud-aai/cwl-WES.git\n```\n\nTraverse to app directory:\n\n```bash\ncd app\n```\n\n##### Optional: Edit/override app config\n\n* Via the **app configuration file**\n\n  ```bash\n  vi cwl_wes/config.yaml\n  ```\n\n* Via **environment variables**\n\n  A few configuration settings can be overridden by environment variables:\n\n  ```bash\n  export \u003cENV_VAR_NAME\u003e=\u003cVALUE\u003e\n  ```\n\n  List of the available environment variables:\n\n  | Variable       | Description             |\n  |----------------|-------------------------|\n  | MONGO_HOST     | MongoDB host endpoint   |\n  | MONGO_PORT     | MongoDB service port    |\n  | MONGO_DBNAME   | MongoDB database name   |\n  | MONGO_USERNAME | MongoDB client username |\n  | MONGO_PASSWORD | MongoDB client password |\n  | RABBIT_HOST    | RabbitMQ host endpoint  |\n  | RABBIT_PORT    | RabbitMQ service port   |\n\n###### Build \u0026 deploy\n\nBuild and run services in detached/daemonized mode:\n\n```bash\ndocker-compose up -d --build\n```\n\n###### Copy FTP credentials\n\nCreate a `.netrc` file with credentials for accessing an FTP server:\n\n```bash\ncat \u003c\u003c EOF \u003e .netrc\nmachine \u003cHOST\u003e\nlogin \u003cUSERNAME\u003e\npassword \u003cPASSWORD\u003e\nEOF\n```\n\n\u003e Don't forget to replace `\u003cHOST\u003e`, `\u003cUSERNAME\u003e` and `\u003cPASSWORD\u003e` with real\n\u003e values.\n\u003e\n\u003e If you do not know what to put here, creating an empty file `.netrc` with,\n\u003e e.g., `touch .netrc` will be fine for testing purposes.\n\nCopy the file into the running worker container(s):\n\n```bash\nfor cont in $(docker ps --all | grep wes-worker | cut -f1 -d\" \"); do\n    docker cp .netrc \"${cont}:/tmp/user\"\ndone\n```\n\n###### Use service\n\nVisit Swagger UI:\n\n```bash\nfirefox http://localhost:8080/ga4gh/wes/v1/ui\n```\n\nExample values to start a simple CWL test workflow via the `POST /runs`\nendpoint:\n\n```console\nworkflow_params: {\"input\":{\"class\":\"File\",\"path\":\"ftp://ftp-private.ebi.ac.uk/upload/foivos/test.txt\"}}`\nworkflow_type: CWL\nworkflow_type_version`: v1.0\nworkflow_url: https://github.com/uniqueg/cwl-example-workflows/blob/master/hashsplitter-workflow.cwl\n```\n\nLeave the rest of the values empty and hit the `Try it out!` button.\n\nYou can also use the service through `curl`. For example, to send a request to\nthe `GET /runs` endpoint:\n\n```console\ncurl -X GET \\\n    --header 'Accept: application/json' \\\n    'http://localhost:8080/ga4gh/wes/v1/runs' \n```\n\n###### Authorization\n\nAll endpoints except for `GET /service-info` can be configured to require the\npresence of a valid JWT Bearer token in a request's header. This can be enabled\nby setting the following paraneter in the [app configuration][config-app] to\n`True`:\n\n```yaml\n# Security settings\nsecurity:\n    authorization_required: True\n```\n\nTo send authorized requests, you **must** be in possession of a valid JWT\nBearer token. The app was developed against JWTs issues by\n[ELIXIR AAI][elixir-aai], although JWTs issued by other identity providers may\nwork.\n\nIf you want to utilize actual compute resources in any of the ELIXIR test\ndeployments, you **must** be a member of a specific ELIXIR user group. You can\napply [here][elixir-user-group-apply] to be added to that group (ELIXIR AAI\nonly!). When applying, please include a brief description of why you would like\nto make use of our test deployments and please note that they are for fair use\nonly (please don't try to run your production workflows on them or we will need\nto re-think our strategy of offering free resources for testing/developing).\n\nTo access protected endpoints via `curl`, you only need to add an `Authorization`\nheader to your request, followed by the `Bearer` prefix and your JWT token, like\nso:\n\n```console\ncurl -X GET \\\n    --header 'Accept: application/json' \\\n    --header 'Authorization: Bearer \u003cYOUR_TOKEN\u003e' \\\n    'http://localhost:8080/ga4gh/wes/v1/runs' \n```\n\nIf you are making use of the Swagger UI, you will need to click on the\n**Authorize** button (which appears on the right-hand side of the top bar upon\nenabling the `authorization_required` option) of the Swagger UI website and\nenter your JWT token in the `api_key` field, preceded by the `Bearer` prefix:\n\n![api_key](images/auth.png)\n\n## Contributing\n\nThis project is a community effort and lives off your contributions, be it in\nthe form of bug reports, feature requests, discussions, or fixes and other code\nchanges. Please refer to our organization's [contributing\nguidelines][res-elixir-cloud-contributing] if you are interested to contribute.\nPlease mind the [code of conduct][res-elixir-cloud-coc] for all interactions\nwith the community.\n\n## Versioning\n\nDevelopment of the app is currently still in beta stage, and current\nversions are for internal use only. We are aiming to have a fully\nspec-compliant version of the app available soon. The plan is to then adopt a\n[semantic versioning][res-semver] scheme in which we would shadow WES spec\nversioning, with added date stamp patches for any patch-level changes to our\nservice.\n\n## License\n\nThis project is covered by the [Apache License 2.0][license-apache] also\n[shipped with this repository][license].\n\n## Contact\n\nThe project is a collaborative effort under the umbrella of [ELIXIR Cloud \u0026\nAAI][org-elixir-cloud]. Follow the link to get in touch with us via chat or\nemail. Please mention the name of this service for any inquiry, proposal,\nquestion etc.\n\n[badge-ci]: \u003chttps://travis-ci.com/elixir-cloud-aai/cwl-WES.svg?branch=dev\u003e\n[badge-health]: \u003chttps://img.shields.io/website?url=https%3A%2F%2Fcsc-wes.rahtiapp.fi%2Fga4gh%2Fwes%2Fv1%2Fui%2F\u003e\n[badge-license]: \u003chttps://img.shields.io/badge/license-Apache%202.0-orange.svg?style=flat\u0026color=important\u003e\n[badge-url-ci]: \u003chttps://travis-ci.com/elixir-cloud-aai/cwl-WES\u003e\n[badge-url-health]: \u003chttps://csc-wes.rahtiapp.fi/ga4gh/wes/v1/ui/\u003e\n[badge-url-license]: \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e\n[config-app]: cwl_wes/config.yaml\n[docs-kubernetes]: deployment/README.md\n[elixir-aai]: https://perun.elixir-czech.cz/\n[elixir-user-group-apply]: https://perun.elixir-czech.cz/fed/registrar/?vo=elixir\u0026group=ECP_CLN:OSS\n[license]: LICENSE\n[license-apache]: \u003chttps://www.apache.org/licenses/LICENSE-2.0\u003e\n[org-elixir-cloud]: \u003chttps://github.com/elixir-cloud-aai/elixir-cloud-aai\u003e\n[org-ga4gh]: \u003chttps://www.ga4gh.org/\u003e\n[res-connexion]: \u003chttps://github.com/zalando/connexion\u003e\n[res-cwl]: \u003chttps://www.commonwl.org/\u003e\n[res-cwl-tes]: \u003chttps://github.com/ohsu-comp-bio/cwl-tes\u003e\n[res-elixir-aai]: \u003chttps://www.elixir-europe.org/services/compute/aai\u003e\n[res-elixir-cloud-coc]: \u003chttps://github.com/elixir-cloud-aai/elixir-cloud-aai/blob/dev/CODE_OF_CONDUCT.md\u003e\n[res-elixir-cloud-contributing]: \u003chttps://github.com/elixir-cloud-aai/elixir-cloud-aai/blob/dev/CONTRIBUTING.md\u003e\n[res-elixir-cloud-resources]: \u003chttps://github.com/elixir-cloud-aai/elixir-cloud-aai/blob/dev/resources/resources.md\u003e\n[res-fair]: \u003chttps://www.go-fair.org/fair-principles/\u003e\n[res-flask]: \u003chttp://flask.pocoo.org/\u003e\n[res-funnel]: \u003chttps://ohsu-comp-bio.github.io/funnel/\u003e\n[res-ga4gh-tes]: \u003chttps://github.com/ga4gh/task-execution-schemas\u003e\n[res-ga4gh-wes]: \u003chttps://github.com/ga4gh/workflow-execution-service-schemas\u003e\n[res-gunicorn]: \u003chttps://gunicorn.org/\u003e\n[res-jwt-rfc]: \u003chttps://tools.ietf.org/html/rfc7519\u003e\n[res-mongo]: \u003chttps://www.mongodb.com/\u003e\n[res-semver]: \u003chttps://semver.org/\u003e\n[res-tesk]: \u003chttps://github.com/EMBL-EBI-TSI/TESK\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felixir-cloud-aai%2Fcwl-wes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felixir-cloud-aai%2Fcwl-wes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felixir-cloud-aai%2Fcwl-wes/lists"}