Skip to content
Snippets Groups Projects
Commit be9d7ede9813 authored by Georges Racinet's avatar Georges Racinet
Browse files

push-release: switch to object-oriented style

We will have to init some constants after CLI parsing, it's
cleaner to make attributes out of them.
parent c9cebb04a5f7
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,57 @@
BASE_IMAGE = 'octobus/heptapod'
GITLAB_RAILS = '/opt/gitlab/embedded/service/gitlab-rails/'
class Releaser:
def __init__(self, simulate):
self.simulate = simulate
def testing_img(self, stable_series):
return self.image_tag('testing',
stable_series=stable_series)
def image_tag(self, label, stable_series=None):
if stable_series is not None:
label = '-'.join((stable_series, label))
return ':'.join((self.docker_hub_base_image(), label))
def read_check_version(self, stable_series, validate_build_number=True):
"""Read version files and check consistency."""
img = self.testing_img(stable_series)
logger.info("Reading version metadata from image %r", img)
cmd = ('docker', 'run', '-it', '--rm', img)
archival = subprocess.check_output(
cmd + ('cat', GITLAB_RAILS + '.hg_archival.txt')).decode()
version = subprocess.check_output(
cmd + ('cat', GITLAB_RAILS + 'HEPTAPOD_VERSION')).decode().strip()
release = subprocess.check_output(
cmd + ('cat', '/RELEASE')).decode().splitlines()
version = version.replace(".rc", "rc")
assert any(re.match(r'^tag: heptapod-{}$'.format(version), line)
for line in archival.splitlines())
assert release[0].rstrip() == "RELEASE_PACKAGE=heptapod"
release_version, build_number = release[1].rstrip().rsplit('-', 1)
assert release_version.replace('~', '') == "RELEASE_VERSION=" + version
if validate_build_number:
try:
int(build_number)
except TypeError:
raise InvalidBuildNumber(release[1])
return archival, version, build_number
def push_tag(self, label, stable_series=None, tag_series=None):
img_tag = self.image_tag(label, stable_series=tag_series)
call(('docker', 'tag',
self.testing_img(stable_series),
img_tag),
simulate=self.simulate)
call(('docker', 'push', img_tag), simulate=self.simulate)
parser = argparse.ArgumentParser(
"Create Docker image tags from the current testing, after some "
"verifications.")
......@@ -44,45 +95,6 @@
pass
def testing_img(stable_series):
return image_tag('testing',
stable_series=stable_series)
def image_tag(label, stable_series=None):
if stable_series is not None:
label = '-'.join((stable_series, label))
return ':'.join((BASE_IMAGE, label))
def read_check_version(stable_series, validate_build_number=True):
"""Read version files and check consistency."""
img = testing_img(stable_series)
logger.info("Reading version metadata from image %r", img)
cmd = ('docker', 'run', '-it', '--rm', img)
archival = subprocess.check_output(
cmd + ('cat', GITLAB_RAILS + '.hg_archival.txt')).decode()
version = subprocess.check_output(
cmd + ('cat', GITLAB_RAILS + 'HEPTAPOD_VERSION')).decode().strip()
release = subprocess.check_output(
cmd + ('cat', '/RELEASE')).decode().splitlines()
version = version.replace(".rc", "rc")
assert any(re.match(r'^tag: heptapod-{}$'.format(version), line)
for line in archival.splitlines())
assert release[0].rstrip() == "RELEASE_PACKAGE=heptapod"
release_version, build_number = release[1].rstrip().rsplit('-', 1)
assert release_version.replace('~', '') == "RELEASE_VERSION=" + version
if validate_build_number:
try:
int(build_number)
except TypeError:
raise InvalidBuildNumber(release[1])
return archival, version, build_number
def call(cmd, simulate=True):
logger.info("Simulation mode, would run %r" if simulate else "Running %r",
cmd)
......@@ -90,18 +102,6 @@
subprocess.check_call(cmd)
def push_tag(label,
stable_series=None, tag_series=None,
simulate=True):
img_tag = image_tag(label,
stable_series=tag_series)
call(('docker', 'tag',
testing_img(stable_series),
img_tag),
simulate=simulate)
call(('docker', 'push', img_tag), simulate=simulate)
parsed_args = parser.parse_args()
logging.basicConfig(level=getattr(logging, parsed_args.logging_level.upper()))
stable_series = parsed_args.series
......@@ -105,5 +105,8 @@
parsed_args = parser.parse_args()
logging.basicConfig(level=getattr(logging, parsed_args.logging_level.upper()))
stable_series = parsed_args.series
releaser = Releaser(simulate=parsed_args.simulate,
)
try:
......@@ -108,6 +111,6 @@
try:
archival, version, build_nr = read_check_version(
archival, version, build_nr = releaser.read_check_version(
stable_series=stable_series,
validate_build_number=not parsed_args.arbitrary_build_number)
except InvalidBuildNumber as exc:
......@@ -125,14 +128,10 @@
print("Not confirmed, bye")
sys.exit(0)
simulate = parsed_args.simulate
push_tag(version,
simulate=simulate,
stable_series=stable_series)
push_tag('latest',
simulate=simulate,
tag_series=stable_series,
stable_series=stable_series)
releaser.push_tag(version,
stable_series=stable_series)
releaser.push_tag('latest',
tag_series=stable_series,
stable_series=stable_series)
if stable_series is None:
future_stable_series = '-'.join(version.split('.', 2)[:2])
......@@ -137,6 +136,5 @@
if stable_series is None:
future_stable_series = '-'.join(version.split('.', 2)[:2])
push_tag('latest',
simulate=simulate,
tag_series=future_stable_series,
stable_series=stable_series)
releaser.push_tag('latest',
tag_series=future_stable_series,
stable_series=stable_series)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment