backport improvements from hulpvraag
- tasks: fetch tags before bump, auto-push tag, add version() task - tasks(service): pre=[ci] on build_image, :latest tag, interactive deploy prompt - pyproject.toml: add ruff isort known-first-party section - Dockerfile: add smoke-test import after install Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -58,6 +58,7 @@ def bump(c, part):
|
||||
if c.run("git status --porcelain", hide=True).stdout.strip():
|
||||
raise SystemExit("Working tree is dirty. Commit or stash changes first.")
|
||||
|
||||
c.run("git fetch --tags", hide=True)
|
||||
major, minor, patch = (int(x) for x in _latest_tag(c).lstrip("v").split("."))
|
||||
if part == "major":
|
||||
major, minor, patch = major + 1, 0, 0
|
||||
@@ -68,7 +69,8 @@ def bump(c, part):
|
||||
|
||||
tag = f"v{major}.{minor}.{patch}"
|
||||
c.run(f"git tag {tag}")
|
||||
print(f"Tagged {tag}. Push it with: git push origin {tag}")
|
||||
c.run(f"git push origin {tag}")
|
||||
print(f"Tagged and pushed {tag}.")
|
||||
{%- if cookiecutter.project_type == "service" %}
|
||||
|
||||
|
||||
@@ -77,25 +79,30 @@ def _version(c) -> str:
|
||||
|
||||
|
||||
@task
|
||||
def version(c):
|
||||
"""Print the current version (latest git tag)."""
|
||||
print(_version(c))
|
||||
|
||||
|
||||
@task(pre=[ci])
|
||||
def build_image(c):
|
||||
"""Build the runtime image, tagged with the current version."""
|
||||
c.run(f"docker build --network=host -t {IMAGE}:{_version(c)} .")
|
||||
"""Build the runtime image tagged as latest."""
|
||||
c.run(f"docker build --network=host -t {IMAGE}:latest .")
|
||||
|
||||
|
||||
@task
|
||||
def deploy(c):
|
||||
"""Build image, copy to VPS over SSH, restart the compose service."""
|
||||
version = _version(c)
|
||||
"""Build image, copy to VPS over SSH, then prompt before restarting the compose service."""
|
||||
build_image(c)
|
||||
print(f"Transferring {IMAGE}:{version} to {VPS}...")
|
||||
c.run(f"docker save {IMAGE}:{version} | ssh {VPS} docker load", pty=True)
|
||||
print("Updating docker-compose and restarting service...")
|
||||
c.run(
|
||||
f'ssh {VPS} "cd {REMOTE_DIR} && '
|
||||
f"sed -i 's|image: {IMAGE}:.*|image: {IMAGE}:{version}|' docker-compose.yml && "
|
||||
f'docker compose up -d {SERVICE}"'
|
||||
)
|
||||
print(f"Deployed {IMAGE}:{version}")
|
||||
print(f"Transferring {IMAGE}:latest to {VPS}...")
|
||||
c.run(f"docker save {IMAGE}:latest | ssh {VPS} docker load", pty=True)
|
||||
print("Image transferred.")
|
||||
answer = input("Restart service on VPS? [y/N] ").strip().lower()
|
||||
if answer != "y":
|
||||
print("Skipping restart. Image is available on the VPS.")
|
||||
return
|
||||
c.run(f'ssh {VPS} "cd {REMOTE_DIR} && docker compose down {SERVICE} && docker compose up -d {SERVICE}"')
|
||||
print("Service restarted.")
|
||||
{%- endif %}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user