| #!/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 |