@@ -38,10 +38,8 @@ body: | |||||
What version of Kosmorrolib are you using? | What version of Kosmorrolib are you using? | ||||
options: | options: | ||||
- "0.11.2" | |||||
- "0.11.1" | |||||
- "0.11.0" | |||||
- "0.10.0" | |||||
- "1.0" | |||||
- "0.11" | |||||
- main branch | - main branch | ||||
- features branch | - features branch | ||||
@@ -86,8 +84,33 @@ body: | |||||
attributes: | attributes: | ||||
label: Bug description | label: Bug description | ||||
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 | name: Release Application | ||||
on: | on: | ||||
push: | |||||
tags: ['v*'] | |||||
- release | |||||
jobs: | 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 | runs-on: ubuntu-latest | ||||
steps: | steps: | ||||
- uses: actions/checkout@v1 | - uses: actions/checkout@v1 | ||||
- name: Set up Python | - name: Set up Python | ||||
uses: actions/setup-python@v1 | uses: actions/setup-python@v1 | ||||
with: | with: | ||||
python-version: '3.7' | |||||
python-version: '3.x' | |||||
- name: Setup environment | - name: Setup environment | ||||
run: | | run: | | ||||
sudo apt update | sudo apt update | ||||
python -m pip install --upgrade pip poetry | |||||
sudo apt install ruby | sudo apt install ruby | ||||
sudo gem install ronn | sudo gem install ronn | ||||
- name: Install dependencies | |||||
- name: Build package | |||||
run: | | 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: | env: | ||||
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} | |||||
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} | |||||
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_PASSWORD }} | |||||
run: | | run: | | ||||
make build | |||||
twine upload dist/* | |||||
poetry publish |
@@ -5,6 +5,7 @@ on: | |||||
branches: [main, features] | branches: [main, features] | ||||
pull_request: | pull_request: | ||||
branches: [main, features] | branches: [main, features] | ||||
workflow_dispatch: | |||||
jobs: | jobs: | ||||
doc-tests: | doc-tests: | ||||
@@ -13,11 +14,9 @@ jobs: | |||||
fail-fast: false | fail-fast: false | ||||
matrix: | matrix: | ||||
os: | os: | ||||
- ubuntu-18.04 | |||||
- ubuntu-20.04 | |||||
- macos-10.15 | |||||
- ubuntu-latest | |||||
- macos-11.0 | - macos-11.0 | ||||
- windows-2019 | |||||
- windows-latest | |||||
python_version: | python_version: | ||||
- '3.7' | - '3.7' | ||||
- '3.8' | - '3.8' | ||||
@@ -33,37 +32,23 @@ jobs: | |||||
python-version: ${{ matrix.python_version }} | python-version: ${{ matrix.python_version }} | ||||
architecture: x64 | architecture: x64 | ||||
- name: Prepare environment (non-Windows systems) | |||||
if: ${{ matrix.os != 'windows-2019' }} | |||||
- name: Prepare environment | |||||
run: | | 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: | env: | ||||
PIP_PREFER_BINARY: 1 | PIP_PREFER_BINARY: 1 | ||||
run: | | 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) | - 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: | | run: | | ||||
make coverage-doctests | make coverage-doctests | ||||
- name: Run doc tests (without coverage) | - 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: | | run: | | ||||
make doctests | make doctests | ||||
@@ -71,6 +56,6 @@ jobs: | |||||
env: | env: | ||||
COVERALLS_PRO_TOKEN: ${{ secrets.COVERALLS_TOKEN }} | COVERALLS_PRO_TOKEN: ${{ secrets.COVERALLS_TOKEN }} | ||||
GITHUB_TOKEN: ${{ secrets.GITHUB_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: | | run: | | ||||
pipenv run coveralls --service=github | |||||
python3 -m poetry run coveralls --service=github |
@@ -7,3 +7,4 @@ Pipfile.lock | |||||
# Gitpod-specific: | # Gitpod-specific: | ||||
/.vscode/** | /.vscode/** | ||||
poetry.lock |
@@ -8,5 +8,5 @@ vscode: | |||||
- editorconfig.editorconfig | - editorconfig.editorconfig | ||||
tasks: | 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: | black: | ||||
pipenv run black kosmorrolib setup.py | |||||
poetry run black kosmorrolib setup.py | |||||
.PHONY: tests | .PHONY: tests | ||||
tests: doctests | tests: doctests | ||||
coverage-doctests: | coverage-doctests: | ||||
pipenv run python3 -m coverage run tests.py | |||||
python3 -m poetry run coverage run tests.py | |||||
coverage-report: | coverage-report: | ||||
pipenv run python3 -m coverage report | |||||
python3 -m poetry run coverage report | |||||
doctests: | 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: | changelog: | ||||
conventional-changelog -p angular -i CHANGELOG.md -s | 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 "\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'." | @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: | Kosmorrolib requires the following software to work: | ||||
- Python ≥ 3.7.0 | - 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 | ### 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! 👏 | 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", | |||||
) |