From b3826709eca5a7cda0a61e4ae87c34cd2f3fb8d4 Mon Sep 17 00:00:00 2001 From: Anton Yuzhaninov Date: Mon, 22 Oct 2018 22:19:29 -0400 Subject: [PATCH] Share robot log and report on https://ci.rspamd.com/testlogs/ Sending functional test log (about 5Mb) in a email attachmend was temporary solution. Upload them to https://ci.rspamd.com/testlogs/ instead. Link to log/report will be printed in build log. --- .drone.yml | 11 +++++++-- test/tools/http_put.py | 51 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-) create mode 100755 test/tools/http_put.py diff --git a/.drone.yml b/.drone.yml index 76962e6e6..7db345c63 100644 --- a/.drone.yml +++ b/.drone.yml @@ -93,9 +93,17 @@ pipeline: # some rspamd processes during this test work as root and some as nobody # use umask to create world-writable files so nobody can write to *.gcda files created by root - umask 0000 + - set +e - RSPAMD_INSTALLROOT=/rspamd/install robot --xunit xunit.xml --exclude isbroken $CI_WORKSPACE/test/functional/cases; EXIT_CODE=$? + - set -e + # upload test results to nginx frontent using WebDAV PUT + - > + if [ -n "$HTTP_PUT_AUTH" ]; then + $CI_WORKSPACE/test/tools/http_put.py log.html report.html $CI_SYSTEM_LINK/testlogs/$CI_REPO_NAME/$CI_BUILD_NUMBER/; + fi - find /var/tmp/ -name '*.core' - exit $EXIT_CODE + secrets: [http_put_auth] send-coverage: image: rspamd/ci-ubuntu-test @@ -113,10 +121,9 @@ pipeline: # don't send coverage report for pull request event: [push, tag] - send-test-log: + notify: image: drillster/drone-email from: noreply@rspamd.com - attachment: /rspamd/build/log.html secrets: [email_host, email_username, email_password] when: status: failure diff --git a/test/tools/http_put.py b/test/tools/http_put.py new file mode 100755 index 000000000..dab9a2150 --- /dev/null +++ b/test/tools/http_put.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +""" +Small script to upload file using HTTP PUT +""" + +import argparse +import os +import sys + +import requests + + +def main(): + parser = argparse.ArgumentParser( + description='Upload a file usgin HTTP PUT method', + epilog=( + "To use HTTP Auth set HTTP_PUT_AUTH environment variable to user:password\n" + "Example: %(prog)s file1 file2 https://example.com/dir/")) + parser.add_argument( + "file", type=argparse.FileType('rb'), nargs='+', help="File to upload") + parser.add_argument( + "dir_url", help="Remote URL (path to a directory, must ends with /)") + args = parser.parse_args() + + if not args.dir_url.endswith('/'): + parser.error("URL must ends with /") + + http_auth = os.getenv('HTTP_PUT_AUTH') + if http_auth: + user, password = http_auth.split(':') + auth = (user, password) + else: + auth = None + + exit_code = 0 + + for fh in args.file: + try: + r = requests.put(args.dir_url + fh.name, data=fh, auth=auth, timeout=(45, 90)) + r.raise_for_status() + print("{} uploaded to {}".format(fh.name, r.url)) + except (requests.exceptions.ConnectionError, + requests.exceptions.HTTPError) as err: + print(err, file=sys.stderr) + exit_code = 1 + + return exit_code + + +if __name__ == '__main__': + sys.exit(main()) -- 2.39.5