{"id":46996079,"url":"https://github.com/pyiron/pyiron_module_template","last_synced_at":"2026-03-11T15:17:22.176Z","repository":{"id":42037779,"uuid":"384399174","full_name":"pyiron/pyiron_module_template","owner":"pyiron","description":"A template to generate a new pyiron module.","archived":false,"fork":false,"pushed_at":"2026-03-02T19:04:24.000Z","size":347,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-03-02T22:51:41.321Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pyiron.png","metadata":{"files":{"readme":"docs/README.md","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-07-09T10:14:27.000Z","updated_at":"2026-02-13T06:54:44.000Z","dependencies_parsed_at":"2023-01-30T05:01:12.240Z","dependency_job_id":"bd73fdc3-72ca-48f6-bab7-d4ddb4d325e9","html_url":"https://github.com/pyiron/pyiron_module_template","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/pyiron/pyiron_module_template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyiron%2Fpyiron_module_template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyiron%2Fpyiron_module_template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyiron%2Fpyiron_module_template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyiron%2Fpyiron_module_template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyiron","download_url":"https://codeload.github.com/pyiron/pyiron_module_template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyiron%2Fpyiron_module_template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30385495,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T14:10:17.325Z","status":"ssl_error","status_checked_at":"2026-03-11T14:09:37.934Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":"2026-03-11T15:17:21.445Z","updated_at":"2026-03-11T15:17:22.170Z","avatar_url":"https://github.com/pyiron.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pyiron_module_template\n\n## Overview\n\nThis repository is a template for new pyiron modules similar to the existing modules of the \npyiron framework, e.g. \n[pyiron_workflow](https://github.com/pyiron/pyiron_workflow),\n[pyiron_ontology](https://github.com/pyiron/pyiron_ontology),\netc.\n\nWithin this repository, the new module is called `pyiron_module_template` which should be renamed to `pyiron_IntendedModuleName`. \nThis can be easily achieved by modifying and running `bash ./update_module_name.sh` script.\n\nThe licence is free to choose, but as a default the BSD3 licence packed here.\n\n## Continuous Integration\n\nWe collect all files relevant for the continuous integration (CI) pipelines in `.ci_support`, \nwhile the actual CI workflows are handled by GitHub and stored in `.github`.\nIf 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.\nOtherwise, you will either need to modify the CI workflow files, or give your repository the following secrets:\n- `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.)\n- `PYPI_PASSWORD` (Token generated on PyPi to give access to your account there)\n- `CODACY_PROJECT_TOKEN` (Token generated on Codacy to give access to your account there)\n\nMake sure to go to [Codacy](https://www.codacy.com) and [Coverall](https://coveralls.io) to register your repository.\n\nThe default CI setup from [pyiron/actions](github.com/pyiron/actions) makes some assumptions about your directory structure.\nThe most important one is that your environment should be specified in `.ci_support/environment.yml`.\nThere is a base environment there already, giving dependence on `numpy`.\nThe 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.\nAdditionally, there is a specification of lower bounds in `.ci_support/lower-bounds.yml` which is used in the main push-pull workflow to run tests on older dependencies and to manage lower bounds for the jobs building packages for release.\n\nIn 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.\nFor example, it's typically good to not make your project depend on the `lammps` package, since this is not available for windows.\nHowever, you might want to give some demo notebooks that run on MyBinder (a linux environment) and use LAMMPS calculations.\nIn 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 \n\n```yaml\njobs:\n  pyiron:\n    uses: pyiron/actions/.github/workflows/push-pull.yml@actions-3.3.3\n    secrets: inherit\n    # All the environment files variables point to .ci_support/environment.yml by default\n```\n\nIt instead reads\n\n```yaml\njobs:\n  pyiron:\n    uses: pyiron/actions/.github/workflows/push-pull.yml@actions-3.3.3\n    secrets: inherit\n    with:\n      notebooks-env-files: .ci_support/environment.yml .ci_support/environment-notebooks.yml\n```\n\nWhere `.ci_support/environment-notebooks.yml` looks like:\n\n```yaml\nchannels:\n  - conda-forge\ndependencies:\n  - lammps\n```\n\n### Dependencies\n\nThe CI for making new releases expects all the `pyproject.toml` dependencies to be fully specified with `==` and the conda dependencies to have their versions specified by `=`, i.e. precisely specifying the version the code here is intended to run on.\nAt release time, these dependencies can be relaxed so that new users installing your code may have access to a wider variety of environment possibilities.\nFor exact details on this relaxation, check documentation in the [centralized CI](https://github.com/pyiron/actions).\n\n### Label-based CI\n\nSome CI triggers when labels get applied to a PR. \nIn a new repository, you will need to define these labels:\n- `format_black`: Runs black analyis and creates a bot-generated commit to fix any format violations\n- `run_CodeQL`: Runs the external CodeQL analysis (expensive, only do at the end)\n- `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)\n\n## Documentation\n\nYou should modify this README to reflect the purpose of your new package.\nYou 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.\n\nAt 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.\n\nYou can also edit the docs for your package by modifying `docs/index.rst`.\nBy default, this README is used as the landing page, and a simple API section is automatically generated.\n\n## Tests\n\nThere is space for \"benchmark\", \"integration\", and \"unit\" tests in the `tests/` directory, with dummy tests for each.\nThese are run by the default CI, so modify them to suit your needs.\n\nAdditionally, the standard CI will attempt to execute all notebooks in the `notebooks/` directory.\nSee [`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/`.\n\nFinally, `tests/integration/test_readme.py` shows how example code in the documentation gets tested against its claimed output.\nE.g. if you change this:\n\n```python\n\u003e\u003e\u003e print(2 + 2)\n4\n\n```\n\nTo read `5` instead, those tests should fail.\n\n## Publishing your package\n\nIf 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`.\n\nReleasing your package on Conda-Forge is slightly more involved, but not too hard (at least for pure python packages).\nSee [conda-forge/staged-recipes](https://github.com/conda-forge/staged-recipes) for how to publish it there.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyiron%2Fpyiron_module_template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyiron%2Fpyiron_module_template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyiron%2Fpyiron_module_template/lists"}