Commit 3e047d50 authored by Paul McCarthy's avatar Paul McCarthy 🚵
Browse files

RF: Don't try and trigger deploy on a failed build

parent 72a01f51
...@@ -7,10 +7,12 @@ ...@@ -7,10 +7,12 @@
# #
import sys
import os.path as op import os.path as op
import functools as ft import functools as ft
import textwrap as tw import textwrap as tw
import argparse import argparse
import datetime
import multiprocessing.dummy as mp import multiprocessing.dummy as mp
from fsl_ci.recipe import get_recipe_variable from fsl_ci.recipe import get_recipe_variable
...@@ -32,6 +34,11 @@ SERVER_URL = 'https://git.fmrib.ox.ac.uk' ...@@ -32,6 +34,11 @@ SERVER_URL = 'https://git.fmrib.ox.ac.uk'
"""Default gitlab instance URL, if not specified on the command.line.""" """Default gitlab instance URL, if not specified on the command.line."""
def now():
"""Returns the current time as a string. """
return datetime.datetime.now().strftime('%H:%M:%S')
def get_revision(recipe_path, server, token): def get_revision(recipe_path, server, token):
"""Return the value of the FSLCONDA_REVISION variable on the given """Return the value of the FSLCONDA_REVISION variable on the given
conda recipe repository, or None if it is not set. conda recipe repository, or None if it is not set.
...@@ -85,7 +92,7 @@ def trigger_build(project, server, token, production): ...@@ -85,7 +92,7 @@ def trigger_build(project, server, token, production):
pid = pipeline['id'] pid = pipeline['id']
print(f'Pipeline triggered on {project} ({channel} build) ' print(f'{now()} Pipeline triggered on {project} ({channel} build) '
f'- see {pipeline["web_url"]}') f'- see {pipeline["web_url"]}')
try: try:
...@@ -93,7 +100,7 @@ def trigger_build(project, server, token, production): ...@@ -93,7 +100,7 @@ def trigger_build(project, server, token, production):
except Exception: except Exception:
return None return None
print(f'Build pipeline for {project} has finished: {status}') print(f'{now()} Build pipeline for {project} has finished: {status}')
if status != 'manual': if status != 'manual':
return None return None
...@@ -106,6 +113,11 @@ def trigger_deploy(project, pid, server, token, production): ...@@ -106,6 +113,11 @@ def trigger_deploy(project, pid, server, token, production):
and waits for it to complete. and waits for it to complete.
""" """
# trigger_build returns None
# if the build failed
if pid is None:
return False
# deployment to staging/production gets set at # deployment to staging/production gets set at
# build time, so we don't need to pass the STAGING # build time, so we don't need to pass the STAGING
# variable here, like we do in trigger_build # variable here, like we do in trigger_build
...@@ -116,7 +128,7 @@ def trigger_deploy(project, pid, server, token, production): ...@@ -116,7 +128,7 @@ def trigger_deploy(project, pid, server, token, production):
meta = load_meta_yaml(meta) meta = load_meta_yaml(meta)
platforms = get_platform_ids(meta) platforms = get_platform_ids(meta)
print(f'Triggering deploy-{platforms}-conda-package jobs ' print(f'{now()} Triggering deploy-{platforms}-conda-package jobs '
f'on {project} (deploying to {channel} channel)') f'on {project} (deploying to {channel} channel)')
try: try:
...@@ -128,9 +140,11 @@ def trigger_deploy(project, pid, server, token, production): ...@@ -128,9 +140,11 @@ def trigger_deploy(project, pid, server, token, production):
trigger_job(project, j['id'], server, token) trigger_job(project, j['id'], server, token)
status = wait_on_pipeline(project, pid, server, token) status = wait_on_pipeline(project, pid, server, token)
print(f'Deploy job {project} has finished: {status}') print(f'{now()} Deploy job {project} has finished: {status}')
return True
except Exception as e: except Exception as e:
print(f'Error triggering deploy job on {project}: {e}') print(f'Error triggering deploy job on {project}: {e}')
return False
def parseArgs(argv=None): def parseArgs(argv=None):
...@@ -183,19 +197,22 @@ def main(argv=None): ...@@ -183,19 +197,22 @@ def main(argv=None):
server=args.server, server=args.server,
token=args.token, token=args.token,
production=args.production) production=args.production)
result = True
if args.sequential: if args.sequential:
for project in projects: for project in projects:
pid = build(project) pid = build(project)
deploy(project, pid) if not deploy(project, pid):
result = False
else: else:
pool = mp.Pool(len(projects)) pool = mp.Pool(len(projects))
pids = pool.map(build, projects) pids = pool.map(build, projects)
pool.starmap(deploy, zip(projects, pids)) result = all(pool.starmap(deploy, zip(projects, pids)))
pool.close() pool.close()
pool.join() pool.join()
return 0 if result else 1
if __name__ == '__main__': if __name__ == '__main__':
main() sys.exit(main())
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment