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