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:
|
||||
return ''
|
||||
|
||||
def add_arguments(self, _: argparse.ArgumentParser):
|
||||
def add_arguments(self, parser: argparse.ArgumentParser):
|
||||
raise NotImplementedError()
|
||||
|
|
|
@ -9,10 +9,12 @@ import argparse
|
|||
from typing import List
|
||||
from erynwells_me.scripting import Command
|
||||
from erynwells_me.weeknotes import WeeknotesCommand
|
||||
from erynwells_me.deployment import DeploymentCommand
|
||||
|
||||
|
||||
COMMANDS: List[Command] = [
|
||||
WeeknotesCommand(),
|
||||
DeploymentCommand(),
|
||||
]
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue