{"id":20596274,"url":"https://github.com/ulhpc/sw","last_synced_at":"2025-10-30T07:09:03.519Z","repository":{"id":147481773,"uuid":"357823750","full_name":"ULHPC/sw","owner":"ULHPC","description":"User Software Management on the UL HPC Platform based on RESIF v3 and streamline Easybuild. BEWARE: public export in progress, some files missing until this operation is completed. ","archived":false,"fork":false,"pushed_at":"2022-08-30T19:24:21.000Z","size":3407,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":7,"default_branch":"devel","last_synced_at":"2025-01-17T00:47:58.451Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ULHPC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing/README.md","funding":null,"license":null,"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}},"created_at":"2021-04-14T08:03:11.000Z","updated_at":"2022-11-05T02:15:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"9873d60f-9dcc-4b40-91b1-3ad0c5312195","html_url":"https://github.com/ULHPC/sw","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ULHPC%2Fsw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ULHPC%2Fsw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ULHPC%2Fsw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ULHPC%2Fsw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ULHPC","download_url":"https://codeload.github.com/ULHPC/sw/tar.gz/refs/heads/devel","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242231436,"owners_count":20093636,"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":[],"created_at":"2024-11-16T08:16:06.642Z","updated_at":"2025-10-30T07:08:58.485Z","avatar_url":"https://github.com/ULHPC.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"**IMPORTANT: Public export toward this repository IN PROGRESS, some files will be missing until this operation is completed and this banner disappears**\n\n![By ULHPC](https://img.shields.io/badge/by-ULHPC-blue.svg) [![Licence](https://img.shields.io/badge/license-GPL--3.0-blue.svg)](http://www.gnu.org/licenses/gpl-3.0.html) [![GitHub issues](https://img.shields.io/github/issues/ULHPC/sw.svg)](https://github.com/ULHPC/sw/issues/) [![Github](https://img.shields.io/badge/sources-github-green.svg)](https://github.com/ULHPC/sw/) [![GitHub forks](https://img.shields.io/github/forks/ULHPC/sw?style=flat-square)](https://github.com/ULHPC/sw)\n\n      _   _ _       _   _ ____   ____   ____  _____ ____ ___ _____   _____  ___\n     | | | | |     | | | |  _ \\ / ___| |  _ \\| ____/ ___|_ _|  ___| |___ / / _ \\\n     | | | | |     | |_| | |_) | |     | |_) |  _| \\___ \\| || |_      |_ \\| | | |\n     | |_| | |___  |  _  |  __/| |___  |  _ \u003c| |___ ___) | ||  _|    ___) | |_| |\n      \\___/|_____| |_| |_|_|    \\____| |_| \\_\\_____|____/___|_|     |____(_)___/\n\n       Copyright (c) 2020-2021 UL HPC Team \u003chpc-team@uni.lu\u003e\n\n__User Software Management for [Uni.lu HPC](https://hpc.uni.lu) Facility based on the RESIF 3.0 framework__\n\nThis is the **Public** repository exposing the main scripts, concepts and documentation facilitating the dissemination of our concepts.\n\n[Accepted paper](https://orbilu.uni.lu/handle/10993/47115) describing RESIF3 concepts and architecture was presented during [ACM PEARC'21](https://pearc.acm.org/pearc21/) [1] -- [doi](https://dl.acm.org/doi/10.1145/3437359.3465600) | [orbilu](https://orbilu.uni.lu/handle/10993/47115)\n\n\u003e [1] S. Varrette, E. Kieffer, F. Pinel, E. Krishnasamy, S. Peter, H. Cartiaux, and X. Besseron, \"_RESIF 3.0: Toward a Flexible \u0026 Automated Management of User Software Environment on HPC facility_\", in ACM Practice and Experience in Advanced Research Computing ([PEARC'21](https://pearc.acm.org/pearc21/)), Virtual Event, 2021.\n\n[![](slides/2021/ACM-PEARC21/cover.png)](slides/2021/ACM-PEARC21/slides_acm-pearc21-resif3.pdf)\n\n\n### BibTex entry\n\n      ```bibtex\n      @InProceedings{VKPKPCB_PEARC21,\n        author =       {S. Varrette and E. Kieffer and F. Pinel and E. Krishnasamy and S. Peter and H. Cartiaux and X. Besseron},\n        title =        {{RESIF 3.0: Toward a Flexible \u0026 Automated Management of User Software Environment on HPC facility}},\n        booktitle =    {ACM Practice and Experience in Advanced Research Computing (PEARC'21)},\n        year =         {2021},\n        publisher =    {Association for Computing Machinery (ACM)},\n        OPTseries =    {{PEARC'21}},\n        month =        {July},\n        address =      {Virtual Event},\n        doi =          {10.1145/3437359.3465600},\n        isbn =         {978-1-4503-8292-2/21/07},\n        url =          {https://pearc.acm.org/pearc21/},\n      },\n      ```\n\n## Installation / Repository Setup\n\nTo clone this repository, proceed as follows (adapt accordingly):\n\n``` bash\n$ mkdir -p ~/git/github.com/ULHPC\n$ cd ~/git/github.com/ULHPC\n$ git clone https://github.com/ULHPC/sw.git\n```\n\n**`/!\\ IMPORTANT`**: Once cloned and after following [Preliminaries guidelines](docs/setup.md) (LMod install, virtualenv setup, Github token etc. -- see [`docs/setup.md`](docs/setup.md) and [`docs/contributing/setup-github-integration.md`](docs/contributing/setup-github-integration.md)), initiate your local copy of the repository by running:\n\n``` bash\n$ cd ~/git/github.com/ULHPC/sw\n$ make setup\n```\n\n__Post setup checks (laptop)__\n\nFrom that point, you should be able to load Easybuild from your laptop, and all the following commands should succeed:\n\n``` bash\n### On your laptop\nsource settings/default.sh\neb --version\neb --show-config\n# check that you are able to interact/update the ULHPC fork copy\nmake fork-easyconfigs-update\n# check that you can interact with github\neb --check-github   # All checks PASSed!\n```\n\n__Post setup checks (on supercomputer login node)__\n\nWhen repeating the setup on the cluster, you can check that you are ready if the following commands should succeed:\n\n``` bash\n### On iris, this will go on a broadwell node\n./scripts/get-interactive-job\nsource settings/${ULHPC_CLUSTER}.sh\n# enable SSH agent\neval \"$(ssh-agent)\"\nssh-add ~/.ssh/id_rsa\n\neb --version\neb --show-config\n# check that you are able to interact/update the ULHPC fork copy\nmake fork-easyconfigs-update\n# check that you can interact with github\neb --check-github   # ONLY new-pr and update-pr should FAIL\n# reason is that most probably you don't want the ssh key on the cluster authorized\n# to push on ULHPC fork\neval \"$(ssh-agent -k)\"  # ONLY new-pr and update-pr should FAIL\n# reason is that most probably you don't want the ssh key on the cluster authorized\n# to push on ULHPC fork\n```\n\n## Documentation\n\nSee [`docs/`](docs/README.md).\n\nThe documentation for this project is handled by [`mkdocs`](http://www.mkdocs.org/#installation).\nYou might wish to generate locally the docs:\n\n* Install [`mkdocs`](http://www.mkdocs.org/#installation)\n* Preview your documentation from the project root by running `mkdocs serve` and visit with your favorite browser the URL `http://localhost:8000`\n     - Alternatively, you can run `make doc` at the root of the repository.\n* (eventually) build the full documentation locally (in the `site/` directory) by running `mkdocs build`.\n\n## Software set organizations\n\nSee [`docs/swsets.md`](docs/swsets.md).\n\nSoftware sets holds a categorised list of software, defined as Module [`Bundle`](https://easybuild.readthedocs.io/en/latest/version-specific/generic_easyblocks.html#bundle) for the ULHPC environment holding the dependencies of hierarchical bundles structured under `easyconfigs/u` as follows:\n\n```bash\n├── ULHPC/[...]-\u003cversion\u003e.eb    #### === Default global bundle for 'regular' nodes ===\n│   ├── ULHPC-toolchains/[...]-\u003cversion\u003e.eb ### Toolchains, compilers, debuggers, programming languages...\n│   ├── ULHPC-bio/[...]-\u003cversion\u003e.eb        ### Bioinformatics, biology and biomedical\n│   ├── ULHPC-cs/[...]-\u003cversion\u003e.eb         ### Computational science, including:\n│   └── [...]\n└── ULHPC-gpu/[...]-\u003cversion\u003e.eb #### === Specific GPU versions compiled under {foss,intel}cuda toolchains ===\n```\n\nSee [`easyconfigs/u/ULHPC*`](easyconfigs/u/)\n\n![](docs/images/resif_bundles.png)\n\nA strong versioning policy is enforced, which fix the core component versions of the bundles.\n\n![](docs/images/resif_swsets_toolchains_version.png)\n\n## User Software builds\n\nSlurm launchers are provided under `scripts/`  to facilitate software builds.\n\n**`/!\\ IMPORTANT`** RESIF 3 supports 3 operation modes depicted below:\n\n| Operation Mode                       | Architecture    | Launcher script                                                                |\n|----------------------                |------------     |----------------------------------------------------------------                |\n| Easybuild bootstrap/update           | *               | `setup.sh`                                                                     |\n| _Home_/_Testing_ builds              | default         | `[sbatch] ./scripts/[\u003cversion\u003e]/launcher-test-build-cpu.sh`                    |\n|                                      | CPU non-default | `[sbatch] ./scripts/[\u003cversion\u003e]/launcher-test-build-cpu-\u003carch\u003e.sh`             |\n|                                      | GPU optimized   | `[sbatch] ./scripts/[\u003cversion\u003e]/launcher-test-build-gpu.sh`                    |\n| _Production_ `\u003cversion\u003e` builds      | default         | `[sbatch] ./scripts/prod/launcher-resif-prod-build-cpu.sh        -v \u003cversion\u003e` |\n|                                      | CPU non-default | `[sbatch] ./scripts/prod/launcher-resif-prod-build-cpu-\u003carch\u003e.sh -v \u003cversion\u003e` |\n|                                      | GPU optimized   | `[sbatch] ./scripts/prod/launcher-resif-prod-build-gpu.sh        -v \u003cversion\u003e` |\n\n**See [`docs/build.md`](docs/build.md) for more details**\n\n_Note_: for convenience, a GNU screen configuration file [`config/screenrc`](config/screenrc) is provided to quickly bootstrap the appropriate tabs:\n\n```bash\nscreen -c config/screenrc\n# 'SW' tab meant for git / sync operations. To enable the ssh agent:\n#    eval \"$(ssh-agent)\"\n#    ssh-add ~/.ssh/id_rsa\n#    make up\n#    make fork-easyconfigs-update\n# 'broadwell' tab for associated build. Ex interactive job:\n#    ./scripts/get-interactive-job\n# 'skylake' tab for associated build. Ex interactive job:\n#    ./scripts/get-interactive-job-skylake\n# 'gpu' tab for associated build. Ex interactive job:\n#    ./scripts/get-interactive-job-gpu\n# 'epyc' tab  for aion builds\n#    ssh aion\n#    ./scripts/get-interactive-job\n```\n\nDon't forget to kill your ssh agent when you have finish: `eval \"$(ssh-agent -k)\"`\n\nIn all cases, **production** builds **MUST** be run as `resif` using the launcher scripts under `scripts/prod/*`.\nSoftware and modules will be installed in that case under `/opt/apps/resif` (`$LOCAL_RESIF_ROOT_DIR`) -- See [Technical Docs](https://hpc-docs.uni.lu/environment/modules/#ulhpc-modulepath).\nYou **MUST BE VERY CAREFUL** when running these scripts as they alter the production environment.\n\nThe final organizations of the software and modules is depicted below:\n\n![](https://hpc-docs.uni.lu/environment/images/ULHPC-software-stack.png)\n\n## Workflow and ULHPC Bundle Development guidelines\n\nYou first need to review the expected [Git workflow](docs/contributing/git-flow.md)\n\n![](docs/contributing/ULHPC-git-workflow.png)\n\nTo add a new software to one of the ULHPC bundle module, you need to find and eventually adapt an existing Easyconfig file. Searching such files can be done using either `eb -S \u003cpattern\u003e`, or via the provided script [`./scripts/suggest-easyconfigs [-v \u003cversion\u003e] \u003cpattern\u003e`](scripts/suggest-easyconfigs) which\n\n1. search for Easyconfigs matching the proposed pattern, sorted by increasing version (`sort -V`)\n2. check among those easyconfigs is any would be available for the target toolchain as that's probably the one you should use\n3. suggest a single easyconfig to try (most recent version)\n\nExample:\n``` bash\n$\u003e ./scripts/suggest-easyconfigs -h\n$\u003e ./scripts/suggest-easyconfigs PAPI\n=\u003e Searching Easyconfigs matching pattern 'PAPI'\nPAPI-5.4.3-foss-2016a.eb\nPAPI-5.5.1-GCCcore-6.3.0.eb\nPAPI-5.5.1-GCCcore-6.4.0.eb\nPAPI-5.6.0-GCCcore-6.4.0.eb\nPAPI-5.7.0-GCCcore-7.3.0.eb\nPAPI-5.7.0-GCCcore-8.2.0.eb\nPAPI-6.0.0-GCCcore-8.3.0.eb\nTotal:        7 entries\n\n... potential exact match for 2019b toolchain\nPAPI-6.0.0-GCCcore-8.3.0.eb\n --\u003e suggesting 'PAPI-6.0.0-GCCcore-8.3.0.eb'\n```\n\nSee also [`docs/workflow.md`](docs/workflow.md) for more details.\n\n## Submitting working Easyconfigs to easybuilders\n\nSee [`docs/contributing/`](docs/contributing/README.md)\n\nTo limit the explosion of custom easyconfigs as was done in the past, the key objective of this project is to **minimize** the number of custom easyconfigs to the _strict_ minimum and thus to submit a maximum of easyconfigs to the community for integration in the official [`easybuilders/easybuild-easyconfigs`](https://github.com/easybuilders/easybuild-easyconfigs) repository.\nA set of helper scripts are provided to facilitate this operation -- Typical workflow:\n\n```bash\n# Creating a new pull requests (typically ion your laptop)\n./scripts/PR-create -n easyconfigs/\u003cletter\u003e/\u003csoftware\u003e/\u003cfilename\u003e.eb    # Dry-run\n./scripts/PR-create easyconfigs/\u003cletter\u003e/\u003csoftware\u003e/\u003cfilename\u003e.eb\n# Complete it with a successfull test report ON IRIS/AION\nsbatch ./scripts/PR-rebuild-upload-test-report.sh \u003cID\u003e\n\n# (eventually) Update/complete the pull-request with new version/additional EB files\neb --update-pr \u003cID\u003e \u003cfile\u003e.eb --pr-commit-msg \"\u003cmessage\u003e\" # use native easybuild command here\n#  Update your local easyconfigs from remote PR commits\n./scripts/update-from-PR [-n] \u003cID\u003e\n\n# Repo cleanup upon merged pull-request\n./scripts/PR-close [-n] \u003cID\u003e\n```\n\n## Issues / Feature request\n\nYou can submit bug / issues / feature request using the [`ULHPC/sw` Project Tracker](https://github.com/ULHPC/sw/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fulhpc%2Fsw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fulhpc%2Fsw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fulhpc%2Fsw/lists"}