#!/bin/bash
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Due to crbug.com/1081332, we need to update AFDO metadata
# manually. This script performs a few checks and generates a
# new kernel_afdo.json file, which can then be committed.
#
# USAGE:
# toolchain-utils$ ./afdo_tools/update_kernel_afdo
#
# The script modifies the JSON file and shows the git diff.
#
# If the changes look good, git commit them. Example commit
# message (from crrev.com/c/2197462):
#
#   afdo_metadata: Publish the new kernel profiles
#
#   Update chromeos-kernel-3_18 to R84-13080.0-1589189810
#   Update chromeos-kernel-4_4 to R84-13080.0-1589189726
#   Update chromeos-kernel-4_14 to R84-13080.0-1589190025
#   Update chromeos-kernel-4_19 to R84-13080.0-1589189550
#
#   BUG=None
#   TEST=Verified in kernel-release-afdo-verify-orchestrator.
#

set -eu
set -o pipefail

CROS_REPO=https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay
GS_BASE=gs://chromeos-prebuilt/afdo-job/vetted/kernel
KVERS="3.18 4.4 4.14 4.19"
errs=""
successes=0

script_dir=$(dirname "$0")
tc_utils_dir="$script_dir/.."
metadata_dir="$tc_utils_dir/afdo_metadata"
outfile="$metadata_dir/kernel_afdo.json"

# The most recent Monday, in Unix timestamp format.
if [ $(date +%a) = "Mon" ]
then
  expected_time=$(date +%s -d 00:00:00)
else
  expected_time=$(date +%s -d "last Monday")
fi

# Get the current canary branch number (using beta + 1)
beta=$(git ls-remote -h $CROS_REPO | \
       sed -n -e "s/^.*release-R\([0-9][0-9]*\).*$/\1/p" | \
       sort -g | tail -1)
canary="$(($beta + 1))"

json="{"
sep=""
for kver in $KVERS
do
  # Sort the gs output by timestamp (default ordering is by name, so
  # R86-13310.3-1594633089.gcov.xz goes after R86-13310.18-1595237847.gcov.xz)
  latest=$(gsutil.py ls -l "$GS_BASE/$kver/" | sort -k2 | \
           grep "R${canary}" | tail -1 || true)
  if [ -z "$latest" ]
  then
    # if no profiles exist for R${canary}, try the previous branch
    latest=$(gsutil.py ls -l "$GS_BASE/$kver/" | sort -k2 | \
             grep "R${beta}" | tail -1)
  fi

  # Verify that the file has the expected date.
  file_time=$(echo "$latest" | awk '{print $2}')
  file_time_unix=$(date +%s -d "$file_time")
  if [ $file_time_unix -lt $expected_time ]
  then
    expected=$(env TZ=UTC date +%Y-%m-%dT%H:%M:%SZ -d @$expected_time)
    echo "Wrong date for $kver: $file_time is before $expected" >&2
    errs="$errs $kver"
    continue
  fi

  # Generate JSON.
  json_kver=$(echo "$kver" | tr . _)
  # b/147370213 (migrating profiles from gcov format) may result in the
  # pattern below no longer doing the right thing.
  name=$(echo "$latest" | sed 's%.*/\(.*\)\.gcov.*%\1%')
  json=$(cat <<EOT
$json$sep
    "chromeos-kernel-$json_kver": {
        "name": "$name"
    }
EOT
)
  sep=","
  successes=$((successes + 1))
done

# If we did not succeed for any kvers, exit now.
if [ $successes -eq 0 ]
then
  echo "error: AFDO profiles out of date for all kernel versions" >&2
  exit 2
fi

# Write new JSON file.
printf "%s\n}\n" "$json" > "$outfile"

# Show the changes.
(cd "$tc_utils_dir" && git diff)

# If no changes were made, say so.
outdir=$(dirname "$outfile")
shortstat=$(cd "$outdir" && git status --short $(basename "$outfile"))
[ -n "$shortstat" ] || echo $(basename "$outfile")" is up to date."

# If we had any errors, warn about them.
[ -z "$errs" ] || echo "warning: failed to update$errs" >&2
