diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 60ca0d1..69b3773 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -87,6 +87,6 @@ repos: args: [-q, --allow-unsafe, --resolver=backtracking, --strip-extras, --output-file=constraints.txt, requirements.in] files: ^requirements\.in|constraints\.txt$ - id: pip-compile - name: pip-compile requirements-dev.in + name: pip-compile requirements-dev.txt args: [-q, --allow-unsafe, --resolver=backtracking, --generate-hashes, requirements-dev.in] files: ^requirements-dev\.(in|txt)$ diff --git a/requirements-dev.in b/requirements-dev.in index 34d1e72..a8fe4d1 100644 --- a/requirements-dev.in +++ b/requirements-dev.in @@ -9,9 +9,8 @@ pre-commit>=2.1 model-bakery>=1.3.1 freezegun>=1.1.0 bpython>=0.22.1 -invoke>=1.7.3 +invoke>=2.0.0 hypothesis>=6.56.4 django-browser-reload>=1.6.0 black>=22.12.0 pip-tools>=6.0 -patchy>=2.0 diff --git a/requirements-dev.txt b/requirements-dev.txt index eb9105e..cec6b58 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -400,10 +400,6 @@ packaging==23.0 \ # via # build # pytest -patchy==2.6.1 \ - --hash=sha256:1bbbd907b2cd7df7c55210a210172f3d1a5e943c7727f66446d298c9024b6518 \ - --hash=sha256:c71e99242c9d2467143d5b8200459e5a2e848608c7cfb7a35121f1744979de8a - # via -r requirements-dev.in pathspec==0.10.3 \ --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 diff --git a/tasks.py b/tasks.py index c3f4e7b..14c0264 100644 --- a/tasks.py +++ b/tasks.py @@ -1,23 +1,6 @@ -import time from pathlib import Path -import patchy -import requests -from invoke import task - -patchy.patch( - "invoke.tasks.Task.argspec", - """\ -@@ -16,7 +16,7 @@ - # TODO: __call__ exhibits the 'self' arg; do we manually nix 1st result - # in argspec, or is there a way to get the "really callable" spec? - func = body if isinstance(body, types.FunctionType) else body.__call__ -- spec = inspect.getargspec(func) -+ spec = inspect.getfullargspec(func) - arg_names = spec.args[:] - matched_args = [reversed(x) for x in [spec.args, spec.defaults or []]] - spec_dict = dict(zip_longest(*matched_args, fillvalue=NO_DEFAULT))""", -) +from invoke import Context, task BASE_DIR = Path(__file__).parent.resolve(strict=True) SRC_DIR = BASE_DIR / "src" @@ -27,8 +10,10 @@ TEST_ENV = {"ENV_FILE": BASE_DIR / "envs" / "test-envs.env"} @task -def update_dependencies(ctx): - common_args = "-q --allow-unsafe --resolver=backtracking --upgrade" +def sync_dependencies(ctx: Context, update: bool = False): + common_args = "-q --allow-unsafe --resolver=backtracking" + if update: + common_args += " --upgrade" with ctx.cd(BASE_DIR): ctx.run( f"pip-compile {common_args} --generate-hashes requirements.in", @@ -49,25 +34,25 @@ def update_dependencies(ctx): @task -def makemessages(ctx): +def makemessages(ctx: Context): with ctx.cd(SRC_DIR): ctx.run("./manage.py makemessages -l en -l fr", pty=True, echo=True) @task -def compilemessages(ctx): +def compilemessages(ctx: Context): with ctx.cd(SRC_DIR): ctx.run("./manage.py compilemessages -l en -l fr", pty=True, echo=True) @task -def test(ctx): +def test(ctx: Context): with ctx.cd(SRC_DIR): ctx.run("pytest", pty=True, echo=True, env=TEST_ENV) @task -def test_cov(ctx): +def test_cov(ctx: Context): with ctx.cd(SRC_DIR): ctx.run( "pytest --cov=. --cov-branch --cov-report term-missing:skip-covered", @@ -78,59 +63,7 @@ def test_cov(ctx): @task -def pre_commit(ctx): - with ctx.cd(BASE_DIR): - ctx.run("pre-commit run --all-files", pty=True, echo=True) - - -@task(pre=[pre_commit, test_cov]) -def check(ctx): - pass - - -@task -def build(ctx): - with ctx.cd(BASE_DIR): - ctx.run( - "docker-compose build django", pty=True, echo=True, env=COMPOSE_BUILD_ENV - ) - - -@task -def publish(ctx): - with ctx.cd(BASE_DIR): - ctx.run( - "docker-compose push django", pty=True, echo=True, env=COMPOSE_BUILD_ENV - ) - - -@task -def deploy(ctx): - ctx.run("ssh ubuntu /mnt/data/checkout/update", pty=True, echo=True) - - -@task -def check_alive(ctx): - exception = None - for _ in range(5): - try: - res = requests.get("https://charasheet.augendre.info") - res.raise_for_status() - print("Server is up & running") - return - except requests.exceptions.HTTPError as e: - time.sleep(2) - exception = e - raise RuntimeError("Failed to reach the server") from exception - - -@task(pre=[check, build, publish, deploy], post=[check_alive]) -def beam(ctx): - pass - - -@task -def download_db(ctx): +def download_db(ctx: Context): with ctx.cd(BASE_DIR): ctx.run( "scp ubuntu:/mnt/data/charasheet/db/db.sqlite3 ./db/db.sqlite3", @@ -146,7 +79,7 @@ def download_db(ctx): @task -def dump_initial(ctx): +def dump_initial(ctx: Context): with ctx.cd(SRC_DIR): path = "./character/fixtures/initial_data.json" ctx.run( @@ -158,7 +91,7 @@ def dump_initial(ctx): @task -def import_from_co_drs(ctx): +def import_from_co_drs(ctx: Context): with ctx.cd(SRC_DIR): ctx.run("./manage.py import_races", pty=True, echo=True) ctx.run("./manage.py import_profiles", pty=True, echo=True) @@ -169,5 +102,5 @@ def import_from_co_drs(ctx): @task(pre=[import_from_co_drs, dump_initial]) -def update_fixtures(ctx): +def update_fixtures(ctx: Context): pass