aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Borkmann <daniel@iogearbox.net>2022-06-27 23:05:27 +0200
committerDaniel Borkmann <daniel@iogearbox.net>2022-06-27 23:19:36 +0200
commita248d38b57b8c2f223ed4db9253ad8450522bcee (patch)
treeb10f0c984581f5a46727e6b319bf7e2bf619c816
parent958ca3c1b471aab95e32c1e095d836206e845aa1 (diff)
downloadpw-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-xpw-schedule80
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