44d6736a5e
Per best practices, explicitly use the python3 executable rather than assuming the platform with have a "python" executable that maps to python3. https://www.python.org/dev/peps/pep-0394/ Change-Id: I39b8a1013a891f4570f374d8faa3cfa2ecaf3347 Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
96 lines
2.6 KiB
Python
Executable File
96 lines
2.6 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from __future__ import print_function
|
|
|
|
import argparse
|
|
import datetime
|
|
|
|
import yaml
|
|
|
|
|
|
def mk_entry(name, week, cross_project=None, project_specific=None):
|
|
d = {
|
|
'start': '{:%Y-%m-%d}'.format(week),
|
|
'end': '{:%Y-%m-%d}'.format(week + work_week),
|
|
}
|
|
if name:
|
|
d['name'] = name
|
|
if cross_project:
|
|
d['x-project'] = cross_project
|
|
if project_specific:
|
|
d['project-specific'] = project_specific
|
|
return d
|
|
|
|
|
|
def add_cycle(name):
|
|
return '{}-{}'.format(args.prefix_char, name)
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
'prefix_char',
|
|
help='single letter prefix for tags',
|
|
)
|
|
parser.add_argument(
|
|
'previous_release',
|
|
help='monday of the week of previous release, YYYY-MM-DD',
|
|
)
|
|
parser.add_argument(
|
|
'next_release',
|
|
help='monday of the week of upcoming release, YYYY-MM-DD',
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
|
|
previous_release_date = datetime.datetime.strptime(
|
|
args.previous_release, '%Y-%m-%d')
|
|
next_release_date = datetime.datetime.strptime(
|
|
args.next_release, '%Y-%m-%d')
|
|
|
|
week = datetime.timedelta(weeks=1)
|
|
work_week = datetime.timedelta(days=4)
|
|
|
|
# Build the list of Mondays leading up to the release.
|
|
weeks = []
|
|
current = previous_release_date
|
|
while current < next_release_date:
|
|
current += week
|
|
weeks.append(current)
|
|
|
|
n_weeks = len(weeks)
|
|
|
|
cycle = [
|
|
# Print the date for the previous release. The event name will
|
|
# need to be replaced manually with the right name.
|
|
mk_entry('', previous_release_date,
|
|
cross_project=['REPLACE-WITH-PREVIOUS-RELEASE-REF']),
|
|
]
|
|
|
|
for n, w in enumerate(weeks, 1):
|
|
name = 'R{:<+d}'.format(n - n_weeks)
|
|
cross_project = []
|
|
if n == n_weeks:
|
|
cross_project.append(add_cycle('final'))
|
|
cycle.append(mk_entry(name, w, cross_project=cross_project))
|
|
|
|
data = {
|
|
'cycle': cycle,
|
|
}
|
|
|
|
print('---')
|
|
print('start-week: {:%Y-%m-%d}'.format(weeks[0]))
|
|
print('release-week: {:%Y-%m-%d}'.format(next_release_date))
|
|
print(yaml.dump(data, default_flow_style=False, explicit_start=False))
|