| @@ -38,10 +38,8 @@ body: | |||
| What version of Kosmorrolib are you using? | |||
| options: | |||
| - "0.11.2" | |||
| - "0.11.1" | |||
| - "0.11.0" | |||
| - "0.10.0" | |||
| - "1.0" | |||
| - "0.11" | |||
| - main branch | |||
| - features branch | |||
| @@ -86,8 +84,33 @@ body: | |||
| attributes: | |||
| label: Bug description | |||
| description: | | |||
| Describe the bug you have encountered: | |||
| Describe in some words the bug you have encountered. | |||
| - what did you try to do? | |||
| - what did you expect the program to do? | |||
| - what happened instead? | |||
| - type: textarea | |||
| id: reproducer | |||
| validations: | |||
| required: true | |||
| attributes: | |||
| label: Reproducer | |||
| description: | | |||
| Write here a small piece of code that reveals the bug. | |||
| It should be as concise as possible: no user interaction, no formating, no call to the `kosmorro` command. Just Python. | |||
| Don't forget to specify a date and position of calculation if they are necessary. | |||
| - type: textarea | |||
| id: expected | |||
| validations: | |||
| required: true | |||
| attributes: | |||
| label: Expected result | |||
| description: | | |||
| What did you expect your piece of code to do? | |||
| - type: textarea | |||
| id: actual | |||
| validations: | |||
| required: true | |||
| attributes: | |||
| label: Actual result | |||
| description: | | |||
| What did your piece of code actually do? | |||
| @@ -1,66 +1,30 @@ | |||
| name: Release Application | |||
| on: | |||
| push: | |||
| tags: ['v*'] | |||
| - release | |||
| jobs: | |||
| release: | |||
| name: Create release | |||
| runs-on: ubuntu-latest | |||
| steps: | |||
| - name: Checkout code | |||
| uses: actions/checkout@v2 | |||
| - name: Setup | |||
| run: | | |||
| sudo apt update | |||
| sudo apt install ruby | |||
| sudo gem install ronn | |||
| - name: Prepare release | |||
| id: prepare_release | |||
| run: | | |||
| changelog="$(git diff $(git describe --abbrev=0 --tags $(git describe --abbrev=0 --tags)^) -- CHANGELOG.md | grep -E '\+[#*]' | sed 's/^+/\n/')" | |||
| echo "::set-output name=changelog::$changelog" | |||
| - name: Create release | |||
| id: create_release | |||
| uses: actions/create-release@v1 | |||
| env: | |||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |||
| with: | |||
| tag_name: ${{ github.ref }} | |||
| release_name: Version ${{ github.ref }} | |||
| draft: true | |||
| prerelease: false | |||
| body: | | |||
| ${{ steps.prepare_release.outputs.changelog }} | |||
| pip: | |||
| name: Release to PyPI | |||
| pipy: | |||
| name: Build and release to PyPI | |||
| runs-on: ubuntu-latest | |||
| steps: | |||
| - uses: actions/checkout@v1 | |||
| - name: Set up Python | |||
| uses: actions/setup-python@v1 | |||
| with: | |||
| python-version: '3.7' | |||
| python-version: '3.x' | |||
| - name: Setup environment | |||
| run: | | |||
| sudo apt update | |||
| python -m pip install --upgrade pip poetry | |||
| sudo apt install ruby | |||
| sudo gem install ronn | |||
| - name: Install dependencies | |||
| - name: Build package | |||
| run: | | |||
| python -m pip install --upgrade pip pipenv twine wheel | |||
| pipenv lock --pre | |||
| pipenv sync | |||
| pipenv run pip freeze > requirements.txt | |||
| pip install -r requirements.txt | |||
| - name: Build and publish | |||
| poetry install | |||
| poetry build | |||
| - name: Publish package | |||
| env: | |||
| TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} | |||
| TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} | |||
| POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_PASSWORD }} | |||
| run: | | |||
| make build | |||
| twine upload dist/* | |||
| poetry publish | |||
| @@ -5,6 +5,7 @@ on: | |||
| branches: [main, features] | |||
| pull_request: | |||
| branches: [main, features] | |||
| workflow_dispatch: | |||
| jobs: | |||
| doc-tests: | |||
| @@ -13,11 +14,9 @@ jobs: | |||
| fail-fast: false | |||
| matrix: | |||
| os: | |||
| - ubuntu-18.04 | |||
| - ubuntu-20.04 | |||
| - macos-10.15 | |||
| - ubuntu-latest | |||
| - macos-11.0 | |||
| - windows-2019 | |||
| - windows-latest | |||
| python_version: | |||
| - '3.7' | |||
| - '3.8' | |||
| @@ -33,37 +32,23 @@ jobs: | |||
| python-version: ${{ matrix.python_version }} | |||
| architecture: x64 | |||
| - name: Prepare environment (non-Windows systems) | |||
| if: ${{ matrix.os != 'windows-2019' }} | |||
| - name: Prepare environment | |||
| run: | | |||
| pip install --upgrade pip pipenv | |||
| python3 -m pip install --upgrade pip poetry | |||
| - name: Prepare environment (Windows) | |||
| if: ${{ matrix.os == 'windows-2019' }} | |||
| run: | | |||
| python -mpip install --upgrade pip pipenv | |||
| - name: Install dependencies (all systems) | |||
| - name: Install dependencies | |||
| env: | |||
| PIP_PREFER_BINARY: 1 | |||
| run: | | |||
| pipenv lock --pre | |||
| pipenv sync --dev | |||
| pipenv install --dev | |||
| - name: Install dependencies (Windows) | |||
| if: ${{ matrix.os == 'windows-2019' }} | |||
| run: | | |||
| pipenv lock -r > requirements.txt | |||
| python -mpip install -r requirements.txt | |||
| python3 -m poetry install | |||
| - name: Run doc tests (with coverage) | |||
| if: ${{ matrix.os == 'ubuntu-20.04' && matrix.python_version == '3.10' }} | |||
| if: ${{ matrix.os == 'ubuntu-latest' && matrix.python_version == '3.10' }} | |||
| run: | | |||
| make coverage-doctests | |||
| - name: Run doc tests (without coverage) | |||
| if: ${{ matrix.os != 'ubuntu-20.04' || matrix.python_version != '3.10' }} | |||
| if: ${{ matrix.os != 'ubuntu-latest' || matrix.python_version != '3.10' }} | |||
| run: | | |||
| make doctests | |||
| @@ -71,6 +56,6 @@ jobs: | |||
| env: | |||
| COVERALLS_PRO_TOKEN: ${{ secrets.COVERALLS_TOKEN }} | |||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |||
| if: ${{ matrix.os == 'ubuntu-20.04' && matrix.python_version == '3.10' }} | |||
| if: ${{ matrix.os == 'ubuntu-latest' && matrix.python_version == '3.10' }} | |||
| run: | | |||
| pipenv run coveralls --service=github | |||
| python3 -m poetry run coveralls --service=github | |||
| @@ -7,3 +7,4 @@ Pipfile.lock | |||
| # Gitpod-specific: | |||
| /.vscode/** | |||
| poetry.lock | |||
| @@ -8,5 +8,5 @@ vscode: | |||
| - editorconfig.editorconfig | |||
| tasks: | |||
| - before: pip install -U pip pipenv | |||
| init: pipenv lock --pre && pipenv sync --dev --pre | |||
| - before: pip install -U pip poetry | |||
| init: poetry install | |||
| @@ -1,42 +1,19 @@ | |||
| black: | |||
| pipenv run black kosmorrolib setup.py | |||
| poetry run black kosmorrolib setup.py | |||
| .PHONY: tests | |||
| tests: doctests | |||
| coverage-doctests: | |||
| pipenv run python3 -m coverage run tests.py | |||
| python3 -m poetry run coverage run tests.py | |||
| coverage-report: | |||
| pipenv run python3 -m coverage report | |||
| python3 -m poetry run coverage report | |||
| doctests: | |||
| pipenv run python3 tests.py | |||
| .PHONY: build | |||
| build: | |||
| python3 setup.py sdist bdist_wheel | |||
| env: | |||
| @if [[ "$$RELEASE_NUMBER" == "" ]]; \ | |||
| then echo "Missing environment variable: RELEASE_NUMBER."; \ | |||
| echo 'Example: export RELEASE_NUMBER="1.0.0" (without the leading "v")'; \ | |||
| exit 1; \ | |||
| fi | |||
| python3 -m poetry run python tests.py | |||
| changelog: | |||
| conventional-changelog -p angular -i CHANGELOG.md -s | |||
| @echo -e "\e[32m✔\e[33m Changelog generated. Don't forget to update the version number before committing.\e[0m" | |||
| @echo -e " When everything is good, finish the release with 'make tag'." | |||
| tag: env | |||
| git add CHANGELOG.md kosmorrolib/__version__.py | |||
| git commit -m "build: bump version $$RELEASE_NUMBER" | |||
| git tag "v$$RELEASE_NUMBER" | |||
| git checkout features | |||
| git merge main | |||
| git checkout main | |||
| @echo | |||
| @echo -e "\e[1mVersion \e[36m$$RELEASE_NUMBER\e[39m successfully tagged!" | |||
| @echo -e "Invoke \e[33mgit push origin master features v$$RELEASE_NUMBER\e[39m to finish." | |||
| @@ -1,19 +0,0 @@ | |||
| [[source]] | |||
| name = "pypi" | |||
| url = "https://pypi.org/simple" | |||
| verify_ssl = true | |||
| [dev-packages] | |||
| coveralls = "*" | |||
| parameterized = "*" | |||
| black = "*" | |||
| coverage = "*" | |||
| [packages] | |||
| skyfield = ">=1.32.0,<2.0.0" | |||
| numpy = ">=1.17.0,<2.0.0" | |||
| python-dateutil = ">=2.8.0,<3.0.0" | |||
| skyfield-data = ">=3.0.0,<4.0.0" | |||
| [requires] | |||
| python_version = "3" | |||
| @@ -9,55 +9,20 @@ | |||
| Kosmorrolib requires the following software to work: | |||
| - Python ≥ 3.7.0 | |||
| - PIP | |||
| ### Production environment | |||
| Keep in mind that Kosmorrolib is not considered as stable for now. | |||
| And that's all! | |||
| #### PyPI | |||
| ### Production environment | |||
| Kosmorrolib is available [on PyPI](https://pypi.org/project/kosmorrolib/): `pip install kosmorrolib`. | |||
| Kosmorrolib is available [on PyPI](https://pypi.org/project/kosmorrolib/). To use it, invoke `pip install kosmorrolib`. | |||
| ### Development environment | |||
| First, install [Pipenv](https://pypi.org/project/pipenv/). | |||
| To contribute to Kosmorrolib, you will need [Poetry](https://python-poetry.org), a software to manage the project from development to publishing. | |||
| Clone this repository and run `pipenv sync` to install all the dependencies. | |||
| Clone this repository and run `poetry install` to install the dependencies. | |||
| And that's all, your development environment is ready for the fight! 👏 | |||
| ## Using the Kosmorrolib | |||
| The Kosmorrolib provides three functions that you can use in your code: | |||
| ```python | |||
| #!/usr/bin/env python3 | |||
| import kosmorrolib | |||
| from datetime import date | |||
| position = kosmorrolib.Position(50.5824, 3.0624) | |||
| # Get the moon phase for today | |||
| moon_phase = kosmorrolib.get_moon_phase() | |||
| # Get the moon phase for June 9th, 2021 | |||
| moon_phase = kosmorrolib.get_moon_phase(date.fromisoformat('2021-06-09')) | |||
| # Get a list of objects representing the ephemerides of today. | |||
| ephemerides = kosmorrolib.get_ephemerides(position) | |||
| # Get a list of objects representing the ephemerides of June 9th, 2021. | |||
| ephemerides = kosmorrolib.get_ephemerides(position, date.fromisoformat('2021-06-09')) | |||
| # Get a list of objects representing the events of today. | |||
| events = kosmorrolib.get_events() | |||
| # Get a list of objects representing the events on June 9th, 2021. | |||
| events = kosmorrolib.get_events(date.fromisoformat('2021-06-09')) | |||
| ## Documentation | |||
| # Note that each method provides an optional parameter for the timezone: | |||
| moon_phase = kosmorrolib.get_moon_phase(timezone=2) | |||
| ephemerides = kosmorrolib.get_ephemerides(position, timezone=2) | |||
| events = kosmorrolib.get_events(timezone=2) | |||
| ``` | |||
| All the documentation can be found [on the website](https://kosmorro.space/lib/doc). | |||
| @@ -0,0 +1,16 @@ | |||
| # Security Policy | |||
| ## Supported Versions | |||
| For Kosmorrolib, the library that actually makes the calculations, the last patch of the two last minor versions are supported. | |||
| Therefore, once a new minor version of Kosmorrolib is released, you have some time to upgrade before it comes to End-of-Life. | |||
| Currently supported versions of Kosmorrolib are listed at [kosmorro.space](https://kosmorro.space/support/versions/). | |||
| ## Reporting a Vulnerability | |||
| If you find any vulnerability, please don't open an issue directly, and send me an email to [jerome+kosmorrolib@deuchnord.fr](mailto:jerome+kosmorrolib@deuchnord.fr?subject=Vulnerability+in+Kosmorrolib) with the subject: _"Vulnerability in Kosmorrolib"_ to describe the exact nature of the vulnerability. | |||
| If the vulnerability can be reproduced on my side, then a patch will be made along with a security advisory. | |||
| If I cannot reproduce the vulnerability, then I will send you an email to ask for more information. | |||
| Thank you! | |||
| @@ -1,26 +0,0 @@ | |||
| #!/usr/bin/env python3 | |||
| # Kosmorrolib - The Library To Compute Your Ephemerides | |||
| # Copyright (C) 2021 Jérôme Deuchnord <jerome@deuchnord.fr> | |||
| # | |||
| # This program is free software: you can redistribute it and/or modify | |||
| # it under the terms of the GNU Affero General Public License as | |||
| # published by the Free Software Foundation, either version 3 of the | |||
| # License, or (at your option) any later version. | |||
| # | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| # GNU Affero General Public License for more details. | |||
| # | |||
| # You should have received a copy of the GNU Affero General Public License | |||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||
| __title__ = "kosmorrolib" | |||
| __description__ = "A library to compute your ephemerides" | |||
| __url__ = "http://kosmorro.space/lib" | |||
| __version__ = "1.0.1" | |||
| __author__ = "Jérôme Deuchnord" | |||
| __author_email__ = "jerome@deuchnord.fr" | |||
| __license__ = "AGPL-v3" | |||
| __copyright__ = "2021 - Jérôme Deuchnord" | |||
| @@ -0,0 +1,37 @@ | |||
| [tool.poetry] | |||
| name = "kosmorrolib" | |||
| version = "1.0.1" | |||
| authors = ["Jérôme Deuchnord <jerome@deuchnord.fr>"] | |||
| homepage = "https://kosmorro.space/lib" | |||
| repository = "https://github.com/Kosmorro/lib" | |||
| documentation = "https://kosmorro.space/lib/doc" | |||
| keywords = ["kosmorro", "astronomy", "ephemerides", "ephemeris"] | |||
| license = "AGPL-3.0-or-later" | |||
| description = "A library to computes the ephemerides." | |||
| readme = "README.md" | |||
| include = ["CHANGELOG.md"] | |||
| classifiers = [ | |||
| "Development Status :: 5 - Production/Stable", | |||
| "Topic :: Scientific/Engineering :: Astronomy", | |||
| "Topic :: Software Development :: Libraries :: Python Modules", | |||
| "Intended Audience :: Developers", | |||
| "Intended Audience :: Education", | |||
| ] | |||
| [tool.poetry.dependencies] | |||
| python = "^3.7" | |||
| skyfield = "^1.21" | |||
| skyfield-data = "^3.0" | |||
| numpy = "^1.17" | |||
| python-dateutil = "^2.8" | |||
| [tool.poetry.dev-dependencies] | |||
| black = "^21.11b1" | |||
| parameterized = "^0.8.1" | |||
| coverage = "^6.1.2" | |||
| coveralls = "^3.3.1" | |||
| [build-system] | |||
| requires = ["poetry-core>=1.0.0"] | |||
| build-backend = "poetry.core.masonry.api" | |||
| @@ -1,57 +0,0 @@ | |||
| #!/usr/bin/env python3 | |||
| # Kosmorrolib - The Library To Compute Your Ephemerides | |||
| # Copyright (C) 2021 Jérôme Deuchnord <jerome@deuchnord.fr> | |||
| # | |||
| # This program is free software: you can redistribute it and/or modify | |||
| # it under the terms of the GNU Affero General Public License as | |||
| # published by the Free Software Foundation, either version 3 of the | |||
| # License, or (at your option) any later version. | |||
| # | |||
| # This program is distributed in the hope that it will be useful, | |||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| # GNU Affero General Public License for more details. | |||
| # | |||
| # You should have received a copy of the GNU Affero General Public License | |||
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |||
| import pathlib | |||
| from setuptools import setup, find_packages | |||
| from kosmorrolib.__version__ import __version__ | |||
| HERE = pathlib.Path(__file__).parent | |||
| README = (HERE / "README.md").read_text() | |||
| setup( | |||
| name="kosmorrolib", | |||
| version=__version__, | |||
| author="Jérôme Deuchnord", | |||
| author_email="jerome@deuchnord.fr", | |||
| url="http://kosmorro.space/lib", | |||
| license="AGPL-v3", | |||
| description="A library to computes the ephemerides.", | |||
| long_description=README, | |||
| long_description_content_type="text/markdown", | |||
| keywords=["kosmorro", "astronomy", "ephemerides", "ephemeris"], | |||
| packages=["kosmorrolib"], | |||
| install_requires=[ | |||
| "skyfield>=1.21.0,<2.0.0", | |||
| "skyfield-data>=3.0.0,<4.0.0", | |||
| "numpy>=1.17.0,<2.0.0", | |||
| "python-dateutil", | |||
| ], | |||
| classifiers=[ | |||
| "Development Status :: 5 - Production/Stable", | |||
| "Intended Audience :: Developers", | |||
| "Intended Audience :: Education", | |||
| "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", | |||
| "Topic :: Software Development :: Libraries :: Python Modules", | |||
| "Programming Language :: Python :: 3.7", | |||
| "Programming Language :: Python :: 3.8", | |||
| "Programming Language :: Python :: 3.9", | |||
| "Topic :: Scientific/Engineering :: Astronomy", | |||
| ], | |||
| python_requires=">=3.7", | |||
| ) | |||