// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  project:          opentitan
  doc_server:       docs.opentitan.org
  results_server:   reports.opentitan.org

  // Default directory structure for the output
  scratch_base_path:  "{scratch_root}/{dut}.{flow}.{tool}"
  scratch_path:       "{scratch_base_path}/{branch}"
  tool_srcs_dir:      "{scratch_path}/{tool}"

  // Results server stuff - indicate what command to use to copy over the results.
  // Workaround for gsutil to fall back to using python2.7.
  results_server_prefix:      "gs://"
  results_server_url_prefix:  "https://"
  results_server_cmd:         "CLOUDSDK_PYTHON=/usr/bin/python2.7 /usr/bin/gsutil"

  results_server_path: "{results_server_prefix}{results_server}/{rel_path}"
  results_server_dir:  "{results_server_path}/latest"

  results_server_html: "results.html"
  results_server_page: "{results_server_dir}/{results_server_html}"

  results_summary_server_html: "summary.html"
  results_summary_server_page: "{results_server_path}/{results_summary_server_html}"

  // If defined, this is printed into the results md files
  revision_string: '''{eval_cmd}
      COMMIT_SHORT=`git log -n 1 --abbrev-commit | head -n 1 | awk -F ' ' '{print $2}'`;                         \
      COMMIT_LONG=`git log -n 1 | head -n 1 | awk -F ' ' '{print $2}'`;                                          \
      BRANCH=`git rev-parse --abbrev-ref HEAD`;                                                                  \
      echo "Revision: [\`$COMMIT_SHORT\`](https://github.com/lowrisc/opentitan/tree/$COMMIT_LONG) on \`$BRANCH\`";
      '''
}
