blob: 4dbcda7545f4658098cfb5bd9a3bec42b926ccb3 [file] [log] [blame]
Anas Nashifb8c7de62020-07-08 12:06:12 -04001#!/usr/bin/env python3
2# Copyright (c) 2020 Intel Corp.
3# SPDX-License-Identifier: Apache-2.0
4
Anas Nashif4cd63ab2020-10-27 10:01:00 -04005"""
6Syntax of file:
7 [
8 {
9 "version": "<commit>",
10 "date": "<date>",
11 "weekly: False,
12 },
13 ]
14"""
Anas Nashifb8c7de62020-07-08 12:06:12 -040015import json
16import argparse
17import urllib.request
Anas Nashif4cd63ab2020-10-27 10:01:00 -040018import os
Anas Nashifb8c7de62020-07-08 12:06:12 -040019
20from git import Git
Anas Nashif4cd63ab2020-10-27 10:01:00 -040021from datetime import datetime
Anas Nashifb8c7de62020-07-08 12:06:12 -040022
23VERSIONS_FILE = "versions.json"
24
Anas Nashif4cd63ab2020-10-27 10:01:00 -040025
Anas Nashifb8c7de62020-07-08 12:06:12 -040026def parse_args():
27 parser = argparse.ArgumentParser(
28 description="Manage versions to be tested.")
29 parser.add_argument('-l', '--list', action="store_true",
Anas Nashif4cd63ab2020-10-27 10:01:00 -040030 help="List all published versions")
Anas Nashifb8c7de62020-07-08 12:06:12 -040031 parser.add_argument('-u', '--update',
Anas Nashif4cd63ab2020-10-27 10:01:00 -040032 help="Update versions file from tree.")
Anas Nashifb8c7de62020-07-08 12:06:12 -040033 parser.add_argument('-L', '--latest', action="store_true",
Anas Nashif4cd63ab2020-10-27 10:01:00 -040034 help="Get latest published version")
35 parser.add_argument('-w', '--weekly', action="store_true",
36 help="Mark as weekly")
Anas Nashif5be8afc2020-12-17 10:05:12 -050037 parser.add_argument('-v', '--verbose', action="store_true",
38 help="Verbose output")
Anas Nashifb8c7de62020-07-08 12:06:12 -040039 return parser.parse_args()
40
Anas Nashif4cd63ab2020-10-27 10:01:00 -040041
Anas Nashifb8c7de62020-07-08 12:06:12 -040042def get_versions():
43 data = None
Anas Nashif4cd63ab2020-10-27 10:01:00 -040044 if not os.path.exists('versions.json'):
45 url = 'https://testing.zephyrproject.org/daily_tests/versions.json'
46 urllib.request.urlretrieve(url, 'versions.json')
Anas Nashifb8c7de62020-07-08 12:06:12 -040047 with open("versions.json", "r") as fp:
48 data = json.load(fp)
49
50 return data
51
Anas Nashif4cd63ab2020-10-27 10:01:00 -040052def handle_compat(item):
53 item_compat = {}
54 if isinstance(item, str):
55 item_compat['version'] = item
56 item_compat['weekly'] = False
57 item_compat['date'] = None
58 else:
59 item_compat = item
60
61 return item_compat
62
Anas Nashifb8c7de62020-07-08 12:06:12 -040063def show_versions():
64 data = get_versions()
Anas Nashif4cd63ab2020-10-27 10:01:00 -040065 for item in data:
66 item_compat = handle_compat(item)
67 is_weekly = item_compat.get('weekly', False)
68 wstr = ""
69 datestr = ""
Anas Nashif5be8afc2020-12-17 10:05:12 -050070 if args.verbose:
71 if is_weekly:
72 wstr = "(marked for weekly testing)"
73 if item_compat.get('date'):
74 pdate = datetime.strptime(item_compat['date'], '%Y-%m-%dT%H:%M:%S.%f')
75 date = pdate.strftime("%b %d %Y %H:%M:%S")
76 datestr = f"published on {date}"
77 print(f"- {item_compat['version']} {datestr} {wstr}")
78 else:
79 print(f"{item_compat['version']}")
Anas Nashif4cd63ab2020-10-27 10:01:00 -040080
Anas Nashifb8c7de62020-07-08 12:06:12 -040081
82def show_latest():
83 data = get_versions()
Anas Nashif4cd63ab2020-10-27 10:01:00 -040084 latest = data[-1]
85 item_compat = handle_compat(latest)
Anas Nashifb8c7de62020-07-08 12:06:12 -040086
Anas Nashif4cd63ab2020-10-27 10:01:00 -040087 ver = item_compat.get("version")
88 date = item_compat.get("date", False)
89 is_weekly = item_compat.get('weekly')
90 datestr = ""
91 if date:
92 datestr = f"published on {date}"
Anas Nashif5be8afc2020-12-17 10:05:12 -050093 if args.verbose:
94 print(f"Latest version is {ver} {datestr}")
95 if args.verbose and is_weekly:
Anas Nashif4cd63ab2020-10-27 10:01:00 -040096 print("This version is marked for weekly testing.")
97
Anas Nashif5be8afc2020-12-17 10:05:12 -050098 if not args.verbose:
99 print(f"{ver}")
100
Anas Nashif4cd63ab2020-10-27 10:01:00 -0400101
102def update(git_tree, is_weekly=False):
Anas Nashifb8c7de62020-07-08 12:06:12 -0400103 g = Git(git_tree)
Anas Nashif4cd63ab2020-10-27 10:01:00 -0400104 today = datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f')
Hake Huangd5c60ff2021-01-07 16:31:16 +0800105 version = g.describe("--abbrev=12")
Anas Nashifb8c7de62020-07-08 12:06:12 -0400106 published = False
107 data = get_versions()
Anas Nashif4cd63ab2020-10-27 10:01:00 -0400108
Anas Nashif5be8afc2020-12-17 10:05:12 -0500109 if not is_weekly:
110 wday = datetime.today().strftime('%A')
111 if wday == 'Monday':
112 is_weekly = True
113
Anas Nashif4cd63ab2020-10-27 10:01:00 -0400114 found = list(filter(lambda item: (isinstance(item, dict) and
115 item.get('version') == version) or item == version, data))
116 if found:
Anas Nashifb8c7de62020-07-08 12:06:12 -0400117 published = True
118 print("version already published")
119 else:
120 print(f"New version {version}, adding to file...")
121
122 if data and not published:
123 with open(VERSIONS_FILE, "w") as versions:
Anas Nashif4cd63ab2020-10-27 10:01:00 -0400124 item = {}
125 item['version'] = version
126 item['date'] = today
127 item['weekly'] = is_weekly
128 data.append(item)
Anas Nashifb8c7de62020-07-08 12:06:12 -0400129 json.dump(data, versions)
130
131def main():
Anas Nashif5be8afc2020-12-17 10:05:12 -0500132 global args
133
Anas Nashifb8c7de62020-07-08 12:06:12 -0400134 args = parse_args()
135 if args.update:
Anas Nashif4cd63ab2020-10-27 10:01:00 -0400136 update(args.update, args.weekly)
Anas Nashifb8c7de62020-07-08 12:06:12 -0400137 elif args.list:
138 show_versions()
139 elif args.latest:
140 show_latest()
Anas Nashif4cd63ab2020-10-27 10:01:00 -0400141 else:
142 print("You did not specify any options")
Anas Nashifb8c7de62020-07-08 12:06:12 -0400143
144if __name__ == "__main__":
145 main()