Feature rye (#17)
Migrate from Poetry to Rye Adaptat github actions Group build targets in makefile
This commit is contained in:
parent
b57c4f1ae6
commit
6d53fdecac
32 changed files with 208 additions and 1203 deletions
29
.github/workflows/docker.yml
vendored
29
.github/workflows/docker.yml
vendored
|
@ -3,21 +3,22 @@ on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ main ]
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build_docker:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
python-version: [3.10.13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Checkout code
|
||||||
- uses: actions/setup-python@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
- name: Set up rye
|
||||||
python-version: "3.11.0"
|
uses: atu4403/setup-rye-multiOS@v1
|
||||||
- name: Install poetry
|
- name: Sync dependencies using rye
|
||||||
uses: abatilo/actions-poetry@v2
|
run: |
|
||||||
with:
|
rye pin ${{ matrix.python-version }}
|
||||||
poetry-version: 1.2.2
|
rye sync
|
||||||
- name: Install dependencies
|
rye build --wheel --out dist
|
||||||
run: poetry install
|
|
||||||
- name: Build project
|
|
||||||
run: poetry build
|
|
||||||
- name: Build the Docker image
|
- name: Build the Docker image
|
||||||
run: |
|
run: |
|
||||||
echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin docker.io
|
echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin docker.io
|
||||||
|
|
19
.github/workflows/pyinstaller.yml
vendored
19
.github/workflows/pyinstaller.yml
vendored
|
@ -2,13 +2,22 @@ name: pyinstaller
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ main ]
|
||||||
pull_request:
|
|
||||||
branches: [ main ]
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build_binary:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
python-version: [3.10.13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Set up rye
|
||||||
|
uses: atu4403/setup-rye-multiOS@v1
|
||||||
|
- name: Sync dependencies using rye
|
||||||
|
run: |
|
||||||
|
rye pin ${{ matrix.python-version }}
|
||||||
|
rye sync
|
||||||
- name: Package application
|
- name: Package application
|
||||||
uses: JackMcKew/pyinstaller-action-linux@python3.10
|
uses: JackMcKew/pyinstaller-action-linux@python3.10
|
||||||
with:
|
with:
|
||||||
|
|
36
.github/workflows/pytest.yml
vendored
36
.github/workflows/pytest.yml
vendored
|
@ -2,30 +2,26 @@ name: pytest
|
||||||
on: push
|
on: push
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
test:
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
python-version: [3.11.0]
|
|
||||||
poetry-version: [1.2.2]
|
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
python-version: [3.10.13]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Checkout code
|
||||||
- uses: actions/setup-python@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
- name: Set up rye
|
||||||
python-version: ${{ matrix.python-version }}
|
uses: atu4403/setup-rye-multiOS@v1
|
||||||
- name: Install poetry
|
- name: Sync dependencies using rye
|
||||||
uses: abatilo/actions-poetry@v2
|
run: |
|
||||||
with:
|
rye pin ${{ matrix.python-version }}
|
||||||
poetry-version: ${{ matrix.poetry-version }}
|
rye sync
|
||||||
- name: Install dependencies
|
|
||||||
run: poetry install
|
|
||||||
- name: Pytest and Coverage
|
- name: Pytest and Coverage
|
||||||
run: |
|
run: |
|
||||||
poetry run coverage run -m --source=stacosys pytest tests
|
rye run coverage run -m --source=stacosys pytest tests
|
||||||
poetry run coverage report
|
rye run coverage report
|
||||||
- name: Send report to Coveralls
|
- name: Send report to Coveralls
|
||||||
run: poetry run coveralls
|
run: rye run coveralls
|
||||||
env:
|
env:
|
||||||
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
||||||
|
|
37
Makefile
37
Makefile
|
@ -1,16 +1,35 @@
|
||||||
all: black test typehint lint
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
|
# use the rest as arguments for "run"
|
||||||
|
RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
|
# ...and turn them into do-nothing targets
|
||||||
|
$(eval $(RUN_ARGS):;@:)
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: all build run test
|
||||||
|
|
||||||
|
# code quality
|
||||||
|
all: black typehint lint
|
||||||
|
|
||||||
black:
|
black:
|
||||||
poetry run isort --multi-line 3 --profile black stacosys/ tests/
|
rye run isort --multi-line 3 --profile black src/ tests/
|
||||||
poetry run black --target-version py311 stacosys/ tests/
|
rye run black --target-version py311 src/ tests/
|
||||||
|
|
||||||
test:
|
|
||||||
poetry run coverage run -m --source=stacosys pytest
|
|
||||||
poetry run coverage report
|
|
||||||
|
|
||||||
typehint:
|
typehint:
|
||||||
poetry run mypy --ignore-missing-imports stacosys/ tests/
|
rye run mypy --ignore-missing-imports src/ tests/
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
poetry run pylint stacosys/
|
rye run pylint src/
|
||||||
|
|
||||||
|
# test
|
||||||
|
test:
|
||||||
|
rye run coverage run -m --source=stacosys pytest tests
|
||||||
|
rye run coverage report
|
||||||
|
|
||||||
|
# build
|
||||||
|
#rye run pyinstaller src/stacosys/run.py --name stacosys --onefile
|
||||||
|
build:
|
||||||
|
rye run pyinstaller --clean stacosys.spec
|
||||||
|
|
||||||
|
# run
|
||||||
|
run:
|
||||||
|
rye run python src/stacosys/run.py $(RUN_ARGS)
|
3
vagrant/Vagrantfile → Vagrantfile
vendored
3
vagrant/Vagrantfile → Vagrantfile
vendored
|
@ -1,9 +1,12 @@
|
||||||
Vagrant.configure("2") do |config|
|
Vagrant.configure("2") do |config|
|
||||||
config.vm.box = "debian/bullseye64"
|
config.vm.box = "debian/bullseye64"
|
||||||
config.vm.provider :virtualbox do |vb|
|
config.vm.provider :virtualbox do |vb|
|
||||||
|
vb.memory = 1024
|
||||||
|
vb.cpus = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
config.vm.define "master" do |master|
|
config.vm.define "master" do |master|
|
||||||
|
master.vm.hostname = "master"
|
||||||
master.vm.provision "shell", inline: <<-SHELL
|
master.vm.provision "shell", inline: <<-SHELL
|
||||||
mkdir /home/vagrant/stacosys
|
mkdir /home/vagrant/stacosys
|
||||||
SHELL
|
SHELL
|
3
build.sh
3
build.sh
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#pyinstaller stacosys/run.py --name stacosys --onefile
|
|
||||||
poetry run pyinstaller stacosys.spec
|
|
|
@ -1,4 +0,0 @@
|
||||||
[flake8]
|
|
||||||
max-line-length = 88
|
|
||||||
extend-ignore = E203
|
|
||||||
spellcheck-targets=comments
|
|
1098
poetry.lock
generated
1098
poetry.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -1,3 +0,0 @@
|
||||||
[virtualenvs]
|
|
||||||
in-project = true
|
|
||||||
prefer-active-python = true
|
|
|
@ -1,30 +1,42 @@
|
||||||
[tool.poetry]
|
[project]
|
||||||
name = "stacosys"
|
name = "stacosys"
|
||||||
version = "3.3"
|
version = "3.3"
|
||||||
description = "STAtic COmmenting SYStem"
|
description = "STAtic COmmenting SYStem"
|
||||||
authors = ["Yax"]
|
authors = [
|
||||||
|
{ name = "Yax" }
|
||||||
|
]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
requires-python = ">= 3.8"
|
||||||
|
dependencies = [
|
||||||
|
"pyrss2gen>=1.1",
|
||||||
|
"markdown>=3.5.1",
|
||||||
|
"requests>=2.31.0",
|
||||||
|
"background>=0.2.1",
|
||||||
|
"Flask>=3.0.0",
|
||||||
|
"types-markdown>=3.5.0.1",
|
||||||
|
"pydal>=20230521.1"
|
||||||
|
]
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.pytest.ini_options]
|
||||||
python = ">=3.9.0,<3.12"
|
pythonpath = [
|
||||||
pyrss2gen = "^1.1"
|
"src"
|
||||||
markdown = "^3.1.1"
|
]
|
||||||
requests = "^2.25.1"
|
|
||||||
coverage = "^6.5"
|
|
||||||
background = "^0.2.1"
|
|
||||||
Flask = "^2.1.1"
|
|
||||||
types-markdown = "^3.4.2.1"
|
|
||||||
pydal = "^20221110.1"
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
|
||||||
pylint = "^2.15"
|
|
||||||
mypy = "^0.991"
|
|
||||||
pytest = "^7.2.0"
|
|
||||||
coveralls = "^3.3.1"
|
|
||||||
pytest-cov = "^4.0.0"
|
|
||||||
black = "^22.10.0"
|
|
||||||
pyinstaller = "^5.9.0"
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["hatchling"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
|
[tool.rye]
|
||||||
|
managed = true
|
||||||
|
dev-dependencies = [
|
||||||
|
"pylint>=3.0.2",
|
||||||
|
"mypy>=1.6.1",
|
||||||
|
"pytest>=7.4.3",
|
||||||
|
"coveralls>=3.3.1",
|
||||||
|
"pytest-cov>=4.1.0",
|
||||||
|
"black>=23.10.1",
|
||||||
|
"pyinstaller>=6.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.hatch.metadata]
|
||||||
|
allow-direct-references = true
|
||||||
|
|
53
requirements-dev.lock
Normal file
53
requirements-dev.lock
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# generated by rye
|
||||||
|
# use `rye lock` or `rye sync` to update this lockfile
|
||||||
|
#
|
||||||
|
# last locked with the following flags:
|
||||||
|
# pre: false
|
||||||
|
# features: []
|
||||||
|
# all-features: false
|
||||||
|
|
||||||
|
-e file:.
|
||||||
|
altgraph==0.17.4
|
||||||
|
astroid==3.0.1
|
||||||
|
background==0.2.1
|
||||||
|
black==23.11.0
|
||||||
|
blinker==1.7.0
|
||||||
|
certifi==2023.7.22
|
||||||
|
charset-normalizer==3.3.2
|
||||||
|
click==8.1.7
|
||||||
|
coverage==6.5.0
|
||||||
|
coveralls==3.3.1
|
||||||
|
dill==0.3.7
|
||||||
|
docopt==0.6.2
|
||||||
|
exceptiongroup==1.1.3
|
||||||
|
flask==3.0.0
|
||||||
|
idna==3.4
|
||||||
|
iniconfig==2.0.0
|
||||||
|
isort==5.12.0
|
||||||
|
itsdangerous==2.1.2
|
||||||
|
jinja2==3.1.2
|
||||||
|
markdown==3.5.1
|
||||||
|
markupsafe==2.1.3
|
||||||
|
mccabe==0.7.0
|
||||||
|
mypy==1.6.1
|
||||||
|
mypy-extensions==1.0.0
|
||||||
|
packaging==23.2
|
||||||
|
pathspec==0.11.2
|
||||||
|
platformdirs==3.11.0
|
||||||
|
pluggy==1.3.0
|
||||||
|
pydal==20230521.1
|
||||||
|
pyinstaller==6.1.0
|
||||||
|
pyinstaller-hooks-contrib==2023.10
|
||||||
|
pylint==3.0.2
|
||||||
|
pyrss2gen==1.1
|
||||||
|
pytest==7.4.3
|
||||||
|
pytest-cov==4.1.0
|
||||||
|
requests==2.31.0
|
||||||
|
tomli==2.0.1
|
||||||
|
tomlkit==0.12.2
|
||||||
|
types-markdown==3.5.0.1
|
||||||
|
typing-extensions==4.8.0
|
||||||
|
urllib3==2.0.7
|
||||||
|
werkzeug==3.0.1
|
||||||
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
|
setuptools==68.2.2
|
26
requirements.lock
Normal file
26
requirements.lock
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# generated by rye
|
||||||
|
# use `rye lock` or `rye sync` to update this lockfile
|
||||||
|
#
|
||||||
|
# last locked with the following flags:
|
||||||
|
# pre: false
|
||||||
|
# features: []
|
||||||
|
# all-features: false
|
||||||
|
|
||||||
|
-e file:.
|
||||||
|
background==0.2.1
|
||||||
|
blinker==1.7.0
|
||||||
|
certifi==2023.7.22
|
||||||
|
charset-normalizer==3.3.2
|
||||||
|
click==8.1.7
|
||||||
|
flask==3.0.0
|
||||||
|
idna==3.4
|
||||||
|
itsdangerous==2.1.2
|
||||||
|
jinja2==3.1.2
|
||||||
|
markdown==3.5.1
|
||||||
|
markupsafe==2.1.3
|
||||||
|
pydal==20230521.1
|
||||||
|
pyrss2gen==1.1
|
||||||
|
requests==2.31.0
|
||||||
|
types-markdown==3.5.0.1
|
||||||
|
urllib3==2.0.7
|
||||||
|
werkzeug==3.0.1
|
3
run.sh
3
run.sh
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
python3 stacosys/run.py "$@"
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ from pydal import DAL, Field
|
||||||
|
|
||||||
|
|
||||||
class Database:
|
class Database:
|
||||||
|
|
||||||
db_dal = DAL()
|
db_dal = DAL()
|
||||||
|
|
||||||
def configure(self, db_uri):
|
def configure(self, db_uri):
|
|
@ -30,7 +30,6 @@ class ConfigParameter(Enum):
|
||||||
|
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
|
|
||||||
_cfg = configparser.ConfigParser()
|
_cfg = configparser.ConfigParser()
|
||||||
|
|
||||||
def load(self, config_pathname):
|
def load(self, config_pathname):
|
|
@ -1,31 +1,24 @@
|
||||||
# -*- mode: python ; coding: utf-8 -*-
|
# -*- mode: python ; coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
block_cipher = None
|
|
||||||
|
|
||||||
|
|
||||||
a = Analysis(
|
a = Analysis(
|
||||||
['stacosys/run.py'],
|
['src/stacosys/run.py'],
|
||||||
pathex=[],
|
pathex=['src'],
|
||||||
binaries=[],
|
binaries=[],
|
||||||
datas=[('stacosys/interface/templates/*.html', 'stacosys/interface/templates/')],
|
datas=[('src/stacosys/interface/templates/*.html', 'src/stacosys/interface/templates/')],
|
||||||
hiddenimports=[],
|
hiddenimports=[],
|
||||||
hookspath=[],
|
hookspath=[],
|
||||||
hooksconfig={},
|
hooksconfig={},
|
||||||
runtime_hooks=[],
|
runtime_hooks=[],
|
||||||
excludes=[],
|
excludes=[],
|
||||||
win_no_prefer_redirects=False,
|
|
||||||
win_private_assemblies=False,
|
|
||||||
cipher=block_cipher,
|
|
||||||
noarchive=False,
|
noarchive=False,
|
||||||
)
|
)
|
||||||
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
pyz = PYZ(a.pure)
|
||||||
|
|
||||||
exe = EXE(
|
exe = EXE(
|
||||||
pyz,
|
pyz,
|
||||||
a.scripts,
|
a.scripts,
|
||||||
a.binaries,
|
a.binaries,
|
||||||
a.zipfiles,
|
|
||||||
a.datas,
|
a.datas,
|
||||||
[],
|
[],
|
||||||
name='stacosys',
|
name='stacosys',
|
||||||
|
|
|
@ -83,13 +83,20 @@ def create_comment(url, author_name, content):
|
||||||
|
|
||||||
|
|
||||||
def test_find_recent_published_comments(setup_db):
|
def test_find_recent_published_comments(setup_db):
|
||||||
|
comments = [
|
||||||
comments = [create_comment("/post", "Adam", "Comment 1"), create_comment("/post", "Arf", "Comment 2"),
|
create_comment("/post", "Adam", "Comment 1"),
|
||||||
create_comment("/post", "Arwin", "Comment 3"), create_comment("/post", "Bill", "Comment 4"),
|
create_comment("/post", "Arf", "Comment 2"),
|
||||||
create_comment("/post", "Bo", "Comment 5"), create_comment("/post", "Charles", "Comment 6"),
|
create_comment("/post", "Arwin", "Comment 3"),
|
||||||
create_comment("/post", "Dan", "Comment 7"), create_comment("/post", "Dwayne", "Comment 8"),
|
create_comment("/post", "Bill", "Comment 4"),
|
||||||
create_comment("/post", "Erl", "Comment 9"), create_comment("/post", "Jay", "Comment 10"),
|
create_comment("/post", "Bo", "Comment 5"),
|
||||||
create_comment("/post", "Kenny", "Comment 11"), create_comment("/post", "Lord", "Comment 12")]
|
create_comment("/post", "Charles", "Comment 6"),
|
||||||
|
create_comment("/post", "Dan", "Comment 7"),
|
||||||
|
create_comment("/post", "Dwayne", "Comment 8"),
|
||||||
|
create_comment("/post", "Erl", "Comment 9"),
|
||||||
|
create_comment("/post", "Jay", "Comment 10"),
|
||||||
|
create_comment("/post", "Kenny", "Comment 11"),
|
||||||
|
create_comment("/post", "Lord", "Comment 12"),
|
||||||
|
]
|
||||||
|
|
||||||
rows = dao.find_recent_published_comments()
|
rows = dao.find_recent_published_comments()
|
||||||
assert len(rows) == 0
|
assert len(rows) == 0
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
RSS
|
|
Loading…
Add table
Reference in a new issue