tyrannosaurus

Generate beautifully modern (2021+) Python projects with seamless, GitHub-based CI/CD, Docker and Conda support, and out-of-the-box integration with >30 best-practices tools and standards.

https://github.com/dmyersturnbull/tyrannosaurus

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: zenodo.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.7%) to scientific vocabulary

Keywords

conda-build-recipes cookiecutter-python poetry pyproject-toml template

Keywords from Contributors

mesh pypi interactive autopep8 codeformatter formatter gofmt pre-commit-hook yapf
Last synced: 6 months ago · JSON representation ·

Repository

Generate beautifully modern (2021+) Python projects with seamless, GitHub-based CI/CD, Docker and Conda support, and out-of-the-box integration with >30 best-practices tools and standards.

Basic Info
Statistics
  • Stars: 93
  • Watchers: 1
  • Forks: 7
  • Open Issues: 16
  • Releases: 7
Topics
conda-build-recipes cookiecutter-python poetry pyproject-toml template
Created almost 6 years ago · Last pushed over 2 years ago
Metadata Files
Readme Changelog Contributing License Citation Codeowners Security

README.md

Tyrannosaurus

Version status Version on PyPi Version on GitHub Version on Docker Hub Version on Conda-Forge\ Build (Actions) Documentation status Coverage (coveralls) Coverage (codecov)\ Maintainability (Code Climate) Scrutinizer Code Quality CodeFactor License DOI Created with Tyrannosaurus

An opinionated, forwards-looking Python template for 2021+.

Generate elegant, ready-to-use Python projects that have excellent continuous integration and deployment (CI/CD). Integrated with Docker Hub, the GitHub Container Registry, Azure, Conda-Forge, and an array of linting, static analysis, security testing, documentation, dependency management, and CI/CD tools, including an optional custom tool to keep all duplicate project metadata synchronized to pyproject.toml.

🎨 Design / generating a new project

This is a modern template built with Poetry, GitHub Actions, and no legacy files or tools. See below for a comparison to other tools. Also see Tyrannosaurus’s little sister science-notebook-template 🧪 for scientific publication repos.

Don’t make 55 commits trying to configure CI/CD workflows. After creating an empty GitHub repo called myproject:

```bash pip install tyrannosaurus tyrannosaurus new myproject --track

if on a GitHub organization, pass --user my-org-name

```

After initializing your project, Tyrannosaurus will list manual steps like adding API keys. Just delete files you don’t want. Or pass --extras to include extra files like azure-pipelines config and codemeta.json.

💡 Main behavior / features

Generated projects are integrated with various tools (from PyPi) and external CI/CD/code-quality systems. GitHub Actions are used by default, but config files for Travis and Azure Pipelines are also provided. You can swap out, modify, or disable anything as you see fit. See the docs 📚 for more information.

Here’s how your new project will behave when first set up:

  • Commit ⇒ Files are linted and verified for integrity
  • Make a pull request ⇒ Code is built and tested
  • Push to the main branch ⇒ Code is built and tested; code quality, coverage, and security badges are updated
  • Make a GitHub release ⇒ Artifacts are sent to GitHub, PyPi, Docker Hub, the GCR, and readthedocs
  • tox ⇒ Tests are run locally
  • tyrannosaurus sync ⇒ Project metadata is synced to pyproject.toml
  • tyrannosaurus update ⇒ New dependency versions from PyPi and/or Conda are listed
  • tyrannosaurus [--aggressive] clean ⇒ Remove temp files

🎁 Full features / integrations

- Packaging and dependency management with [Poetry](https://python-poetry.org/) - Python 3.6 thru 3.11 - Only modern files: _no_ manifest file, setup.py, requirements.txt, setup.cfg, or eggs - Continuous integration with [GitHub Actions](https://github.com/features/actions), [Travis](https://www.travis-ci.com/), or [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) - Docker and Vagrant configuration - Continuous deployment to [PyPi](http://pypi.org/) and [Docker Hub](https://hub.docker.com/). - Deployment to the [GitHub Container Registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry); plus to any other desired container registries with a simple modification. - Automatic attachment of [sdits](https://docs.python.org/3/distutils/sourcedist.html) and [wheels](https://pythonwheels.com/) to [GitHub Releases](https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases) - Good default GitHub settings, synchronized via [Probot settings](https://github.com/probot/settings) - Documentation sent to [readthedocs](https://readthedocs.org/) - Nice documentation defaults with [Sphinx extensions](https://www.sphinx-doc.org/en/master/usage/extensions/index.html) - Test automation with [Tox](https://tox.readthedocs.io) - Commit linting and changelog generation with [Commitizen](https://github.com/commitizen-tools/commitizen) - [Shields](https://github.com/badges/shields) with [Coveralls](https://coveralls.io/), [codecov](https://about.codecov.io/), [CodeClimate](https://codeclimate.com/), and [Scrutinizer](https://scrutinizer-ci.com/) that reflect the main branch - Code linting with [pre-commit](https://pre-commit.com/), [Black](https://pypi.org/project/black/), [Prettifier](https://prettier.io/), [Dockerfile-lint](https://github.com/Lucas-C/pre-commit-hooks-nodejs), and [markdown-lint-check](https://github.com/gaurav-nelson/github-action-markdown-link-check) - Security analysis with [Bandit](https://github.com/PyCQA/bandit), [CodeQL](https://github.com/github/codeql-action), and [safety](https://github.com/pyupio/safety) † - Static type analysis with [mypy](https://mypy.readthedocs.io) - [Conda-Forge](https://conda-forge.org/) [recipes](https://conda-forge.org/docs/maintainer/adding_pkgs.html#the-recipe-meta-yaml) and [environment YML](https://medium.com/@balance1150/how-to-build-a-conda-environment-through-a-yaml-file-db185acf5d22) with [Grayskull](https://github.com/conda-incubator/grayskull) and [Tyrannosaurus](https://tyrannosaurus.readthedocs.io/) - IDE hints via [EditorConfig](https://editorconfig.org/) with good defaults for most languages - Fancy [issue labels](https://github.com/crazy-max/ghaction-github-labeler) - Fancy GitHub-recognized readme, license, [contributing guide](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors), [issue templates](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/about-issue-and-pull-request-templates), and [pull request templates](https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/about-issue-and-pull-request-templates) - Nice gitignore, dockerignore, [ChangeLog](https://keepachangelog.com), and other misc files - [CodeMeta](https://codemeta.github.io/user-guide/) and [CITATION.cff](https://citation-file-format.github.io/) - Dependency updating with [Dependabot](https://dependabot.com/) - `tyrannosaurus clean` to clean temp files - `tyrannosaurus update` that lists dependency versions to bump - `tyrannosaurus sync` to synchronize project metadata to pyproject.toml ‡ † [Temporary issue in safety](https://github.com/pyupio/safety/issues/201) ‡ This feature is experimental and does not yet support all [intended sync targets](https://github.com/dmyersturnbull/tyrannosaurus/issues/12).

✏️ Syncing to pyproject.toml

_Note: This feature is only partly complete._ Tyrannosaurus has an optional `sync` command that synchronizes metadata from `pyproject.toml` to other files, so that **all of your metadata is in pyproject.toml**. There are 16 available target files, including `docs/conf.py`, `tox.ini`, `.pre-commit-config.yaml`, `readthedocs.yml`, `.travis.yml`, and `__init__.py`. Settings like dev dependencies, project version, license headers, and preferred line length can be listed exactly once, in pyproject.toml. Tyrannosaurus itself can be included as a dependency (but is not by default). Running `tyrannosaurus build` will run poetry lock, synchronize project metadata (via `sync`), build, run tests, install, and clean up. Target files can be disabled in `[tool.tyrannosaurus.targets]`.

🔨 Building your project locally

You can test your project locally. Install [Poetry](https://github.com/python-poetry/poetry) and [Tox](https://tox.readthedocs.io/en/latest/) (`pip install tox`). Then just type `tox` to build artifacts and run tests. You can install locally with `poetry install .` or just `pip install .`. To create an initial Anaconda recipe or environment file, run `tyrannosaurus recipe` or `tyrannosaurus env`. After that, you can use `sync` to keep them up-to-date with pyproject.toml.

🎯 Similar templates and tools

There are various other templates based on cookiecutter and copier. See which best suits your needs and style.

I designed Tyrannosaurus to solve issues with existing tools. Here are features that other tools lack:

  • An elegant CI/CD workflow: The workflow gets kicked off only via git push and GitHub releases.
  • Interoperability with Conda, including recipes and environment files, by mapping dependencies and metadata.
  • Automated publishing to PyPi, Conda-Forge, Docker Hub, the GitHub Container Registry, and readthedocs.
  • No duplication between project files. (Not 100%: some duplication remains.)
  • Built-in optional support for extra/alternative tools, such as Travis and codemeta.
  • Complete absence of legacy tools, files, and Python 2 support.

🏁 Feature table

| Tool | Main techs | CD kickoff | N int.† | modern‡ | Docker | Conda | sync | any-OS | | ---------------------------------------------------------------------------------------- | -------------------------- | -------------- | ------- | ------- | ------ | ----- | ---- | ------ | | Tyranosaurus | Actions, Poetry, Tox | git, GitHub | 30 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | | hypermodern-python | Actions, Poetry, Nox | git, Poetry | 20 | ✔️ | | | | ✔️ | | copier-poetry | Actions, Poetry, Make | git, manual | 15 | | ✔️ | | ✔️ | | | python-package-template | Actions, Poetry, Tox, Make | git, Make | 20 | ✔️ | ✔️ | | | | | pyscaffold | setuptools, Tox | Gitlab, manual | 10 | | | | | ✔️ | | wemake-python-package | Actions, Poetry, Make | git, Poetry | 10 | ✔️ | | | | | | best-practices | Actions, pipenv | git, pipenv | 10 | | ✔️ | | | ✔️ | | python-blueprint | Actions, setuptools, Tox | git, manual | 5 | | ✔️ | | | ✔️ | | cookiecutter-pypackage | Travis, setuptools, Tox | git, manual | 10 | | | | | | | cookiecutter-pylibrary | Travis, setuptools, Tox | git, manual | 20 | | | | | ✔ | | cookiecutter-django | Actions, setuptools, Tox | git, manual | 15 | | ✔️ | | | ✔️ | | django-init | Actions, setuptools, Make | git, manual | 15 | | ✔️ | | | ✔️ | | docker-science | Make, Docker, setuptools | no CI/CD | 15 | | ✔️ | | | | | science-notebook-template | Conda | no CI/CD | 5 | | ✔️ | | | ✔️ |

Notes:

**† _N int._**: Approximate number of built-in integrations with tools and standards. What counts is very roughly defined. **‡ _Modern_**: Lacks legacy files and tools. I’m including Make, setuptools, pipenv, and some others. **Note:** [copier](https://github.com/copier-org/copier) syncs with a remote template. It’s a neat idea that Tyrannosaurus lacks. Some of the packages in the table above need more explanation: - [hypermodern-python](https://github.com/cjolowicz/hypermodern-python) ([template](https://github.com/cjolowicz/cookiecutter-hypermodern-python)), a Poetry-powered Python template. It’s good, but it made a few unusual choices, such as [Nox](https://github.com/theacodes/nox), which has <500 GitHub stars. - Both [cookiecutter-django](https://github.com/pydanny/cookiecutter-django) and [django-init](https://github.com/Fueled/django-init) have fantastic setups for Django projects. - [Cookiecutter-docker-science](https://github.com/docker-science/cookiecutter-docker-science) is an interesting project that doesn’t quite fit in this list.

✨ Projects made with Tyrannosaurus

These are some example projects that were generated with Tyrannosaurus: - [Tyrannosaurus](https://github.com/dmyersturnbull/tyrannosaurus) - [Mandos](https://github.com/dmyersturnbull/mandos) - [typed-dfs](https://github.com/dmyersturnbull/typed-dfs) - [Valarpy](https://github.com/dmyersturnbull/valarpy) - [Sauronlab](https://github.com/dmyersturnbull/sauronlab) - [SauronX](https://github.com/dmyersturnbull/sauronx) - [suretime](https://github.com/dmyersturnbull/suretime) - [service-it](https://github.com/dmyersturnbull/service-it) - [chemserve](https://github.com/dmyersturnbull/chemserve) - [pocketutils](https://github.com/dmyersturnbull/pocketutils) - [auth_capture_proxy](https://github.com/alandtse/auth_capture_proxy)

🍁 Contributing

New issues and pull requests are welcome. Please refer to the contributing guide and security policy. Generated with tyrannosaurus: tyrannosaurus new tyrannosaurus

text .++++++++++++. .++HHHHHHH^^HHH+. .HHHHHHHHHH++-+-++. .HHHHHHHHHHH:t~~~~~ .+HHHHHHHHHHjjjjjjjj. .+NNNNNNNNN/++/:--.. ........+NNNNNNNNNN. .++++BBBBBBBBBBBBBBB. .tttttttt:.. .++BBBBBBBBBBBBBBBBBBB. +tt+. `` .+BBBBBBBBBBBBBBBBBBBBB+++cccc. ttt. .-++BBBBBBBBBBBBBBBBBBBBBB++.ccc. +ttt++++:::::++++++BBBBBBBBBBBBBBBBBBBBBBB+..++. .+TTTTTTTTTTTTTBBBBBBBBBBBBBBBBBBBBBBBBB+. .ccc. .++TTTTTTTTTTBBBBBBBBBBBBBBBBBBBBBBBB+. .cc. ..:++++++++++++++++++BBBBBB++++BBBB. ....... -LLLLL+. -LLLLL. -LLLL+. -LLLL+. +LLL+ +LLL+ +LL+ +ff+ +ff++ +++: ++++:

Owner

  • Name: Douglas Myers-Turnbull
  • Login: dmyersturnbull
  • Kind: user
  • Location: Stanford, CA
  • Company: Stanford University

Citation (CITATION.cff)

abstract: "Generate beautifully modern Python projects with seamless, GitHub-based CI/CD and loads of integrations."
authors:
  - family-names: Myers-Turnbull
    given-names: Douglas
    orcid: 0000-0003-3610-4808
cff-version: 1.2.0
date-released: 2020-05-10 20:06:00.00:00Z
keywords:
  - cookiecutter
  - conda-build
  - pyproject-toml
  - python-poetry
  - python-template
message: Software reference
title: Tyrannosaurus
version: 0.11.0

GitHub Events

Total
  • Watch event: 1
Last Year
  • Watch event: 1

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 248
  • Total Committers: 6
  • Avg Commits per committer: 41.333
  • Development Distribution Score (DDS): 0.028
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Douglas Myers-Turnbull d****l@g****m 241
dependabot[bot] 4****] 2
Alan Tse a****e 2
Spectre5 3****5 1
Kenyon Ralph k****n@k****m 1
Daniël van Noord 1****d 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 8
  • Total pull requests: 119
  • Average time to close issues: 10 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 4
  • Total pull request authors: 3
  • Average comments per issue: 0.63
  • Average comments per pull request: 0.86
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 117
Past Year
  • Issues: 1
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 0
  • Average comments per issue: 1.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • dmyersturnbull (5)
  • vladistan (1)
  • Spectre5 (1)
  • JonBoyleCoding (1)
Pull Request Authors
  • dependabot[bot] (114)
  • Spectre5 (1)
  • DanielNoord (1)
Top Labels
Issue Labels
kind: bug (6) priority: wontfix (2) kind: new feature (2) status: in progress 🡆 (1) status: fixed ✓ (1) kind: documentation (1) priority: minor (1) difficulty: hard (1)
Pull Request Labels
kind: infrastructure (114)

Packages

  • Total packages: 3
  • Total downloads:
    • pypi 44 last-month
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 1
    (may contain duplicates)
  • Total versions: 78
  • Total maintainers: 1
proxy.golang.org: github.com/dmyersturnbull/tyrannosaurus
  • Versions: 32
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Stargazers count: 5.3%
Dependent packages count: 5.4%
Dependent repos count: 5.7%
Average: 6.0%
Forks count: 7.4%
Last synced: 6 months ago
pypi.org: tyrannosaurus

Generate beautifully modern Python projects with seamless, GitHub-based CI/CD and loads of integrations.

  • Versions: 36
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 44 Last month
Rankings
Stargazers count: 7.4%
Dependent packages count: 10.1%
Forks count: 13.3%
Average: 14.4%
Downloads: 19.4%
Dependent repos count: 21.6%
Maintainers (1)
Last synced: 6 months ago
conda-forge.org: tyrannosaurus

An opinionated, forwards-looking Python template for 2021. Generate elegant, ready-to-use Python projects that have excellent continuous integration and deployment (CI/CD). Integrated with Docker Hub, Github Packages, Azure, Conda-Forge, and an array of linting, static analysis, security testing, documentation, dependency management, and CI/CD tools, including a custom tool to keep all duplicate project metadata synchronized to a single pyproject.toml. You only need to interact with your project via git, tyrannosaurus, and Github releases – all other integrations kick off from there.

  • Versions: 10
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Stargazers count: 31.8%
Dependent repos count: 34.0%
Average: 40.4%
Forks count: 44.7%
Dependent packages count: 51.2%
Last synced: 6 months ago

Dependencies

.github/workflows/check.yml actions
  • actions/checkout v3 composite
  • github/codeql-action/analyze v2 composite
  • github/codeql-action/autobuild v2 composite
  • github/codeql-action/init v2 composite
.github/workflows/labels.yml actions
  • actions/checkout v3 composite
  • lannonbr/issue-label-manager-action 3.0.1 composite
.github/workflows/publish.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • docker/build-push-action v3 composite
  • docker/login-action v2 composite
  • docker/metadata-action v4 composite
  • skx/github-action-publish-binaries master composite
.github/workflows/pull-test.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/push-main.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
Dockerfile docker
  • python 3.10 build
docs/requirements.txt pypi
  • sphinx >=4.3,<5.0
  • sphinx-autoapi >=1.8,<2.0
  • sphinx-copybutton >=0.4,<1.0
  • sphinx-rtd-theme >=1.0,<2.0
  • tomlkit >=0.7,<1.0
poetry.lock pypi
  • 114 dependencies
pyproject.toml pypi
  • grayskull ^1.8
  • httpx >=0.23, <1
  • python ^3.9
  • tomlkit >=0.11, <1
  • typer ^0.6
tests/resources/fake/pyproject.toml pypi
  • pytest =7.1.1 develop
  • python >=3.8, <4
  • requests ^2.23
  • tomlkit ^0.10
  • typer ^0.5
environment.yml pypi