Add a deployment command group to the website script
This group has one command so far: next-tag. It looks at the git tag list and figured out the next deployment tag. For the most part tags are named like so: deploy-%Y-%m-%d-NN The middle segments are year-month-day, and the last segment is an incrementing counter. For the most part this number will be 01. On days when I deploy more than once, it will increment.
This commit is contained in:
parent
69760a802d
commit
2688e4e339
3 changed files with 75 additions and 1 deletions
72
scripts/erynwells_me/deployment.py
Normal file
72
scripts/erynwells_me/deployment.py
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import datetime
|
||||||
|
import subprocess
|
||||||
|
from typing import List
|
||||||
|
from .scripting import Command
|
||||||
|
|
||||||
|
|
||||||
|
DATE_FORMAT = "%Y-%m-%d"
|
||||||
|
|
||||||
|
|
||||||
|
class DeploymentCommand(Command):
|
||||||
|
@property
|
||||||
|
def help(self) -> str:
|
||||||
|
return 'Deployment tools'
|
||||||
|
|
||||||
|
def add_arguments(self, parser: argparse.ArgumentParser):
|
||||||
|
commands = parser.add_subparsers(title="Deployment", required=True)
|
||||||
|
|
||||||
|
deployment_command = commands.add_parser(
|
||||||
|
'next-tag',
|
||||||
|
help='Calculate the next deployment tag for a given date, examining all other tags for that day'
|
||||||
|
)
|
||||||
|
deployment_command.add_argument(
|
||||||
|
'--date', '-d',
|
||||||
|
type=self.__class__.parse_date_argument,
|
||||||
|
default=datetime.date.today(),
|
||||||
|
help="date to calculate a new deployment tag for (default: today)"
|
||||||
|
)
|
||||||
|
deployment_command.set_defaults(handler=self.handle_next_deployment_tag_command)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse_date_argument(date_string: str) -> datetime.date:
|
||||||
|
return datetime.datetime.strptime(date_string, DATE_FORMAT).date()
|
||||||
|
|
||||||
|
def handle_next_deployment_tag_command(self, args: argparse.Namespace):
|
||||||
|
next_deployment_tag = deployment_tag_for_date(args.date)
|
||||||
|
print(next_deployment_tag)
|
||||||
|
|
||||||
|
def deployment_tag_for_date(date: datetime.date) -> str:
|
||||||
|
formatted_date = date.strftime(DATE_FORMAT)
|
||||||
|
|
||||||
|
def deploy_tag_filter(tag):
|
||||||
|
return tag.startswith("deploy-") and formatted_date in tag
|
||||||
|
|
||||||
|
filtered_tags = sorted(filter(deploy_tag_filter, git_tags()))
|
||||||
|
|
||||||
|
if len(filtered_tags) == 0:
|
||||||
|
return f"deploy-{formatted_date}-01"
|
||||||
|
else:
|
||||||
|
last_tag = filtered_tags[-1]
|
||||||
|
components = last_tag.split("-")
|
||||||
|
if len(components) == 5:
|
||||||
|
# A previous numbered deployment. Add one to the last deployment
|
||||||
|
# number.
|
||||||
|
deployment_number = int(components[-1]) + 1
|
||||||
|
return f"deploy-{formatted_date}-{deployment_number:02}"
|
||||||
|
else:
|
||||||
|
# An old style deployment tag that doesn't have a number. There
|
||||||
|
# should only ever be one of these.
|
||||||
|
assert len(filtered_tags) == 1
|
||||||
|
return f"deploy-{formatted_date}-02"
|
||||||
|
|
||||||
|
|
||||||
|
def git_tags() -> List[str]:
|
||||||
|
return subprocess.check_output(
|
||||||
|
"git tag -l",
|
||||||
|
shell=True,
|
||||||
|
encoding="utf-8"
|
||||||
|
).splitlines()
|
|
@ -20,5 +20,5 @@ class Command:
|
||||||
def help(self) -> str:
|
def help(self) -> str:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def add_arguments(self, _: argparse.ArgumentParser):
|
def add_arguments(self, parser: argparse.ArgumentParser):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
|
@ -9,10 +9,12 @@ import argparse
|
||||||
from typing import List
|
from typing import List
|
||||||
from erynwells_me.scripting import Command
|
from erynwells_me.scripting import Command
|
||||||
from erynwells_me.weeknotes import WeeknotesCommand
|
from erynwells_me.weeknotes import WeeknotesCommand
|
||||||
|
from erynwells_me.deployment import DeploymentCommand
|
||||||
|
|
||||||
|
|
||||||
COMMANDS: List[Command] = [
|
COMMANDS: List[Command] = [
|
||||||
WeeknotesCommand(),
|
WeeknotesCommand(),
|
||||||
|
DeploymentCommand(),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue