1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/env python3
- # ex:ts=4:sw=4:sts=4:et
- # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
- #
- # patchtest: execute all unittest test cases discovered for a single patch
- # Note that this script is currently under development and has been
- # hard-coded with default values for testing purposes. This script
- # should not be used without changing the default recipient, at minimum.
- #
- # Copyright (C) 2023 BayLibre Inc.
- #
- # SPDX-License-Identifier: GPL-2.0-only
- #
- import argparse
- import boto3
- import configparser
- import mailbox
- import os
- import sys
- greeting = """Thank you for your submission. Patchtest identified one
- or more issues with the patch. Please see the log below for
- more information:\n\n---\n"""
- suggestions = """\n---\n\nPlease address the issues identified and
- submit a new revision of the patch, or alternatively, reply to this
- email with an explanation of why the patch format should be accepted.
- Note that patchtest may report failures in the merge-on-head test for
- patches that are part of a series if they rely on changes from
- preceeding entries.
- If you believe these results are due to an error in patchtest, please
- submit a bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest'
- category under 'Yocto Project Subprojects'). Thank you!"""
- parser = argparse.ArgumentParser(description="Send patchtest results to a submitter for a given patch")
- parser.add_argument("-p", "--patch", dest="patch", required=True, help="The patch file to summarize")
- args = parser.parse_args()
- if not os.path.exists(args.patch):
- print(f"Patch '{args.patch}' not found - did you provide the right path?")
- sys.exit(1)
- elif not os.path.exists(args.patch + ".testresult"):
- print(f"Found patch '{args.patch}' but '{args.patch}.testresult' was not present. Have you run patchtest on the patch?")
- sys.exit(1)
- result_file = args.patch + ".testresult"
- result_basename = os.path.basename(args.patch)
- testresult = None
- with open(result_file, "r") as f:
- testresult = f.read()
- reply_contents = greeting + testresult + suggestions
- subject_line = f"Patchtest results for {result_basename}"
- if "FAIL" in testresult:
- ses_client = boto3.client('ses', region_name='us-west-2')
- response = ses_client.send_email(
- Source='patchtest@automation.yoctoproject.org',
- Destination={
- 'ToAddresses': ['test-list@lists.yoctoproject.org'],
- },
- ReplyToAddresses=['test-list@lists.yoctoproject.org'],
- Message={
- 'Subject': {
- 'Data': subject_line,
- 'Charset': 'utf-8'
- },
- 'Body': {
- 'Text': {
- 'Data': reply_contents,
- 'Charset': 'utf-8'
- }
- }
- }
- )
- else:
- print(f"No failures identified for {args.patch}.")
|