{"id":16287899,"url":"https://github.com/neilmunday/slurm-mail","last_synced_at":"2025-04-23T04:37:02.829Z","repository":{"id":37269126,"uuid":"121157508","full_name":"neilmunday/slurm-mail","owner":"neilmunday","description":"Slurm-Mail is a drop in replacement for Slurm's e-mails to give users much more information about their jobs compared to the standard Slurm e-mails.","archived":false,"fork":false,"pushed_at":"2025-04-18T21:40:43.000Z","size":1307,"stargazers_count":105,"open_issues_count":2,"forks_count":39,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-19T08:52:24.138Z","etag":null,"topics":["email","email-template","python","slurm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neilmunday.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":"supported_python_versions.json","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["neilmunday"]}},"created_at":"2018-02-11T19:11:25.000Z","updated_at":"2025-04-15T08:03:51.000Z","dependencies_parsed_at":"2024-02-02T23:25:29.786Z","dependency_job_id":"aca066e0-2e78-48a9-a81e-2eb4d4e4083e","html_url":"https://github.com/neilmunday/slurm-mail","commit_stats":null,"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neilmunday%2Fslurm-mail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neilmunday%2Fslurm-mail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neilmunday%2Fslurm-mail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neilmunday%2Fslurm-mail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neilmunday","download_url":"https://codeload.github.com/neilmunday/slurm-mail/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250372465,"owners_count":21419719,"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","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":["email","email-template","python","slurm"],"created_at":"2024-10-10T19:46:38.816Z","updated_at":"2025-04-23T04:37:02.812Z","avatar_url":"https://github.com/neilmunday.png","language":"Python","funding_links":["https://github.com/sponsors/neilmunday"],"categories":[],"sub_categories":[],"readme":"Slurm-Mail\n==========\n\n[![GitHub license](https://img.shields.io/github/license/neilmunday/slurm-mail?style=plastic)](https://github.com/neilmunday/slurm-mail/blob/main/LICENSE) [![GitHub stars](https://img.shields.io/github/stars/neilmunday/slurm-mail?style=plastic)](https://github.com/neilmunday/slurm-mail/stargazers) [![GitHub forks](https://img.shields.io/github/forks/neilmunday/slurm-mail?style=plastic)](https://github.com/neilmunday/slurm-mail/network) [![GitHub issues](https://img.shields.io/github/issues/neilmunday/slurm-mail?style=plastic)](https://github.com/neilmunday/slurm-mail/issues) ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/neilmunday/slurm-mail/test_and_release.yml?label=Tests\u0026style=plastic) [![Coverage badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/neilmunday/slurm-mail/python-coverage-comment-action-data/endpoint.json\u0026style=plastic)](https://github.com/neilmunday/slurm-mail/tree/python-coverage-comment-action-data) ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/neilmunday/slurm-mail/pylint.yml?label=PyLint\u0026style=plastic) ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/neilmunday/slurm-mail/mypy.yml?label=mypy\u0026style=plastic)\n\nAuthor: Neil Munday (neil at mundayweb.com)\n\nRepository: [https://github.com/neilmunday/slurm-mail](https://github.com/neilmunday/slurm-mail)\n\n**Contents**\n\n1. [Introduction](#introduction)\n2. [Requirements](#requirements)\n3. [Installation](#installation)\n4. [Configuration](#configuration)\n5. [SMTP Settings](#smtp-settings)\n6. [Customising E-mails](#customising-e-mails)\n7. [Validating E-mails](#validating-e-mails)\n8. [Including Job Output in E-mails](#including-job-output-in-e-mails)\n9. [Job Arrays](#job-arrays)\n10. [GECOS Field Usage](#gecos-field-usage)\n11. [Development](#development)\n12. [Linting](#linting)\n13. [Testing](#testing)\n14. [Upgrading from Slurm-Mail version 3 to 4](#upgrading-from-slurm-mail-version-3-to-4)\n15. [Upgrading from Slurm-Mail version 4.0-4.9 to 4.10](#upgrading-from-slurm-mail-version-40-49-to-410)\n16. [Troubleshooting](#troubleshooting)\n17. [Contributors](#contributors)\n\n## Introduction\n\nE-mail notifications from [Slurm](https://slurm.schedmd.com/) are rather brief and all the information is contained in the subject of the e-mail - the body is empty.\n\nSlurm-Mail aims to address this by providing a drop in replacement for Slurm's e-mails to give users much more information about their jobs via HTML e-mails which contain the following information:\n\n* Start/End\n* Job name\n* Partition\n* Work dir\n* Elapsed time\n* Exit code\n* Std out file path\n* Std err file path\n* No. of nodes used\n* Node list\n* Requested memory per node\n* Maximum memory usage per node\n* CPU efficiency\n* Wallclock\n* Wallclock accuracy\n\nE-mails can be easily customised to your needs using the provided templates (see below).\n\nYou can also opt to include a number of lines from the end of the job's output files in the job completion e-mails (see below).\n\n## Requirements\n\n* cron\n* logrotate\n* Python 3.6 or newer\n* Slurm 22, 23 or 24\n* A working e-mail server\n\n**Note:** earlier versions of Slurm may work but are not tested with this release of Slurm-Mail.\n\n## Installation\n\n### Amazon Linux, RedHat and SUSE Based Operating Systems\n\nFor each release of Slurm-Mail, RPMs for Amazon Linux 2, RedHat 7/8/9 and SUSE 15 based operating systems are provided at [neilmunday.github.io/slurm-mail/repo](https://neilmunday.github.io/slurm-mail/repo/).\n\n#### Amazon Linux 2\n\n```bash\nsudo wget -O /etc/yum.repos.d/slurm-mail.repo https://neilmunday.github.io/slurm-mail/repo/slurm-mail.amnz2.repo\nsudo yum install slurm-mail\n```\n\n#### Amazon Linux 2023\n\n```bash\nsudo dnf dnf config-manager --add-repo https://neilmunday.github.io/slurm-mail/repo/slurm-mail.amnz2023.repo\nsudo dnf install slurm-mail\n```\n\n#### RedHat 7 / CentOS 7\n\n```bash\nsudo wget -O /etc/yum.repos.d/slurm-mail.repo https://neilmunday.github.io/slurm-mail/repo/slurm-mail.el7.repo\nsudo yum install slurm-mail\n```\n\n#### RedHat 8 / Rocky Linux 8 / Oracle Linux 8\n\n```bash\nsudo dnf dnf config-manager --add-repo https://neilmunday.github.io/slurm-mail/repo/slurm-mail.el8.repo\nsudo dnf install slurm-mail\n```\n\n#### RedHat 9 / Rocky Linux 9 / Oracle Linux 9\n\n```bash\nsudo dnf dnf config-manager --add-repo https://neilmunday.github.io/slurm-mail/repo/slurm-mail.el9.repo\nsudo dnf install slurm-mail\n```\n\n#### OpenSUSE 15 / SLES 15\n\n```bash\nsudo zypper addrepo --no-gpgcheck  --refresh https://neilmunday.github.io/slurm-mail/repo/sl15 slurm-mail\nsudo zypper install slurm-mail\n```\n\n#### Other RPM Based Operating Systems\n\nFor other operating systems that use RPM packages you can create a package for your OS like so:\n\n```bash\ndnf -y install python36 rpm-build tar\ngit clone https://github.com/neilmunday/slurm-mail\nslurm-mail/build-tools/build-rpm.sh\n```\n\nThe RPM will be written to `~/rpmbuild/RPMS/noarch`.\n\n### Ubuntu 20 and 22\n\nPre-built Ubuntu 20 and 22 packages are provided at [neilmunday.github.io/slurm-mail/repo](https://neilmunday.github.io/slurm-mail/repo/).\n\nAdd to your `/etc/apt/sources.list` file the following line depending on your OS.\n\n#### Ubuntu 20\n\n```\ndeb [trusted=yes] https://neilmunday.github.io/slurm-mail/repo/ub20 ./\n```\n\n#### Ubuntu22\n\n```\ndeb [trusted=yes] https://neilmunday.github.io/slurm-mail/repo/ub22 ./\n```\n\n#### Ubuntu24\n\n```\ndeb [trusted=yes] https://neilmunday.github.io/slurm-mail/repo/ub24 ./\n```\n\n#### Install\n\nThen install using `apt-get`:\n\n```bash\napt-get install slurm-mail\n```\n\n#### Other Debian based Operating Systems\n\nFor other Debian variants you can create a package for your OS like so:\n\n```bash\nsudo apt-get install -y fakeroot dh-python lintian lsb-release python3 python3-stdeb\ngit clone https://github.com/neilmunday/slurm-mail\nslurm-mail/build-tools/build-deb.sh\n```\n\nAt the end of the execution the location of the built package will be written to stdout.\n\nTo install the generated package for example:\n\n```bash\napt-get install -y cron logrotate python3 slurm-client\ndpkg --force-all -i /tmp/slurm-mail_4.3-ubuntu1_all.deb\n```\n\n### From source (as root)\n\n```bash\ngit clone https://github.com/neilmunday/slurm-mail\ncd slurm-mail\npython setup.py install\ncp etc/logrotate.d/slurm-mail /etc/logrotate.d/\ncp etc/cron.d/slurm-mail /etc/cron.d/\ninstall -d -m 700 -o slurm -g slurm /var/log/slurm-mail\n```\n\n**Note:** Depending on your operating system's Python set-up, it is possible that `setuptools` might install Slurm-Mail to `/usr/local` rather than `/usr`.\n\n### AWS Parallel Cluster\n\nSlurm-Mail can be installed and automatically configured to work with [AWS Parallel Cluster](https://aws.amazon.com/hpc/parallelcluster/) by using the [this recipe](https://github.com/aws-samples/aws-hpc-recipes/tree/main/recipes/pcluster/slurm_accounting_with_email).\n\n## Configuration\n\nEdit `/etc/slurm-mail/slurm-mail.conf` to suit your needs. For example, check that the location of `sacct` is correct. If you are installing from source check that the log and spool directories are set to your desired values.\n\nChange the value of `MailProg` in your `slurm.conf` file to `/usr/bin/slurm-spool-mail`. By default the Slurm config file will be located at `/etc/slurm/slurm.conf`.\n\nRestart `slurmctld`:\n\n```bash\nsystemctl restart slurmctld\n```\n\nSlurm-Mail will now log e-mail requests from Slurm users to the Slurm-Mail spool directory `/var/spool/slurm-mail`.\n\nThe cron job created during installation at `/etc/cron.d/slurm-mail` will execute once per minute to process the spool files, thus making sure that `slurmctld` is not blocked by processing e-mails.\n\n## SMTP Settings\n\nBy default Slurm-Mail will send e-mails to a mail server running on the same host as Slurm-Mail is installed on, i.e. `localhost`.\n\nYou can edit the `smtp` configuration options in `/etc/slurm-mail/slurm-mail.conf`. For example, to send e-mails via Gmail's SMTP server set the following settings:\n\n```\nsmtpServer = smtp.gmail.com\nsmtpPort = 587\nsmtpUseTls = yes\nsmtpUserName = your_email@gmail.com\nsmtpPassword = your_gmail_password\n```\n\n\u003e **_NOTE:_**  As this file will contain your Gmail password make sure that it has the correct owner, group and file access permissions.\n\nIf your SMTP server does not require a login, leave `smtpUserName` and `smtpPassword` set to null, i.e.\n\n```\nsmtpUserName =\nsmtpPassword =\n```\n\nFor SMTP servers that use SSL rather than starttls please set `smtpUseSsl = yes`.\n\n## E-mail retries\n\nBy default Slurm-Mail will attempt to resend e-mails when a previous attempt failed. This can result in repeated failed e-mail attempts if for example a user has specified an invalid e-mail address.\n\nIf you would prefer to disable this feature, set the following option in `/etc/slurm-mail/slurm-mail.conf`:\n\n```\nretryOnFailure = no\n```\n\nIn either case, errors for failed e-mail delivery will always be logged in `/var/log/slurm-mail/slurm-send-mail.log`\n\n## E-mail headers\n\nTo add additional e-mail headers to outgoing e-mails please set the `emailHeaders` option in `/etc/slurm-mail/slurm-mail.conf`\n\n## Customising E-mails\n\n### Templates\n\nSlurm-Mail uses Python's [string.Template](https://docs.python.org/3/library/string.html#template-strings) class to create the e-mails it sends. Under Slurm-Mail's `/etc/slurm-mail/templates` directory you will find the following files that you can edit to customise e-mails to your needs under the `html` and `text` directories. Templates under the `html` directory are used for HTML e-mails and the templates under `text` are used for plain text e-mails.\n\n| Filename                  | Template Purpose                                                  |\n| ------------------------- | ----------------------------------------------------------------- |\n| ended-array.tpl           | Used for jobs in an array that have finished.                     |\n| ended-array_summary.tpl   | Used when all jobs in an array have finished.                     |\n| ended-hetjob.tpl          | Used for the leader job in a heterogeneous job that has ended.    |\n| ended.tpl                 | Used for jobs that have finished.                                 |\n| invalid-dependency.tpl    | Used when a job has an invalid dependency.                        |\n| job-table.tpl             | Used to create the job info table in e-mails.                     |\n| never-ran.tpl             | Used for jobs that never ran.                                     |\n| signature.tpl             | Used to create the e-mail signature.                              |\n| staged-out.tpl            | Used when a job's burst buffer stage has completed.               |\n| started.tpl               | Used for jobs that have started.                                  |\n| started-hetjob.tpl        | Used for the leader job in a heterogeneous job that has started.  |                                 |\n| started-array-summary.tpl | Used when the first job in an array has started.                  |\n| started-array.tpl         | Used for the first job in an array that has started.              |\n| time.tpl                  | Used when a job reaches a percentage of its time limit.           |\n| tres.tpl                  | Used to add trackable resources (TRES) information to e-mails.    |\n\nEach template has a number of variables which can be used in the generation of e-mails. Please see [TEMPLATES](TEMPLATES.md) for futher details.\n\n### Styling\n\nYou can adjust the font style, size, colours etc. by editing the Cascading Style Sheet (CSS) file `/etc/slurm-mail/style.css` used for generating the e-mails.\n\n### Date/time format\n\nTo change the date/time format used for job start and end times in the e-mails, change the `datetimeFormat` configuration option in `/etc/slurm-mail/slurm-mail.conf`. The format string used is the same as Python's [datetime.strftime function](https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior).\n\n### E-mail subject\n\nTo change the subject of the e-mails, change the `emailSubject` configuration option in `/etc/slurm-mail`. You use the following place holders in the string:\n\n| Place holder | Value                   |\n| ------------ | ----------------------- |\n| $CLUSTER     | The name of the cluster |\n| $JOB_NAME    | The name of the job     |\n| $JOB_ID      | The Slurm ID of the job |\n| $STATE       | The state of the job    |\n\n## Validating E-mails\n\nBy default Slurm-Mail will not perform any checks on the destination e-mail address (i.e the value supplied to `sbatch` via `--mail-user`). If you would like Slurm-Mail to only send e-mails for jobs that correspond to a valid e-mail address (e.g. user@some.domain) then you can set the `validateEmail` option in `/etc/slurm-mail/slurm-mail.conf` to `true`. E-mail addresses that failed this check will be logged in `/var/log/slurm-mail/slurm-send-mail.log` as an error.\n\nThe regular expression used to validate e-mail addresses can be configured by adjusting the `emailRegEx` value in `/etc/slurm-mail/slurm-mail.conf`.\n\n## Including Job Output in E-mails\n\nIn `/etc/slurm-mail/slurm-mail.conf` you can set the `includeOutputLines` to the number of lines to include from the end of each job's standard out and standard error files.\n\nNotes:\n\n* if the user has decided to use the same file for both standard output and standard error then there will be only one section of job output in the job completion e-mails.\n* Job output can only be included if the process that is running `slurm-send-mail.py` is able to read the user's output files.\n* Due to the way `scontrol` reports filenames that use Slurm's [filename patterns](https://slurm.schedmd.com/sbatch.html#SECTION_%3CB%3Efilename-pattern%3C/B%3E) only these patterns are supported when including job output in e-mails: `%A`, `%a`, `%j`, `%u`, and `%x`.\n\n## Job Arrays\n\nSlurm-Mail will honour the behaviour of `--mail-type` option of `sbatch` for job arrays. If a user specifies `--mail-type=ARRAY_TASKS` then Slurm-Mail will send notification e-mails for all jobs in the array. If you want to limit the number of e-mails that will be sent in this scenario then change the `arrayMaxNotifications` parameter in `slurm-mail.conf` to a value greater than zero.\n\n## GECOS Field Usage\n\nSlurm-Mail uses the [GECOS](https://en.wikipedia.org/wiki/Gecos_field) field of a user's passwd entry to determine their real name to use in e-mails. Slurm-Mail will split the [GECOS](https://en.wikipedia.org/wiki/Gecos_field) field by the comma character and will by default use the first (zeroth) element. If your system is set-up to use a different element for the user's real name then you can change the `gecosNameField` parameter in `slurm-mail.conf` to your desired value.\n\nFor example, if your [GECOS](https://en.wikipedia.org/wiki/Gecos_field) uses the format `Last name, first name` you can set `gecosNameField` to `1` instead of `0`.\n\n# Development\n\nClone this repository to your desktop and make sure you have a supported version of Python installed (see *Requirements* above).\n\nPull requests are welcome!\n\nA VSCode settings file is provided in this repository and is configured to allow you to run unit tests from the GUI.\n\n## Linting\n\n`pylint` is used to check that the Slurm-Mail Python source code is formatted correctly.\n\n```bash\npip3 install --user pylint\n```\n\nOnce install you can run `pylint` against the Slurm-Mail source code:\n\n```bash\npylint setup.py src/slurmmail/*.py tests/unit/*.py tests/integration/docker-slurm/*.py tests/integration/*.py\n```\n\n## Testing\n\nIn order to run the unit tests you will need to install `pytest`, e.g.\n\n```bash\npip3 install --user pytest\n```\n\nThe unit tests can be found at [tests/unit](tests/unit) and can be invoked from either VSCode or from the command line, e.g.\n\n```bash\npytest\n```\n\nIntegration tests can be found at [tests/integration](tests/integration) which also contains a `demo.sh` script which allows you to experiment with a demo of Slurm-Mail complete with [MailHog](https://hub.docker.com/r/mailhog/mailhog/) as a working mail server and webmail client.\n\n## Upgrading from Slurm-Mail version 3 to 4\n\nVersion 4.0 onwards **no longer installs** to the `/opt/slurm-mail`. Instead from version 4.0 onwards install using Python's `setuptools` module. If your current Slurm-Mail 3.x installation was installed by your operating system's package manager, then you can just upgrade your installation using your package manager (e.g. `yum`, `dnf`).\n\nIf not, then proceed as follows:\n\n1. install Slurm-Mail 4 using one of the methods describe above - take note of where the scripts and config files are installed (e.g. `/usr/bin` and `/etc`).\n\n2. If you **have not** modified any template files you can skip this step.\n\n```bash\ncp /opt/slurm-mail/conf.d/templates/* /etc/slurm-mail/templates/html/\n```\n\nNow check the contents of the plain text templates located at `/etc/slurm-mail/templates/text` and adjust as necessary to meet your requirements.\n\n3. If you **have not** modified Slurm-Mail's `style.css` file you can skip this step.\n\n```bash\ncp /opt/slurm-mail/conf.d/style.css /etc/slurm-mail/\n```\n\n4. If you **have not** modified `slurm-mail.conf` you can skip this step.\n\n```\ncp /opt/slurm-mail/conf.d/slurm-mail.conf /etc/slurm-mail/\n```\n\n5. Update your Slurm installation's `slurm.conf` file:\n\n```\nMailProg=/usr/bin/slurm-spool-mail\n```\n\nNow restart `slurmctld`:\n\n```bash\nsystemctl restart slurmctld\n```\n\n6. Edit `/etc/cron.d/slurm-mail` and set the path of the executable to: `/usr/bin/slurm-send-mail`\n\n7. If you are sure you will no longer need the old version:\n\n```\nrm -rf /opt/slurm-mail\n```\n\n## Upgrading from Slurm-Mail version 4.0-4.9 to 4.10\n\nStarting from version 4.10, HTML and plain text e-mail templates are provided. If you have adjusted any templates please copy them from `/etc/slurm-mail/templates` to `/etc/slurm-mail/templates/html` and adjust any of the plain text templates as necessary under `/etc/slurm-mail/templates/text`.\n\n## Troubleshooting\n\n1. Check that spool files are being created under: `/var/spool/slurm-mail`. If they are not:\n\n* check `cron` is working\n* check for invocation of `/usr/bin/slurm-spool-mail` in the `slurmctld` logs\n\n2. If spool files are being created but not purged please comment out `logFile` in the `[slurm-send-mail]` section in `/etc/slurm-mail/slurm-mail.conf` and run (as root): `/usr/bin/slurm-send-mail -v` at the console.\n\n3. If `/usr/bin/slurm-send-mail` is executing ok but you are not receiving e-mails, then check the mail logs on your server for any mail delivery errors.\n\n## Contributors\n\nThank you to the following people who have contributed code improvements, features, found bugs and aided the development of Slurm-Mail:\n\n* [David Murray (@dajamu)](https://www.github.com/dajamu)\n* [Dan Barker (@danbarke)](https://www.github.com/danbarke)\n* [drhey (@drhey)](https://www.github.com/drhey)\n* [Dennis Stam (@dstam)](https://github.com/dstam)\n* [hakasapl (@hakasapl)](https://www.github.com/hakasapl)\n* [Hugo Larcher @Hugoch](https://www.github.com/Hugoch)\n* [Jan-Christoph Klie (@jcklie)](https://github.com/jcklie)\n* [langefa (@langefa)](https://github.com/langefa)\n* [mamiller615 (@mamiller615)](https://github.com/mamiller615)\n* [Mehran Khodabandeh (@mkhodabandeh)](https://www.github.com/mkhodabandeh)\n* [Neil Prockter (@mrgum)](https://github.com/mrgum)\n* [rzegson (@rzegson)](https://github.com/rzegson)\n* [sdx23 (@sdx23)](https://www.github.com/sdx23)\n* [Simon Feltman (@sfeltman)](https://www.github.com/sfeltman)\n* [Thanasis Georgiou (@thgeorgiou)](https://www.github.com/thgeorgiou)\n* [Woody Chang (@jitkang)](https://github.com/jitkang)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneilmunday%2Fslurm-mail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneilmunday%2Fslurm-mail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneilmunday%2Fslurm-mail/lists"}