diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..0c3270a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 +indent_style = space +indent_size = 4 + +[*.{tsv,tab}] +indent_style = tab + +[*.{yml,yaml,json,toml,tml}] +indent_style = space +indent_size = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f5e599d --- /dev/null +++ b/.gitignore @@ -0,0 +1,210 @@ +# ==================== +# gitignore entries +# for R +# ==================== + +# History files +.Rhistory +.Rapp.history + +# Session Data files +.RData +.RDataTmp + +# User-specific files +.Ruserdata + +# Example code in package build process +*-Ex.R + +# Output files from R CMD build +/*.tar.gz + +# Output files from R CMD check +/*.Rcheck/ + +# RStudio files +.Rproj.user/ + +# produced vignettes +vignettes/*.html +vignettes/*.pdf + +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth + +# knitr and R markdown default cache directories +*_cache/ +/cache/ + +# Temporary files created by R markdown +*.utf8.md +*.knit.md + +# R Environment Variables +.Renviron + +# pkgdown site +docs/ + +# translation temp files +po/*~ + +# RStudio Connect folder +rsconnect/ + +# ==================== +# gitignore entries +# for PYTHON +# ==================== + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# ==================== +# gitignore entries +# CUSTOM +# ==================== + +# VS code +.vscode/ + +# Ignore container images +*.sif + +# Ignore folder with Conda development environment +dev_env/ + +# Ignore Snakemake metadata folder +.snakemake/ + +# Ignore default working directory in case it was accidentally created +# in the Snakemake repo folder +wd/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5c1c0e2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Core Unit Bioinformatics, Medical Faculty, HHU + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 755c97c..cfda866 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,32 @@ -# template-metadata-files -Collection of metadata files (gitignore, pyprojects, editorconfig, license etc.) to harmonize init of new repositories +# Template Metadata files + +This repository is a collection of metadata files that should be used to initialize new repositories +if appropriate (no strong arguments speak against it). + +## Repository-related metadata files + +- `LICENSE`: using this file is mandatory for all CUBI repositories +- `.editorconfig`: using this file is mandatory for all CUBI repositories +- `.gitignore`: strongly recommended, contains ignore rules for Python, R and some custom entries by default. + There must be a good reason not to use (an extended version of) this file. + +## CUBI metdata files + +By convention, and for convenience, all CUBI metadata are organized in form of a `pyproject.toml` file +containing a minimal amount of descriptive entries. This file must be located at the top-level of the +respective repository. The "hierarchy" in these files is as follows: + +1. include [Python tool settings](tomls/tool/pyproject.toml) for coherent formatting of Python code + - if the repository does not contain any Python code, this may be omitted +2. include [the CUBI metadata information](pyproject.toml), i.e., the top-level `pyproject.toml` in this repository +3. include specific metadata... + - ...for a [project repository](tomls/cubi/project/pyproject.toml) + - ...for a [workflow template repository](tomls/cubi/workflow/template/pyproject.toml) + - ...for a [workflow repository](tomls/cubi/workflow/pyproject.toml) + +As a reminder, read the development guidelines to learn about key characteristics +of workflows and projects, and naming conventions: + +[CUBI dev process in the knowledge base](https://github.com/core-unit-bioinformatics/knowledge-base/wiki/Dev-process#repository-types) + +[CUBI naming conventions in the knowledge base](https://github.com/core-unit-bioinformatics/knowledge-base/wiki/Naming-and-style#naming-repositories) diff --git a/envs/conda/metadata.yaml b/envs/conda/metadata.yaml new file mode 100644 index 0000000..fb6ecb1 --- /dev/null +++ b/envs/conda/metadata.yaml @@ -0,0 +1,11 @@ +name: cubi_metadata +dependencies: + - Python=3.9.* + - pip + - mamba=0.25.0 + - pyyaml=6.0 + - toml=0.10.2 + - semver=2.13.0 + - pylint=2.14.5 + - isort=5.10.1 + - black=22.6.0 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8df4347 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,14 @@ +[cubi.metadata] +pid = "undefined" +version = "protoype" + +[cubi.metadata.naming.workflow.system] +smk="snakemake" +nxf="nextflow" +cwl="common-workflow-language" +wdl="workflow-definition-language" + +[cubi.metadata.naming.project.type] +dev="development" +run="production-run" +bmk="benchmark" diff --git a/tomls/cubi/project/pyproject.toml b/tomls/cubi/project/pyproject.toml new file mode 100644 index 0000000..f51fdd8 --- /dev/null +++ b/tomls/cubi/project/pyproject.toml @@ -0,0 +1,21 @@ +[cubi.project] +pid = "undefined" +type = "type" +name = "undefined" +start_date = 2000-01-01 +end_data = 2099-12-31 + +[[cubi.project.workflow]] +pid = "pid_a" +name = "a" +version = "version_a" + +[[cubi.project.workflow]] +pid = "pid_b" +name = "b" +version = "version_b" + +[[cubi.project.workflow]] +pid = "pid_c" +name = "c" +version = "version_c" diff --git a/tomls/cubi/workflow/pyproject.toml b/tomls/cubi/workflow/pyproject.toml new file mode 100644 index 0000000..928f5c6 --- /dev/null +++ b/tomls/cubi/workflow/pyproject.toml @@ -0,0 +1,9 @@ +[cubi.workflow] +pid = "undefined" +name = "undefined" +version = "prototype" + +[cubi.workflow.template] +pid = "undefined" +system = "system" +version = "prototype" diff --git a/tomls/cubi/workflow/template/pyproject.toml b/tomls/cubi/workflow/template/pyproject.toml new file mode 100644 index 0000000..39b3b74 --- /dev/null +++ b/tomls/cubi/workflow/template/pyproject.toml @@ -0,0 +1,4 @@ +[cubi.workflow.template] +pid = "undefined" +system = "system" +version = "prototype" diff --git a/tomls/tool/pyproject.toml b/tomls/tool/pyproject.toml new file mode 100644 index 0000000..1df485a --- /dev/null +++ b/tomls/tool/pyproject.toml @@ -0,0 +1,15 @@ +[tool.black] +line-length = 88 + +[tool.pylint.format] +max-line-length = "88" + +[tool.pylint.messages_control] +disable=[ + "logging-fstring-interpolation", + "useless-return", + "missing-module-docstring" +] + +[tool.isort] +profile = "black"