blob: 6aff680d384cbb8226379f2c9d616fc252b20d28 [file] [log] [blame]
Fathi Boudra422bf772019-12-02 11:10:16 +02001#!/usr/bin/env python3
2#
Zelalem1af7a7b2020-08-04 17:34:32 -05003# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
Fathi Boudra422bf772019-12-02 11:10:16 +02004#
5# SPDX-License-Identifier: BSD-3-Clause
6#
7
8import argparse
9import datetime
Zelalem1af7a7b2020-08-04 17:34:32 -050010import json
Fathi Boudra422bf772019-12-02 11:10:16 +020011import os
12import sys
13
14# suds is not a standard library package. Although it's installed in the Jenkins
15# slaves, it might not be so in the user's machine (when running Coverity scan
16# on there).
17try:
18 import suds
19except ImportError:
20 print(" You need to have suds Python3 package to query Coverity server")
21 print(" pip3 install suds-py3")
22 sys.exit(0)
23
24# Get coverity host from environment, or fall back to the default one.
25coverity_host = os.environ.get("coverity_host", "coverity.cambridge.arm.com")
Zelalem219df412020-05-17 19:21:20 -050026coverity_port = os.environ.get("coverity_port", "8443")
Fathi Boudra422bf772019-12-02 11:10:16 +020027
28parser = argparse.ArgumentParser()
29
30parser.add_argument("--description", help="Snapshot description filter")
Fathi Boudra422bf772019-12-02 11:10:16 +020031parser.add_argument("--old", default=10, help="Max snapshot age in days")
32parser.add_argument("--host", default=coverity_host, help="Coverity server")
Zelalem219df412020-05-17 19:21:20 -050033parser.add_argument("--https-port", default=coverity_port, help="Coverity Secure port")
Zelalem1af7a7b2020-08-04 17:34:32 -050034parser.add_argument("--auth-key-file", default=None, help="Coverity authentication file", dest="auth_key_file")
Fathi Boudra422bf772019-12-02 11:10:16 +020035parser.add_argument("--version", help="Snapshot version filter")
36parser.add_argument("stream_name")
37
38opts = parser.parse_args()
39
Zelalem1af7a7b2020-08-04 17:34:32 -050040token = json.load(open(opts.auth_key_file))
41user = token["username"]
42password = token["key"]
Fathi Boudra422bf772019-12-02 11:10:16 +020043
44# SOAP magic stuff
Zelalem219df412020-05-17 19:21:20 -050045client = suds.client.Client("https://{}/ws/v9/configurationservice?wsdl".format(opts.host))
Fathi Boudra422bf772019-12-02 11:10:16 +020046security = suds.wsse.Security()
47token = suds.wsse.UsernameToken(user, password)
48security.tokens.append(token)
49client.set_options(wsse=security)
50
51# Construct stream ID data object
52streamid_obj = client.factory.create("streamIdDataObj")
53streamid_obj.name = opts.stream_name
54
55# Snapshot filter
56filter_obj = client.factory.create("snapshotFilterSpecDataObj")
57
58# Filter snapshots for age
59past = datetime.date.today() - datetime.timedelta(days=opts.old)
60filter_obj.startDate = past.strftime("%Y-%m-%d")
61
62if opts.version:
63 filter_obj.versionPattern = opts.version
64
65if opts.description:
66 filter_obj.descriptionPattern = opts.description
67
68# Query server
69results = client.service.getSnapshotsForStream(streamid_obj, filter_obj)
70
71# Print ID of the last snapshot if results were returned
72if results:
Zelalem1af7a7b2020-08-04 17:34:32 -050073 print(results[-1].id)
74else:
75 sys.exit(1)