blob: 3ddd37718f225a769e73920fe2b08ea065f61463 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright (c) 2019, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import argparse
import datetime
import os
import sys
# suds is not a standard library package. Although it's installed in the Jenkins
# slaves, it might not be so in the user's machine (when running Coverity scan
# on there).
try:
import suds
except ImportError:
print(" You need to have suds Python3 package to query Coverity server")
print(" pip3 install suds-py3")
sys.exit(0)
# Get coverity host from environment, or fall back to the default one.
coverity_host = os.environ.get("coverity_host", "coverity.cambridge.arm.com")
parser = argparse.ArgumentParser()
parser.add_argument("--description", help="Snapshot description filter")
parser.add_argument("--file", dest="output_file", help="Output file. Mandatory")
parser.add_argument("--old", default=10, help="Max snapshot age in days")
parser.add_argument("--host", default=coverity_host, help="Coverity server")
parser.add_argument("--version", help="Snapshot version filter")
parser.add_argument("stream_name")
opts = parser.parse_args()
if not opts.output_file:
raise Exception("Must specify an output file")
# We output the snapshot ID to the specified file. In case of any errors, we
# remove the file, and Coverity wrapper can test for its existence.
try:
user = os.environ["TFCIBOT_USER"]
password = os.environ["TFCIBOT_PASSWORD"]
except:
print(" Unable to get credentials for user tfcibot")
print(" For potentially faster analysis, suggest set "
"TFCIBOT_PASSWORD and TFCIBOT_PASSWORD in the environment")
sys.exit(0)
# SOAP magic stuff
client = suds.client.Client("http://{}/ws/v9/configurationservice?wsdl".format(opts.host))
security = suds.wsse.Security()
token = suds.wsse.UsernameToken(user, password)
security.tokens.append(token)
client.set_options(wsse=security)
# Construct stream ID data object
streamid_obj = client.factory.create("streamIdDataObj")
streamid_obj.name = opts.stream_name
# Snapshot filter
filter_obj = client.factory.create("snapshotFilterSpecDataObj")
# Filter snapshots for age
past = datetime.date.today() - datetime.timedelta(days=opts.old)
filter_obj.startDate = past.strftime("%Y-%m-%d")
if opts.version:
filter_obj.versionPattern = opts.version
if opts.description:
filter_obj.descriptionPattern = opts.description
# Query server
results = client.service.getSnapshotsForStream(streamid_obj, filter_obj)
# Print ID of the last snapshot if results were returned
if results:
try:
with open(opts.output_file, "w") as fd:
print(results[-1].id, file=fd)
except:
os.remove(opts.output_file)
raise