|
1 | | -[](https://opensource.org/licenses/Apache-2.0) |
2 | | -[](https://github.com/copier-org/copier) |
| 1 | +# Meta-Template for Research Software |
3 | 2 |
|
4 | | -# Research Software Meta Template |
| 3 | +A tool that helps **template creators** to create **software templates** for research software, and adopt best practices on sustainable software for Natural and Engineering Sciences. It provides a way to align best practices and reduce maintainance efforts across organisations, while allowing organisation to customize software templates to their needs. |
| 4 | + |
| 5 | +If you came here looking for a template to start your own research software project, you check out the [Software Template Registry](REGISTRY.md) for a list of software templates that are using the *meta-template*. |
| 6 | + |
| 7 | +| [FAIR-Software Recommendations](https://fair-software.nl) | Badges| |
| 8 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | |
| 9 | +| 1. Code Repository | [](https://github.com/SS-NES/meta-template/releases/latest) | |
| 10 | +| 2. License | [](https://opensource.org/licenses/Apache-2.0) | |
| 11 | +| 3. Community Registry | [](https://github.com/copier-org/copier)| |
5 | 12 |
|
6 | | -A toolkit to start **software templates** for research software and adopt best practices on sustainable software for Natural and Engineering Sciences. It provides a way to align best practices and reduce maintainance efforts across |
7 | | -organisations, while allowing organisation to customize software templates to their needs. |
8 | 13 |
|
9 | 14 | ## Why? |
10 | 15 |
|
11 | | -Because every organisation wants to produce high-quality research software by adopting common best practices, and we acknowledge that every organisation has practices and workflows that are only important to them. Therefore, we facilitate adopting common best practices for research software development through a highly customisable software template. |
| 16 | +Because research organisations can produce high-quality research software by adopting common best practices, and we acknowledge that every organisation has practices and workflows that are only important to them. Therefore, we facilitate the adopting of common best practices for research software development through a highly customisable tool that allows organisations to create their own software templates, while aligning with the best practices of the Natural and Engineering Sciences community in the Netherlands. |
12 | 17 |
|
13 | 18 | ## Features |
14 | 19 |
|
15 | 20 | - Federation of best practices for research software project. Align with the best practice for research software development of the Natural and Engineering Science community in the Netherlands. |
16 | | -- Reduce maintainabily. Enhancements to the meta-template can be incoorporated with ease in templating projects which reduces the time maintainers of templating projects have to spend in updating their templates. |
| 21 | +- Reduce maintainabily. Enhancements to the meta-template can be incoorporated with ease in templating projects which reduces the time *template creators* need to maintain and updater templating projects. |
17 | 22 | - Flexibility. Generate templating projects for any programming languates and customize them for every use case. |
18 | 23 | - A curated list of open source licenses for your templating projects. |
19 | 24 |
|
20 | 25 | ## Key Concepts |
21 | 26 |
|
22 | 27 | - **Meta Template:** a template to start a software templating project. This repository. It contains common features that are shared among software templating projects. |
23 | | -- **Software Template:** a template for research software projects generated using the *meta template*. It may contain custome features for a particular type of software project. For example, features specific to programming languages (Python, R, Julia, etc.) or features specific to relevant use cases (Jupyter notebooks, organization A, organization B). |
24 | | -- **Software Project:** the software schaffolding generated using a *software template*. It contains common features (from the *meta template*) and custom features (from its parent *software tempalte*). |
| 28 | +- **Software Template:** a template for research software projects generated using the *meta template*. It may contain common and custom features for a particular type of software project. For example, features specific to programming languages (Python, R, Julia, etc.) or features specific to relevant use cases (Jupyter notebooks, organization A, organization B). |
| 29 | +- **Software Project:** the software schaffolding generated using a *software template*. It contains files, directories and scaffolding code to start developing research software. |
| 30 | +- **Template Creator:** a person or team that creates a *software template* using the *meta-template*. Template creators are responsible for maintaining the software template and keeping it up to date with the latest best practices provided by the **meta-template**. |
| 31 | +- **Template User:** a person or team that uses a *software template* to start a new research software project. Template users decide when to update their research software projects with the latest best practices provided by a *software template*. |
25 | 32 |
|
26 | | -## How to Use it |
| 33 | +## How to Create a Software Template |
| 34 | +To create a *software template* using the *meta-template*, you need to follow these steps: |
27 | 35 |
|
28 | 36 | 1. Install [Copier](https://copier.readthedocs.io) into your development environment. |
29 | 37 |
|
30 | | -2. Start a new *software template*, rendered the latest version of this repository. This will generate boiler plate code that can be adopted for your particular uses case. |
| 38 | +2. Start a new *software template* by rendering the latest version of this repository. This will generate boiler plate code that can be adapted for your particular use case. |
31 | 39 |
|
32 | 40 | ```shell |
33 | | -copier copy https://github.com/SS-NES/meta-template.git <path/to/templating-project> |
| 41 | +copier copy gh:SS-NES/meta-template.git <path/to/templating-project> |
34 | 42 | ``` |
35 | 43 |
|
36 | | -3. Make your *software template* a Git repository. Copier uses Git to version software tempaltes, therefore, a directory containing a *software template* must be a Git repository. |
| 44 | +1. Make your *software template* a Git repository. Copier uses Git to track update, therefore, a directory containing a *software template* must be a Git repository. |
37 | 45 |
|
38 | 46 | ```shell |
39 | 47 | cd <path/to/project-directory> |
40 | 48 | git init |
41 | 49 | git add . |
42 | 50 | git commit -m 'initial commit' |
43 | 51 | ``` |
44 | | -4. Customize your template project. Consult the [Copier Documentation](https://copier.readthedocs.io/en/stable/creating/) and the [Jinja2 Documentation](https://jinja.palletsprojects.com/en/stable/templates/). |
45 | 52 |
|
46 | | -5. To test if your software template is producing the results you want, your can render it into a *software project*. Use the `--vsc-ref HEAD` option to rendere all the changes you have made. |
| 53 | +1. Customize your template project. Consult the [Copier Documentation](https://copier.readthedocs.io/en/stable/creating/) and the [Jinja2 Documentation](https://jinja.palletsprojects.com/en/stable/templates/). |
| 54 | + |
| 55 | +2. To test if your software template is producing the results you want, your can render it into a *software project*. Use the `--vsc-ref HEAD` option to rendere all the changes you have made. |
47 | 56 |
|
48 | 57 | ```shell |
49 | 58 | # from a local Git repository |
50 | 59 | copier copy --vcs-ref HEAD <path/to/your-software-template> <path/to/new-project/> |
51 | 60 |
|
52 | 61 | # from a remote Git repository |
53 | | -copier copy https://github.com/foo/<your-template>.git <path/to/new-project/> |
| 62 | +copier copy gh:foo/<your-template>.git <path/to/new-project/> |
54 | 63 | ``` |
55 | 64 |
|
56 | 65 | > [!NOTE] |
@@ -85,4 +94,8 @@ You can contribute to this initiative in two ways: |
85 | 94 |
|
86 | 95 | ## Acknowledgements |
87 | 96 |
|
88 | | -- This template was inspired by [Serious Scaffold Python](https://github.com/serious-scaffold/ss-python) |
| 97 | +This software was developed as part of the TDCC-NES Bottleneck Project "`Best |
| 98 | +Practices for Sustainable Software [SS-NES](https://tdcc.nl/projects/project-initiatives-nes/tdcc-nes-bottleneck-projects/best-practices-for-sustainable-software) funded by the Thematic Digital |
| 99 | +Competence Centre [TDCC](https://tdcc.nl/) for the Natural & Engineering Sciences [NES](https://tdcc.nl/about-tddc/nes). |
| 100 | + |
| 101 | +Some features in this software template were inspired by [Serious Scaffold Python](https://github.com/serious-scaffold/ss-python). |
0 commit comments