aboutsummaryrefslogtreecommitdiffstats
path: root/pw-schedule
blob: 0f8fee40e79bee025da6d3564ec5ea8c892b67ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/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 Stanislav Hao Jiri )
out="schedule.csv"
rstart=$(date --iso-8601)
weeks=$(expr 2 '*' ${#reviewer[@]})

usage()
{
  cat <<-EOF
  usage: pw-schedule [-h] [-o FILE] [-s START_DATE] [-n WEEKS]

  defaults:
    FILE       := $out
    START_DATE := $rstart
    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" '+%w')
  stride=2
  if [ "$day" = "1" ]; then # day 1 is Monday
    stride=3
  fi
  rend=$(date --iso-8601 --date "$rstart +$stride days")
  rs=$(date --iso-8601 --date "$rstart")
  re=$(date --iso-8601 --date "$rend")
  echo "BPF Reviewer: $dev,$rs,$re" >> $out
  if [ $stride -eq 2 ]; then
    rend=$(date --iso-8601 --date "$rend +$stride days")
  fi
  rstart=$rend
done
exit 0