diff options
author | Daniel Borkmann <daniel@iogearbox.net> | 2022-06-27 23:05:27 +0200 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2022-06-27 23:19:36 +0200 |
commit | a248d38b57b8c2f223ed4db9253ad8450522bcee (patch) | |
tree | b10f0c984581f5a46727e6b319bf7e2bf619c816 | |
parent | 958ca3c1b471aab95e32c1e095d836206e845aa1 (diff) | |
download | pw-a248d38b57b8c2f223ed4db9253ad8450522bcee.tar.gz |
pw-schedule: Add review rotation tool for BPF
Usage is just to execute `pw-schedule` which then dumps a `schedule.csv`
file that can be imported into Google calendar and elsewhere.
Example to generate schedule for 11 weeks starting from today:
[foo@linux pw]$ ./pw-schedule -n 11
[foo@linux pw]$ cat schedule.csv
Subject,Start Date,End Date
BPF Reviewer: John,06/27/2022,06/30/2022
BPF Reviewer: Hao,06/30/2022,07/02/2022
BPF Reviewer: Alexei,07/04/2022,07/07/2022
BPF Reviewer: Song,07/07/2022,07/09/2022
BPF Reviewer: KP,07/11/2022,07/14/2022
BPF Reviewer: Yonghong,07/14/2022,07/16/2022
BPF Reviewer: Andrii,07/18/2022,07/21/2022
BPF Reviewer: Jiri,07/21/2022,07/23/2022
BPF Reviewer: Martin,07/25/2022,07/28/2022
BPF Reviewer: Stanislav,07/28/2022,07/30/2022
BPF Reviewer: Daniel,08/01/2022,08/04/2022
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rwxr-xr-x | pw-schedule | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/pw-schedule b/pw-schedule new file mode 100755 index 0000000..621070b --- /dev/null +++ b/pw-schedule @@ -0,0 +1,80 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# +# Schedule hack for kernel review rotation, dumped as .csv file which can +# then be imported into Google calendar or elsewhere. +# +# Copyright (C) 2022 Daniel Borkmann <daniel@iogearbox.net> + +source $(dirname $0)/lib.sh + +reviewer=( Alexei Daniel Andrii Martin Song Yonghong John KP Stanislav Hao Jiri ) +out="schedule.csv" +rstart=$(date) +weeks=$(expr 2 '*' ${#reviewer[@]}) + +usage() +{ + tmp=$(date --date "$rstart" '+%m/%d/%Y') + cat <<-EOF + usage: pw-schedule [-h] [-o FILE] [-s START_DATE] [-n WEEKS] + + defaults: + FILE := $out + START_DATE := $tmp + WEEKS := $weeks +EOF + exit +} + +shuffle() +{ + RANDOM=$$ + declare -a array=($@) + declare -i k n=${#array[@]} + while [ $n -ge 0 ] + do + let "k = RANDOM % (n + 1)" + reviewer_sch+=(${array[$k]}) + array[k]=${array[$n]} + array[n]=$reviewer_sch + let "n--" + done +} + +schedule_dump_cover() +{ + echo "Subject,Start Date,End Date" >> $out +} + +while true; do + case "$1" in + -o | --output ) out="$2"; shift 2 ;; + -n | --weeks ) weeks="$2"; shift 2 ;; + -s | --start ) rstart="$2"; shift 2 ;; + -h | --help ) usage; break ;; + -- ) shift; break ;; + * ) break ;; + esac +done +rm $out 2> /dev/null +shuffle ${reviewer[@]} +schedule_dump_cover +for i in $(seq 0 1 $(expr $weeks - 1)) +do + dev=${reviewer_sch[ $i % ${#reviewer[@]} ]} + day=$(date --date "$rstart" '+%A') + stride=2 + if [ "$day" = "Monday" ]; then + stride=3 + fi + rend=$(date --date "$rstart +$stride days") + rs=$(date --date "$rstart" '+%m/%d/%Y') + re=$(date --date "$rend" '+%m/%d/%Y') + echo "BPF Reviewer: $dev,$rs,$re" >> $out + if [ $stride -eq 2 ]; then + rend=$(date --date "$rend +$stride days") + fi + rstart=$rend +done +exit 0 |