blob: 11062eab2ba04ce8b6e146fa18affc4e78e5aa88 [file] [log] [blame]
Clint Adamse3e80512016-02-18 14:46:35 -05001#! /usr/bin/env python
2
3# Copyright 2016 Hewlett Packard Enterprise Development Company, L.P.
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
16
17# This script is intended to be run as part of a periodic proposal bot
18# job in OpenStack infrastructure.
19#
20# In order to function correctly, the environment in which the
21# script runs must have
Matt Riedemann9b6d2f22019-06-18 10:43:16 -040022# * network access to the review.opendev.org Gerrit API
Clint Adamse3e80512016-02-18 14:46:35 -050023# working directory
Matt Riedemann9b6d2f22019-06-18 10:43:16 -040024# * network access to https://opendev.org/
Clint Adamse3e80512016-02-18 14:46:35 -050025
Ian Wienandd5634c42019-06-04 17:30:13 +100026import functools
Ian Wienandc10989b2016-03-21 13:03:34 +110027import logging
Clint Adamse3e80512016-02-18 14:46:35 -050028import json
29import requests
30
Ian Wienandc10989b2016-03-21 13:03:34 +110031logging.basicConfig(level=logging.DEBUG)
32
Ian Wienandd5634c42019-06-04 17:30:13 +100033url = 'https://review.opendev.org/projects/'
Clint Adamse3e80512016-02-18 14:46:35 -050034
35# This is what a project looks like
36'''
37 "openstack-attic/akanda": {
38 "id": "openstack-attic%2Fakanda",
39 "state": "READ_ONLY"
40 },
41'''
42
Ian Wienandd5634c42019-06-04 17:30:13 +100043def is_in_wanted_namespace(proj):
44 # only interested in openstack or x namespace (e.g. not retired
Ian Wienandc10989b2016-03-21 13:03:34 +110045 # stackforge, etc)
Ian Wienandd5634c42019-06-04 17:30:13 +100046 if proj.startswith('stackforge/') or \
47 proj.startswith('stackforge-attic/'):
48 return False
49 else:
50 return True
Clint Adamse3e80512016-02-18 14:46:35 -050051
Ian Wienanddb01ca62016-05-09 13:19:09 +100052# Check if this project has a plugin file
Ian Wienandd5634c42019-06-04 17:30:13 +100053def has_devstack_plugin(session, proj):
Ian Wienand9c69eac2016-09-12 14:58:20 +100054 # Don't link in the deb packaging repos
55 if "openstack/deb-" in proj:
56 return False
Ian Wienandd5634c42019-06-04 17:30:13 +100057 r = session.get("https://opendev.org/%s/raw/branch/master/devstack/plugin.sh" % proj)
Ian Wienanddb01ca62016-05-09 13:19:09 +100058 return r.status_code == 200
Clint Adamse3e80512016-02-18 14:46:35 -050059
Ian Wienandc10989b2016-03-21 13:03:34 +110060logging.debug("Getting project list from %s" % url)
Clint Adamse3e80512016-02-18 14:46:35 -050061r = requests.get(url)
Ian Wienandd5634c42019-06-04 17:30:13 +100062projects = sorted(filter(is_in_wanted_namespace, json.loads(r.text[4:])))
Ian Wienandc10989b2016-03-21 13:03:34 +110063logging.debug("Found %d projects" % len(projects))
Clint Adamse3e80512016-02-18 14:46:35 -050064
Ian Wienandd5634c42019-06-04 17:30:13 +100065s = requests.Session()
66found_plugins = filter(functools.partial(has_devstack_plugin, s), projects)
Clint Adamse3e80512016-02-18 14:46:35 -050067
68for project in found_plugins:
Ian Wienandd5634c42019-06-04 17:30:13 +100069 print(project)