Improve the error handling for towncrier

The changelog shows up via stdout, everything else via stderr. We dump as much information as we can into the changelog to make debugging errors easier.
pull/977/head
Travis Ralston 6 years ago
parent 905ef6dadd
commit a8461e647f

@ -839,21 +839,28 @@ class MatrixUnits(Units):
tc_lines = [] tc_lines = []
if os.path.isdir(tc_path): if os.path.isdir(tc_path):
logger.info("Generating towncrier changelog for: %s" % name) logger.info("Generating towncrier changelog for: %s" % name)
try: p = subprocess.run(
raw_log = subprocess.check_output( ['towncrier', '--version', 'Unreleased Changes', '--name', name, '--draft'],
['towncrier', '--version', 'Unreleased Changes', '--name', name, '--draft'], cwd=tc_path,
stderr=subprocess.PIPE, check=False, # We'll manually check the exit code
cwd=tc_path, stderr=subprocess.PIPE,
).strip().decode('UTF-8') stdout=subprocess.PIPE,
)
if p.returncode != 0:
# Something broke - dump as much information as we can
logger.error("Towncrier exited with code %s" % p.returncode)
logger.error(p.stdout.decode('UTF-8'))
logger.error(p.stderr.decode('UTF-8'))
raw_log = ""
else:
raw_log = p.stdout.decode('UTF-8')
# This is a bit of a hack, but it does mean that the log at least gets *something* # This is a bit of a hack, but it does mean that the log at least gets *something*
# to tell us it broke # to tell us it broke
if not raw_log.startswith("Unreleased Changes"): if not raw_log.startswith("Unreleased Changes"):
logger.error("Towncrier appears to have failed to generate a changelog")
logger.error(raw_log) logger.error(raw_log)
raw_log = "" raw_log = ""
except subprocess.CalledProcessError as e:
logger.error(e)
raw_log = ""
tc_lines = raw_log.splitlines() tc_lines = raw_log.splitlines()
title_part = None title_part = None

Loading…
Cancel
Save