Skip to content

Commit

Permalink
Localize template
Browse files Browse the repository at this point in the history
  • Loading branch information
liamhuber committed May 22, 2024
1 parent f67ac8f commit 569efdf
Show file tree
Hide file tree
Showing 15 changed files with 723 additions and 165 deletions.
8 changes: 4 additions & 4 deletions .binder/postBuild
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
# pip install main
pip install --no-deps .
# Note: This produces build and pyiron_module_template.egg-info directories
# Note: This produces build and pyiron_snippets.egg-info directories

# clean up
if [ -d "notebooks" ]; then
mv notebooks/* .
fi
if [ -d "${HOME}/pyiron_module_template" ]; then
if [ -d "${HOME}/pyiron_snippets" ]; then
rm -r ${HOME}/.binder \
${HOME}/.ci_support \
${HOME}/.github \
${HOME}/build \
${HOME}/docs \
${HOME}/notebooks \
${HOME}/pyiron_module_template \
${HOME}/pyiron_module_template.egg-info \
${HOME}/pyiron_snippets \
${HOME}/pyiron_snippets.egg-info \
${HOME}/tests \
${HOME}/.gitattributes \
${HOME}/.gitignore \
Expand Down
4 changes: 2 additions & 2 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# .coveragerc to control coverage.py
[run]
source = pyiron_module_template
omit = pyiron_module_template/_version.py
source = pyiron_snippets
omit = pyiron_snippets/_version.py
concurrency = multiprocessing
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1 @@
pyiron_module_template/_version.py export-subst
pyiron_snippets/_version.py export-subst
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Bug report
about: Create a bug report to help us eliminate issues and improve pyiron_module_template
about: Create a bug report to help us eliminate issues and improve pyiron_snippets
title: ''
labels: bug
assignees: ''
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Feature request
about: Make a suggestion for a new feature or a change to pyiron_module_template
about: Make a suggestion for a new feature or a change to pyiron_snippets
title: ''
labels: enhancement
assignees: ''
Expand All @@ -13,7 +13,7 @@ assignees: ''

**Detailed Description**

<!--Please explain how you would like to see pyiron_module_template enhanced, what feature(s) you are looking for, what specific problems this will solve.-->
<!--Please explain how you would like to see pyiron_snippets enhanced, what feature(s) you are looking for, what specific problems this will solve.-->

**Further Information, Files, and Links**

Expand Down
107 changes: 3 additions & 104 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,106 +1,5 @@
# pyiron_module_template
# pyiron_snippets

## Overview
This is a collection of independent python snippets used in the pyiron project, but hopefully useful elsewhere too.

This repository is a template for new pyiron modules similar to the existing modules of the
pyiron framework, e.g.
[pyiron_workflow](https://github.com/pyiron/pyiron_workflow),
[pyiron_ontology](https://github.com/pyiron/pyiron_ontology),
etc.

Within this repository, the new module is called `pyiron_module_template` which should be renamed to `pyiron_IntendedModuleName`.
This can be easily achieved by modifying and running the update_module_name.sh script.

The licence is free to choose, but as a default the BSD3 licence packed here.

## Continuous Integration

We collect all files relevant for the continuous integration (CI) pipelines in `.ci_support`,
while the actual CI workflows are handled by GitHub and stored in `.github`.
If you are cloning this template *inside* the pyiron GitHub organization, the full CI should work out-of-the-box by calling reusable workflows from [pyiron/actions](github.com/pyiron/actions) and inheriting organization-wide secrets.
Otherwise, you will either need to modify the CI workflow files, or give your repository the following secrets:
- `DEPENDABOT_WORKFLOW_TOKEN` (GitHub token for an account that has permissions to your repository -- needs to differ from the default `github_token` already available though! In pyiron we have a special [@pyiron_runner account](https://github.com/pyiron-runner) for this purpose.)
- `PYPI_PASSWORD` (Token generated on PyPi to give access to your account there)
- `CODACY_PROJECT_TOKEN` (Token generated on Codacy to give access to your account there)

The default CI setup from [pyiron/actions](github.com/pyiron/actions) makes some assumptions about your directory structure.
The most important one is that your environment should be specified in `.ci_support/environment.yml`.
There is a base environment there already, giving dependence on `pyiron_base`.
The CI will automatically keep environment files read by readthedocs (which will look at `.readthedocs.yml`) and MyBinder (which looks in `.binder`) up-to-date based on this environment file.

In case you need extra environment files for some setups, you can modify the workflows in `.github/workflows`, which accept input variables for the docs, tests, and notebooks environments.
For example, it's typically good to not make your project depend on the `lammps` package, since this is not available for windows.
However, you might want to give some demo notebooks that run on MyBinder (a linux environment) and use LAMMPS calculations.
In this case, you could add a new file `.ci_support/environment-notebooks.yml`, and then edit `.github/workflows/push-pull.yml` so that instead of reading

```yaml
jobs:
pyiron:
uses: pyiron/actions/.github/workflows/[email protected]
secrets: inherit
# All the environment files variables point to .ci_support/environment.yml by default
```

It instead reads

```yaml
jobs:
pyiron:
uses: pyiron/actions/.github/workflows/[email protected]
secrets: inherit
with:
notebooks-env-files: .ci_support/environment.yml .ci_support/environment-notebooks.yml
```
Where `.ci_support/environment-notebooks.yml` looks like:

```yaml
channels:
- conda-forge
dependencies:
- lammps
```

### Label-based CI

Some CI triggers when labels get applied to a PR.
In a new repository, you will need to define these labels:
- `format_black`: Runs black analyis and creates a bot-generated commit to fix any format violations
- `run_CodeQL`: Runs the external CodeQL analysis (expensive, only do at the end)
- `run_coverage`: Run all the tests in `tests` and use coveralls to generate a coverage report (also expensive, only run near the end of your PR)

## Documentation

You should modify this README to reflect the purpose of your new package.
You can look at the other pyiron modules to get a hint for what sort of information to include, and how to link badges at the head of your README file.

At a minimum, we suggest creating a meaningful example notebook in the `notebooks/` directory and creating a MyBinder badge so that people can quickly and easily explore your work.

You can also edit the docs for your package by modifying `docs/index.rst`.
By default, this README is used as the landing page, and a simple API section is automatically generated.

## Tests

There is space for "benchmark", "integration", and "unit" tests in the `tests/` directory, with dummy tests for each.
These are run by the default CI, so modify them to suit your needs.

Additionally, the standard CI will attempt to execute all notebooks in the `notebooks/` directory.
See [`pyiron/actions`](https://github.com/pyiron/actions) and the reusable workflows there to learn about modifying the environment for the CI, e.g. to use a different env for notebook runs than for the tests in `tests/`.

Finally, `tests/integration/test_readme.py` shows how example code in the documentation gets tested against its claimed output.
E.g. if you change this:

```python
>>> print(2 + 2)
4
```

To read `5` instead, those tests should fail.

## Publishing your package

If you are inside the pyiron organization or have your own `PYPI_PASSWORD` secret configured, your package will be published on PyPI automatically when you make a new "release" on GitHub -- *as long as* that tag matches the pattern specified in `setup.cfg`; by default any tag that `pyiron_module_template-`, where `pyiron_module_template` is replaced with the name of your module. We recommend using semantic versioning so that your first release looks like `pyiron_module_template-0.0.1`.

Releasing your package on Conda-Forge is slightly more involved, but not too hard (at least for pure python packages).
See [conda-forge/staged-recipes](https://github.com/conda-forge/staged-recipes) for how to publish it there.
To qualify for inclusion, a snippet must not have any dependencies outside the python standard library, and should fit reasonably inside a single file.
16 changes: 8 additions & 8 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
master_doc = 'index'

# General information about the project.
project = u'pyiron_module_template'
project = u'pyiron_snippets'
copyright = u'2021, Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department ' \
u'All rights reserved'

Expand Down Expand Up @@ -244,7 +244,7 @@
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
('index', 'pyiron_module_template.tex', u'pyiron_module_template Documentation',
('index', 'pyiron_snippets.tex', u'pyiron_snippets Documentation',
u'Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department', 'manual'),
]

Expand Down Expand Up @@ -275,8 +275,8 @@
# (source start file, name, description, authors, manual section).
man_pages = [
('index',
'pyiron_module_template',
u'pyiron_module_template Documentation',
'pyiron_snippets',
u'pyiron_snippets Documentation',
[u'Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department'], 1)
]

Expand All @@ -291,10 +291,10 @@
# dir menu entry, description, category)
texinfo_documents = [
('index',
'pyiron_module_template',
u'pyiron_module_template Documentation',
'pyiron_snippets',
u'pyiron_snippets Documentation',
u'Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department',
'pyiron_module_template',
'pyiron_snippets',
'One line description of project.',
'Miscellaneous'),
]
Expand All @@ -311,7 +311,7 @@
# If true, do not generate a @detailmenu in the "Top" node's menu.
# texinfo_no_detailmenu = False

main(['-e', '-o', 'apidoc', '../pyiron_module_template', '--force'])
main(['-e', '-o', 'apidoc', '../pyiron_snippets', '--force'])

curdir = os.path.dirname(os.path.abspath(__file__))
if os.path.exists(os.path.join(curdir, 'source/notebooks')):
Expand Down
2 changes: 1 addition & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.. pyiron_module_template documentation master file
.. pyiron_snippets documentation master file
.. _index:

Expand Down
4 changes: 2 additions & 2 deletions notebooks/example.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
"metadata": {},
"outputs": [],
"source": [
"import pyiron_module_template\n",
"print(pyiron_module_template.__version__)"
"import pyiron_snippets\n",
"print(pyiron_snippets.__version__)"
]
}
],
Expand Down
Empty file removed pyiron_module_template/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions pyiron_snippets/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

from . import _version
__version__ = _version.get_versions()['version']
Loading

0 comments on commit 569efdf

Please sign in to comment.